API

Vebhuklar

Yangilandi 28-sentabr, 20265 daqiqa o'qish

Vebhuk — Chato bilan sizning dasturingiz oʻrtasidagi koʻprik: sayt, ombor, 1C, CRM. U ikki tomonga ishlaydi va tomonlar bir-biriga bogʻliq emas: faqat bittasini yoqish ham mumkin.

  • Chiquvchi — biror narsa sodir boʻlganda Chato sizga oʻzi murojaat qiladi va mijoz bilan suhbat vaqtida sizdan soʻraydi.
  • Kiruvchi — dasturingiz Chato’ga murojaat qiladi: mijozga yozadi, menejerni chaqiradi, kartani tuzatadi, yozishmalarni oʻqiydi.

Sozlash kabinetda: AI-yordamchi → Ulanishlar → Vebhuk.

Chiquvchi: manzilingizga keladigan hodisalar

Manzilni (faqat https), xohlasangiz imzo uchun maxfiy soʻzni va oʻz sarlavhalaringizni kiriting — odatda bu dasturingizga kirish kaliti. Soʻng nima haqida xabar berishni belgilang:

Hodisa Qachon keladi
message.received mijoz yozdi
message.sent mijozga javob berildi — yordamchi yoki operator
conversation.created yangi suhbatdagi birinchi xabar
conversation.handoff suhbat menejerga berildi
conversation.assigned operator suhbatni oldi
conversation.reopened suhbat ishga qaytarildi
conversation.closed suhbat yopildi
channel.disconnected kanal uzildi

Chato quyidagi tanaga ega POST yuboradi:

{
  "workspaceId": "cmr4sk0ya0001o701hl7ghbqk",
  "event": "message.received",
  "sentAt": "2026-09-08T10:00:00.000Z",
  "data": {
    "conversationId": "cmt9x1a2b0003o701abcd1234",
    "channelId": "cmt9x0zzz0001o701wxyz9876",
    "messageId": "cmt9x2c3d0005o701efgh5678",
    "direction": "INBOUND",
    "type": "TEXT",
    "text": "Assalomu alaykum, buyurtma tayyormi?",
    "sentAt": "2026-09-08T10:00:00.000Z",
    "isFirstMessage": false
  }
}

200 kodi bilan javob bering — javob tanasini Chato tahlil qilmaydi. Agar serveringiz jim tursa yoki xato bilan javob bersa, mijoz bilan suhbat kechikmaydi: hodisa shunchaki yetkazilmaydi, bu haqda yozuv bizning jurnallarimizda qoladi.

Soʻrov imzosi

Maxfiy soʻz berilgan boʻlsa, Chato x-chato-signature sarlavhasiga soʻrov tanasining HMAC-SHA256 qiymatini oʻn oltilik satr koʻrinishida qoʻyadi. Uni oʻzingizda tekshiring — shunda bizning soʻrovni begonasidan ajratasiz:

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

Imzoni xom tana boʻyicha, JSON tahlil qilinishidan oldin hisoblang: qayta yigʻilgan obyekt boshqa baytlar ketma-ketligini beradi va imzo mos kelmaydi.

Suhbat vaqtida dasturingizni chaqirish

Xuddi shu manzil yordamchi «Funksiyani chaqirish» qadamida dasturingizdan soʻraganda ishlatiladi — «42-oʻlchamda qizili bormi». Tana: workspaceId, conversationId, sentAt va yordamchi yigʻgan narsalar bilan data. Nima javob bersangiz, u mijozga shuni oʻz soʻzi bilan aytadi, shuning uchun qisqa va tushunarli JSON bilan javob bering.

Kiruvchi havola: dasturingiz suhbatda harakat qiladi

Havola yaratish tugmasini bosing va uni dasturchingizga bering. U shunday koʻrinadi:

POST https://chato.kz/api/v1/ai-assistant/inbound/SIZNING_KALITINGIZ
Content-Type: application/json

Havoladagi kalit — uning yagona himoyasi. Havolani bilgan odam mijozlaringizga yozishi mumkin. Uni eʼlon qilmang va begonalar koʻradigan kodga joylamang. Havola tarqalib ketsa — «Kalitni almashtirish» tugmasini bosing, eskisi darhol ishlamay qoladi.

Suhbat yo oʻzining conversationId orqali, yo mijozning telefoni orqali koʻrsatiladi: raqam istalgan koʻrinishda qabul qilinadi — +7 771 525 89 15, 87715258915.

Mijozga yozish

