API

Вебхуктар

Жаңартылды 11 қазан 2026 ж.6 мин оқу

Вебхук — Chato мен сіздің бағдарламаңыздың арасындағы көпір: сайт, қойма, 1С, CRM. Ол екі бағытта жұмыс істейді, әрі бағыттар бір-біріне тәуелді емес: біреуін ғана қосуға болады.

  • Шығыс — бірдеңе болғанда Chato сізге өзі хабарласады және клиентпен әңгіме кезінде сізден сұрайды.
  • Кіріс — бағдарламаңыз Chato-ға хабарласады: клиентке жазады, менеджерді шақырады, картаны түзетеді, жазысуды оқиды.

Кабинетте бапталады: ИИ-ассистент → Қосылымдар → Вебхук.

Шығыс: сіздің мекенжайыңызға келетін оқиғалар

Мекенжайды (тек https), қаласаңыз қолтаңба үшін құпияны және өз тақырыптарыңызды жазыңыз — әдетте бұл бағдарламаңызға кіру кілті. Содан кейін нені хабарлау керегін белгілеңіз:

Оқиға Қашан келеді
message.received клиент жазды
message.sent клиентке жауап берілді — ассистент немесе оператор
conversation.created жаңа диалогтағы алғашқы хабарлама
conversation.handoff диалог менеджерге берілді
conversation.assigned оператор диалогты алды
conversation.reopened диалог жұмысқа қайтарылды
conversation.closed диалог жабылды
channel.disconnected арна ажырады

Chato мынадай денесі бар POST жібереді:

{
  "workspaceId": "cmr4sk0ya0001o701hl7ghbqk",
  "event": "message.received",
  "sentAt": "2026-09-08T10:00:00.000Z",
  "data": {
    "conversationId": "cmt9x1a2b0003o701abcd1234",
    "channelId": "cmt9x0zzz0001o701wxyz9876",
    "messageId": "cmt9x2c3d0005o701efgh5678",
    "direction": "INBOUND",
    "type": "TEXT",
    "text": "Сәлеметсіз бе, тапсырыс дайын ба?",
    "sentAt": "2026-09-08T10:00:00.000Z",
    "isFirstMessage": false
  }
}

10 секунд ішінде кез келген 2xx кодымен жауап беріңіз — жауап денесін Chato талдамайды. Қайта бағыттаулар (3xx) орындалмайды. Бұл мекенжайда қайталау жоқ: серверіңіз үнсіз қалса немесе қатемен жауап берсе, оқиға жай ғана жеткізілмейді, ал клиентпен әңгіме бұдан кідірмейді. Қайталаулар мен жеткізу журналы керек болса, мекенжайды CRM вебхуктарына қосыңыз, оған чаттың сол оқиғалары келеді.

conversation.handoff, conversation.reopened және conversation.closed оқиғаларында data ішінде conversationId, oldStatus, newStatus және changedBy жатады; conversation.assigned ішінде — conversationId, operatorId, operatorEmail, operatorName және assignedBy; channel.disconnected ішінде — channelId және status. conversation.created денесі message.received денесімен бірдей.

Сұраудың қолтаңбасы

Құпия берілсе, Chato x-chato-signature тақырыбына сұрау денесінің HMAC-SHA256 мәнін оналтылық жол түрінде салады (sha256= префиксінсіз және уақыт белгісінсіз — CRM вебхуктарынан айырмашылығы осы). Оны өзіңізде тексеріңіз — сонда біздің сұрауды бөгденікінен ажыратасыз:

const crypto = require('node:crypto');
const expected = crypto.createHmac('sha256', SECRET).update(rawBody).digest('hex');
const ok = expected === req.headers['x-chato-signature'];

Қолтаңбаны сұраудың шикі денесі бойынша, JSON-ды талдағанға дейін есептеңіз: қайта жиналған нысан басқа байт тізбегін береді және қолтаңба сәйкес келмейді.

Әңгіме кезінде бағдарламаңызды шақыру

Дәл сол мекенжай ассистент «Функцияны шақыру» қадамында бағдарламаңыздан сұрағанда қолданылады — «42-ші өлшемде қызылы бар ма». Дене: workspaceId, conversationId, sentAt және ассистент жинағаны бар data. Сіз не жауап берсеңіз, ол клиентке соны өз сөзімен айтады, сондықтан қысқа әрі түсінікті JSON-мен жауап беріңіз.

Кіріс сілтеме: бағдарламаңыз диалогта әрекет етеді

Сілтеме жасау түймесін басып, оны бағдарламашыға беріңіз. Ол былай көрінеді:

POST https://chato.kz/api/v1/ai-assistant/inbound/СІЗДІҢ_КІЛТ
Content-Type: application/json

Сілтемедегі кілт — оның жалғыз қорғанысы. Сілтемені білген адам сіздің клиенттеріңізге жаза алады. Оны жарияламаңыз және бөгде адамдар көретін кодқа салмаңыз. Сілтеме тарап кетсе — «Кілтті ауыстыру» түймесін басыңыз, ескісі бірден жұмысын тоқтатады.

Диалог не өзінің conversationId арқылы, не клиенттің телефоны арқылы көрсетіледі: нөмір кез келген түрде қабылданады — +7 771 525 89 15, 87715258915.

Клиентке жазу

curl -X POST https://chato.kz/api/v1/ai-assistant/inbound/СІЗДІҢ_КІЛТ \
  -H 'Content-Type: application/json' \
  -d '{"phone":"+7 771 525 89 15","text":"Тапсырыс жиналды, 19:00-ге дейін күтеміз"}'

