C cenaly.com
Bepul boshlash

Ommaviy API va vebxuklar

Ruxsat huquqlariga ega kalitlar, lidlar, xususiyatlar, hodisalar, muloqotlar va segmentlarning REST API-si, yangi lidlar va hodisalar haqidagi vebxuklar — curl misollari bilan

6 min read Admin-panel demo versiyasi
On this page 9

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#

  1. Integratsiyalar ni oching va sahifa sarlavhasidagi API va vebhuklar tugmasini bosing.
  2. Kalitlar yorlig'ida Kalit yaratish tugmasini bosing, nom kiriting ("CRM", "Sayt backend", "Telegram-bot").
  3. Huquqlar to'plamini tanlang yoki huquqlarni birma-bir belgilang, bir nechta filial bo'lsa — kalit qaysi filiallarga ruxsat etilganini va muddatni ko'rsating.
  4. 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 401 oladi.

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: " sifatida ko'rinadi.

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-After sarlavhasi bilan 429. 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_conversation javobi.

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#

Was this article helpful?