curl -X POST https://chato.kz/api/v1/ai-assistant/inbound/SIZNING_KALITINGIZ \
  -H 'Content-Type: application/json' \
  -d '{"phone":"+7 771 525 89 15","text":"Buyurtma yigʻildi, 19:00 gacha kutamiz"}'

Javobi: {"status":"sent","conversationId":"..."}.

Fayl ilova qilish

{
  "phone": "77715258915",
  "text": "Sizning hisobingiz",
  "fileUrl": "https://sizning-xizmatingiz.kz/hisob-2026-09.pdf",
  "fileName": "Sentyabr hisobi.pdf"
}

Fayl havola boʻyicha olinadi (faqat https, 20 MB gacha) va mijozga ilova sifatida yuboriladi. Bu holda text majburiy emas.

Birinchi boʻlib yozish

Agar bu odam bilan suhbat hali boʻlmasa, channelId qoʻshing — qaysi kanaldan yozish kerakligini:

{ "phone": "77715258915", "channelId": "cmt9x0zzz0001o701wxyz9876", "text": "Assalomu alaykum!" }

channelId boʻlmasa, notanish raqamga hech narsa yuborilmaydi — aks holda tarqalib ketgan havola ommaviy tarqatishga aylanardi.

Qolgan harakatlar

Ularning barchasi oʻsha manzilga yuboriladi, faqat action maydoni farq qiladi.

action Nima qiladi Nima yuborish kerak
message mijozga yozish (birlamchi) text va/yoki fileUrl
note operatorga izoh text
handoff menejerga berish text — sababi
close suhbatni yopish —
reopen ishga qaytarish —
assign xodim tayinlash operatorEmail
contact.update kartani tuzatish contact
contact.get kartani oʻqish —
messages.list soʻnggi xabarlar limit
conversations.list suhbatlar roʻyxati status, limit
deal.create bitim yaratish deal (maydonlar API dagi kabi), contact yoki phone
deal.move bitimni bosqichga ko‘chirish dealId, stageId, «Rad etish» uchun — lossReasonId
deal.note bitimga izoh dealId, text

Maydonlar haqida: text — matn (note uchun bu izoh, handoff uchun sabab, u majburiy emas); contact — { name, phone } obyekti, faqat yuborilgani oʻzgaradi; limit — 1 dan 100 gacha, birlamchi 20; status — OPEN, WAITING, IN_PROGRESS yoki CLOSED. Izohni mijoz koʻrmaydi, reopen dan keyin esa yordamchi suhbatda yana javob beradi.

Misol — suhbatni odamga berish:

{ "action": "handoff", "conversationId": "cmt9x1a2b0003o701abcd1234", "text": "mijoz menejerni soʻrayapti" }

Misol — bu kimligini va suhbat holatini bilish:

{ "action": "contact.get", "phone": "77715258915" }
{
  "status": "ok",
  "conversationId": "cmt9x1a2b0003o701abcd1234",
  "contact": { "id": "...", "name": "Asem", "phone": "77715258915", "username": null },
  "conversation": { "id": "...", "status": "OPEN", "channelId": "...", "unreadCount": 2 }
}

conversations.list — suhbat kerak boʻlmaydigan yagona harakat: identifikator boʻlmaganda keraklisini aynan shu bilan topasiz.

Xato boʻlganda nima qaytadi

Kod Nima boʻldi
404 notanish kalit yoki suhbat/kanal/xodim sizning kompaniyangizda topilmadi
400 boʻsh matn, notanish action, juda qisqa raqam, 20 MB dan katta fayl
429 juda tez-tez — havolaga daqiqasiga 60 soʻrov cheklovi qoʻllanadi

Kalit doim faqat sizning kompaniyangiz doirasida ishlaydi: soʻrov tanasidagi begona conversationId hech narsa bermaydi.

Bogʻlanishni tekshirishning eng oson yoʻli: havola yarating, oʻz raqamingizga contact.get yuboring va kartangiz qaytganiga ishonch hosil qiling. Bu hech narsani oʻzgartirmaydi va mijozga yozmaydi.

Bitimlar va CRM vebxuklari

O‘z CRM ingiz uchun alohida vebxuk manzillari bor: bitim hodisalarini tanlash (deal.created, deal.won, task.completed va boshqalar), vaqt belgisi bilan HMAC-SHA256 imzosi, xatolarda qayta yuborish, yetkazish jurnali va «Qayta yuborish» tugmasi. U yerda huquqli ochiq API kalitlari ham chiqariladi. Hammasi Bitimlar uchun ochiq API va CRM vebxuklari maqolasida tasvirlangan; yuqorida tasvirlangan assistent manzili avvalgidek ishlaydi.