Ommaviy API va vebhuklar
REST API sizning CRM, sayt backend yoki shaxsiy botingizga cenaly.com lidlari va suhbatlari bilan xuddi panel kabi ishlash imkonini beradi: kartochkalarni o'qish, xususiyatlarni o'zgartirish, hodisalarni yuborish, suhbatlarda javob berish. Vebhuklar esa aksincha, yangi lidlar, hodisalar va xabarlar haqida sizning serveringizga o'zi xabar beradi.
Ishga tushirish uchun nima kerak#
| Nima | Qayerda |
|---|---|
| Rol | hisob egasi — kalit uning nomidan ishlaydi; xodimlar kalitlarni ko'rmaydi |
| Bo'lim | yoqilgan chat (lidlar va suhbatlar shu yerda yashaydi) |
| Kalit | Integratsiyalar → API va vebhuklar → Kalitlar → Kalit yaratish |
| API manzili | https://api.cenaly.com/public-api/v1 |
| Metodlar bo'yicha ma'lumotnoma | api.cenaly.com/public-api/v1/docs |
| OpenAPI 3.1 | api.cenaly.com/public-api/v1/openapi.json |
1-qadam. Kalit va huquqlar#
- Integratsiyalar ni oching va sahifa sarlavhasidagi API va vebhuklar tugmasini bosing.
- Kalitlar yorlig'ida Kalit yaratish tugmasini bosing, nom kiriting ("CRM", "Sayt backend", "Telegram-bot").
- Huquqlar to'plamini tanlang yoki huquqlarni birma-bir belgilang, bir nechta filial bo'lsa — kalit qaysi filiallarga ruxsat etilganini va muddatni ko'rsating.
cnk_…maxfiy kalitini nusxalab oling. U faqat bir marta ko'rsatiladi: bizda faqat uning izi (SHA-256) saqlanadi.
| Huquq | Nima beradi |
|---|---|
contacts:read |
lid ro'yxati, qidiruv va kartochkasi, xususiyatlar |
contacts:write |
xususiyatlar va teglarni o'zgartirish, birlashtirish, subyekt so'roviga ko'ra o'chirish |
events:read |
lid hodisalari lentasi |
events:write |
hodisalarni yuborish (xarid, ro'yxatdan o'tish, o'zingizning har qanday) |
conversations:read |
suhbatlar va xabarlar |
conversations:write |
operator javobi, eslatma, holat, mas'ul, belgilar |
messages:send |
lidga uning oxirgi suhbatida xabar yuborish |
segments:read |
saqlangan segmentlar va ularning ishtirokchilari |
To'plamlar: CRM / backend (lidlar, xususiyatlar, hodisalar, suhbatlar va segmentlarni o'qish), Shaxsiy bot (lidlarni o'qiydi, suhbatlarda javob beradi, lidlarga yozadi), Faqat o'qish, Hammasi.
- Huquqlar kalitning huquqlari va filiallarini darhol o'zgartiradi — integratsiya ishlashda davom etadi.
- Qayta chiqarish yangi maxfiy kalit beradi; eskisi darhol ishlashdan to'xtaydi, huquqlar va jurnal saqlanib qoladi.
- Bekor qilish — darhol va butunlay, keyingi so'rov
401oladi.
Kalit Authorization: Bearer cnk_… sarlavhasi (yoki X-Api-Key: cnk_…) orqali uzatiladi. Uni faqat serverda saqlang — brauzerda ham, mobil ilovada ham emas.
2-qadam. Birinchi so'rovlar#
KEY=cnk_ваш_ключ
API=https://api.cenaly.com/public-api/v1
# что умеет ключ: права, точки, лимит
curl -H "Authorization: Bearer $KEY" "$API/me"
# лиды, свежие сверху (20 на страницу)
curl -H "Authorization: Bearer $KEY" "$API/contacts?limit=20"
# поиск по имени, почте или телефону
curl -H "Authorization: Bearer $KEY" "$API/contacts?q=anna"
Javob — har doim konvert:
{
"meta": { "status": 200, "requestId": "…", "nextCursor": "WyIyMDI2LTEwLTA0…" },
"data": { "total": 128, "contacts": [ { "id": "…", "status": "lead", "name": "Анна", "updatedAt": "2026-10-04T09:12:00Z" } ] }
}
Keyingi sahifa — cursor=<meta.nextCursor> bilan xuddi shu so'rov; nextCursor bo'lmasa — boshqa sahifa yo'q. Xato — {"meta": {...}, "error": {"code": "…"}}.
Filial. Agar kalitga bitta filial ruxsat etilgan bo'lsa, uni ko'rsatish shart emas. Agar bir nechta bo'lsa — location=<filial id> qo'shing (ro'yxat — GET /v1/locations), aks holda javob 400 location_required.
Xususiyatlar va hodisalar sizning user_id bo'yicha. Bizning lid id sini saqlash shart emas: ?by=user_id qo'shing, manzil sizning foydalanuvchi identifikatoringizga aylanadi. Bunday user_id bilan lid hali yo'q bo'lsa — biz uni yaratamiz.
# свойства: операции update_or_create, set_once, add, delete, append, union, exclude
curl -X POST -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{"ops":[{"op":"update_or_create","key":"$email","value":"anna@example.com"},
{"op":"add","key":"orders","value":1},
{"op":"union","key":"interests","value":"yoga"}]}' \
"$API/contacts/u-1001/props?by=user_id"
# события пачкой (до 100), повтор с тем же id засчитывается один раз
curl -X POST -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{"events":[{"id":"ord-5531","userId":"u-1001","name":"order_paid","props":{"sum":45,"currency":"GEL"}}]}' \
"$API/events"
# ответ в диалоге и смена статуса
curl -X POST -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{"text":"Здравствуйте! Заказ передан курьеру."}' "$API/conversations/<id>/reply"
curl -X POST -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{"status":"resolved"}' "$API/conversations/<id>/status"
Yozuv paneldagi tahrirlar bilan bir xil navbat orqali amalga oshiriladi: o'zgarishlar bir necha soniyada qo'llanadi, user_id bo'yicha yozuvga javob esa pending bilan 202 bo'ladi. Lid kartochkasida tahrir muallifi "API:
Metodlar#
| Metod | Nima qiladi | Huquq |
|---|---|---|
GET /v1/me, GET /v1/locations |
kalit, huquqlar, filiallar | — |
GET /v1/contacts |
lidlar: status (anon, lead, user), q, limit, cursor |
contacts:read |
GET /v1/contacts/{id} |
karta: xossalar, teglar, voqealar xulosasi | contacts:read |
POST /v1/contacts/{id}/props |
xossalarni amallar bilan (250 tagacha) yoki {"props":{…}} |
contacts:write |
POST / DELETE /v1/contacts/{id}/tags |
lid teglari | contacts:write |
POST /v1/contacts/merge |
ikki kartani birlashtirish: avval koʻrib chiqish, soʻng "apply": true |
contacts:write |
POST /v1/contacts/{id}/erase |
subyekt talabiga koʻra oʻchirish ("confirm": true) |
contacts:write |
GET /v1/contacts/{id}/events |
lid voqealari lentasi | events:read |
POST /v1/contacts/{id}/events, POST /v1/events |
voqealar (bir martada 100 tagacha) | events:write |
GET /v1/contacts/{id}/conversations |
lid suhbatlari | conversations:read |
POST /v1/contacts/{id}/messages |
lidga uning oxirgi suhbatida yozish | messages:send |
GET /v1/conversations, /{id}, /{id}/messages |
suhbatlar va xabarlar | conversations:read |
POST /v1/conversations/{id}/reply |
operator javobi yoki eslatma ("type": "note") |
conversations:write |
POST /v1/conversations/{id}/status, /assign, /tags |
holat, masʼul, belgilar | conversations:write |
GET /v1/segments, GET /v1/segments/{id}/contacts |
segmentlar va ularning ishtirokchilari | segments:read |
Har bir metodning maydonlari, misollari va xato kodlari — maʼlumotnomada.
3-qadam. Vebhuklar#
Vebhuklar filialda sozlanadi: Chat → Sozlamalar → Vebhuklar — https manzil, voqealar va imzo siri. Suhbat voqealariga (yangi suhbat, yangi xabar, holat, baho, belgilar) lid voqealari qoʻshildi:
| Voqea | Qachon keladi |
|---|---|
lead.created |
yangi lid paydo boʻldi (kontakt chatda, formada qoldirilgan yoki API orqali kiritilgan) |
lead.props_changed |
lid xossalari oʻzgardi — kalitlar roʻyxati changedPropsda |
lead.event_tracked |
lidda voqea bor; sukut boʻyicha tizim voqealarisiz ($…) barcha voqealaringiz, nomlar roʻyxati «Qaysi voqealarni yuborish» maydonida beriladi |
message.goal_reached |
lid xabar maqsadiga erishdi (pop-ap, tarqatma) |
{
"event": "lead.event_tracked",
"deliveryId": "WD…",
"at": "2026-10-04T09:12:03Z",
"webhookId": "…",
"locationId": "…",
"contact": { "id": "…", "status": "user", "userId": "u-1001", "props": { "orders": 3 }, "tags": ["vip"] },
"leadEvent": { "name": "order_paid", "at": "2026-10-04T09:12:00Z", "props": { "sum": 45 } }
}
Lidning ismi, pochtasi va telefoni tanaga faqat vebhukda «Mehmon kontaktlarini uzatish» belgisi yoqilgan boʻlsa tushadi. Imzoni tekshirish — tanani vebhuk siri bilan HMAC-SHA256:
# sarlavha X-Meni-Signature: sha256=<hex>
echo -n "$BODY" | openssl dgst -sha256 -hmac "$SECRET"
5 soniya ichida 2xx bilan javob bering — aks holda yetkazish takrorlanadi; uzoq muvaffaqiyatsizliklar seriyasidan soʻng vebhuk oʻchiriladi va bu sozlamalarda koʻrinadi. Dublikatlarni deliveryId boʻyicha ajratib oling.
Cheklovlar#
- Kalit uchun daqiqada 60 soʻrov; ortiqchasi —
Retry-Aftersarlavhasi bilan429. Qoldiq —X-RateLimit-*da. - Sahifada 200 tagacha yozuv (sukut boʻyicha 50), paketda 100 tagacha voqea, soʻrovda 250 tagacha xossa amali, bir martada 30 tagacha teg.
- Hisobda 20 tagacha tirik kalit.
- Kalit chaqiruvlari jurnali 30 kun saqlanadi: vaqt, metod, yoʻl shabloni (id va tanasiz), javob kodi, davomiylik.
- API orqali yuborilgan voqealar lid kartasiga tushadi (lenta, xulosa, segmentlar), lekin tashriflar analitikasining xom jurnaliga emas.
- Lidga faqat mavjud suhbatga yozish mumkin: suhbat boʻlmasa —
409 no_conversationjavobi.
Muammolarni bartaraf etish#
| Javob | Nimani anglatadi | Nima qilish kerak |
|---|---|---|
401 api_key_missing / api_key_invalid |
soʻrovda kalit yoʻq, yoki u notoʻgʻri, bekor qilingan yoki muddati oʻtgan | sarlavhani tekshiring; kerak boʻlsa kalitni qayta chiqaring |
403 scope_required |
kalitda kerakli huquq yoʻq | kalitning Huquqlari — huquq qoʻshing |
400 location_required |
kalitga bir nechta filial ochiq | location=<id> qoʻshing |
404 location_not_found |
filial kalit filiallari orasida yoʻq | GET /v1/locations bilan solishtiring |
404 not_found |
lid yoki suhbat yoʻq | oʻz idlaringiz uchun ?by=user_id ishlating |
429 rate_limited |
daqiqada 60 soʻrovdan koʻp | Retry-After soniya kuting, voqealarni paketlarga guruhlang |
502 upstream_error |
vaqtinchalik nosozlik | soʻrovni keyinroq takrorlang |
Har bir soʻrov Chaqiruvlar jurnali varagʻida koʻrinadi — javob kodi va kalit nomi bilan.
Koʻp beriladigan savollar#
API ni brauzerdan chaqirish mumkinmi? Yoʻq: kalit filialning barcha lidlariga kirish huquqini beradi. API ni oʻz serveringizdan chaqiring.
user_id lid id sidan nimasi bilan farq qiladi? Lid id — kartaning bizning identifikatorimiz. user_id — sizning foydalanuvchi identifikatoringiz (CRM dagi raqam, saytdagi hisob id); ?by=user_id bilan kartani shu bilan murojaat qilish mumkin.
Voqea qayta yuborilsa nima boʻladi? Bir xil id li voqea bir marta hisoblanadi — tarmoq xatosida soʻrovni bemalol takrorlash mumkin.
Har bir filial uchun alohida kalit kerakmi? Yoʻq: bitta kalit bir nechta filial bilan ishlashi mumkin, filial location parametri bilan tanlanadi.
Tegishli boʻlimlar#
- Mehmonlar bilan chat — suhbatlar, lidlar va vebhuk sozlamalari
- Zayavkalar — yagona kiruvchi oqim
- Oʻz ATC ingizning API va MCP si — alohida telefoniya API si
- Integratsiyalar