Жауабы: {"data":{"status":"sent","conversationId":"..."}}. Chato-ның бүкіл API-індегідей, нәтиже data өрісінде жатады.

Файл тіркеу

{
  "phone": "77715258915",
  "text": "Сіздің шотыңыз",
  "fileUrl": "https://сіздің-сервис.kz/schet-2026-09.pdf",
  "fileName": "Қыркүйек айының шоты.pdf"
}

Файл сілтеме бойынша алынады (тек https, 20 МБ дейін) және клиентке тіркеме болып кетеді. Бұл жағдайда text міндетті емес.

Бірінші болып жазу

Егер бұл адаммен диалог әлі жоқ болса, channelId қосыңыз — қай арнадан жазу керегін:

{ "phone": "77715258915", "channelId": "cmt9x0zzz0001o701wxyz9876", "text": "Сәлеметсіз бе!" }

channelId болмаса, бейтаныс нөмірге ештеңе жіберілмейді — әйтпесе тарап кеткен сілтеме таратылымға айналар еді.

Қалған әрекеттер

Олардың бәрі сол мекенжайға жіберіледі, тек action өрісі өзгереді.

action Не істейді Не жіберу керек
message клиентке жазу (әдепкі) text және/немесе fileUrl
note операторға белгі text
handoff менеджерге беру text — себебі
close диалогты жабу —
reopen жұмысқа қайтару —
assign қызметкер тағайындау operatorEmail
contact.update картаны түзету contact
contact.get картаны оқу —
messages.list соңғы хабарламалар limit
conversations.list диалогтар тізімі status, limit
deal.create мәміле құру deal (өрістері API-дегідей), contact немесе phone
deal.move мәмілені кезеңге ауыстыру dealId, stageId; «Бас тарту» үшін — lossReasonId, lossComment; кезеңнің міндетті өрістері — fields
deal.note мәмілеге ескертпе dealId, text

Өрістер туралы: text — мәтін (note үшін бұл белгі, handoff үшін себеп, ол міндетті емес); contact — { name, phone } нысаны, тек жіберілгені өзгереді; limit — 1-ден 100-ге дейін, әдепкі 20; status — OPEN, WAITING, IN_PROGRESS немесе CLOSED. reopen кейін ассистент диалогта қайта жауап береді.

Мысал — диалогты адамға беру:

{ "action": "handoff", "conversationId": "cmt9x1a2b0003o701abcd1234", "text": "клиент менеджерді сұрайды" }

Мысал — бұл кім екенін және диалогтың күйін білу:

{ "action": "contact.get", "phone": "77715258915" }
{
  "data": {
    "status": "ok",
    "conversationId": "cmt9x1a2b0003o701abcd1234",
    "contact": { "id": "...", "name": "Әсем", "phone": "77715258915", "username": null, "avatarUrl": null },
    "conversation": {
      "id": "...",
      "status": "OPEN",
      "channelId": "...",
      "assignedOperatorId": null,
      "unreadCount": 2,
      "lastMessageAt": "2026-09-08T10:00:00.000Z"
    }
  }
}

Қалған әрекеттер не қайтарады: status (sent, noted, handoff, closed, reopened, assigned, updated) және conversationId; messages.list — қосымша messages (жаңалары жоғарыда: id, direction, type, content, sentAt); conversations.list — conversations (id, status, channelId, lastMessageAt, lastMessageText, contactName, contactPhone); мәмілелермен әрекеттер — status (deal_created, deal_moved, note_added) және deal.

conversations.list — диалог қажет емес жалғыз әрекет: идентификатор болмағанда керегін дәл сонымен табады.

Қате болғанда не қайтады

Код Не болды
404 белгісіз кілт, немесе диалог/арна/қызметкер/мәміле сіздің компанияңызда табылмады; 10 цифрдан қысқа нөмір де диалогты таппайды
400 бос мәтін, белгісіз action, қате өрістер, файл 20 МБ-тан үлкен немесе жүктелмеді
422 мәміле үшін: кезеңнің міндетті өрістері толтырылмаған (REQUIRED_FIELDS) немесе бас тарту себебі жоқ (LOSS_REASON_REQUIRED)
429 тым жиі — бір IP-мекенжайдан минутына 60 сұраудан артық емес

Қате денесі — {"message": "Диалог не найден", "statusCode": 404, ...}: себебі message ішінде орыс тілінде жазылады.

Кілт әрқашан тек сіздің компанияңыз аясында жұмыс істейді: сұрау денесіндегі бөгде conversationId ештеңе бермейді.

Байланысты тексерудің ең оңай жолы: сілтеме жасаңыз, өз нөміріңізге contact.get жіберіңіз және картаңыз қайтқанына көз жеткізіңіз. Бұл ештеңені өзгертпейді және клиентке жазбайды.

Мәмілелер және CRM вебхуктары

Өз CRM-іңіз үшін бөлек вебхук мекенжайлары бар: мәміле оқиғаларын таңдау (deal.created, deal.won, task.completed және басқалар), уақыт белгісі бар HMAC-SHA256 қолтаңбасы, қателерде қайталау, жеткізу журналы және «Қайта жіберу» түймесі. Сол жерде құқықтары бар ашық API кілттері де бар. Барлығы Мәмілелердің ашық API-і және CRM вебхуктары мақаласында сипатталған; жоғарыда сипатталған ассистент мекенжайы бұрынғыдай жұмыс істейді.