C cenaly.com
Тегін бастау

Жария API және вебхуктер

Құқықтары бар кілттер, лидтердің, қасиеттердің, оқиғалардың, диалогтер мен сегменттердің REST API-і, жаңа лидтер мен оқиғалар туралы вебхуктер — curl мысалдарымен

On this page 9

Публикалық API және вебхуктер

REST API сіздің CRM-ге, сайт бэкендіне немесе жеке ботыңызға cenaly.com лидтерімен және диалогтарымен панель сияқты жұмыс істеуге мүмкіндік береді: карточкаларды оқу, қасиеттерді өзгерту, оқиғаларды жіберу, диалогтарда жауап беру. Вебхуктер, керісінше, жаңа лидтер, оқиғалар және хабарламалар туралы серверіңізге өздері хабарлайды.

Іске қосу үшін не қажет#

Не Қайда
Рөл тіркелгі иесі — кілт оның атынан әрекет етеді; қызметкерлер кілттерді көрмейді
Бөлім қосылған чат (лидтер мен диалогтар сонда орналасады)
Кілт Интеграциялар → API және вебхуктер → Кілттер → Кілт жасау
API мекенжайы https://api.cenaly.com/public-api/v1
Әдістер бойынша анықтамалық api.cenaly.com/public-api/v1/docs
OpenAPI 3.1 api.cenaly.com/public-api/v1/openapi.json

1-қадам. Кілт және құқықтар#

  1. Интеграциялар бөлімін ашып, бет тақырыбындағы API және вебхуктер түймесін басыңыз.
  2. Кілттер қойындысында Кілт жасау түймесін басып, атауын енгізіңіз («CRM», «Сайт бэкенді», «Telegram-бот»).
  3. Құқықтар жинағын таңдаңыз немесе құқықтарды бір-бірлеп белгілеңіз, бірнеше филиал болса — кілт қай филиалдарға рұқсатты және мерзімін көрсетіңіз.
  4. cnk_… құпиясын көшіріңіз. Ол бір рет қана көрсетіледі: бізде тек оның ізтаңбасы (SHA-256) сақталады.
Құқық Не береді
contacts:read лидтер тізімі, іздеу және карточкасы, қасиеттер
contacts:write қасиеттер мен тегтерді өзгерту, біріктіру, субъект сұранысы бойынша жою
events:read лид оқиғаларының лентасы
events:write оқиғаларды жіберу (сатып алу, тіркелу, кез келген өз оқиғаңыз)
conversations:read диалогтар мен хабарламалар
conversations:write оператор жауабы, жазба, мәртебе, жауапты, белгілер
messages:send лидке оның соңғы диалогында хабарлама жіберу
segments:read сақталған сегменттер және олардың қатысушылары

Жинақтар: CRM / бэкенд (лидтер, қасиеттер, оқиғалар, диалогтар мен сегменттерді оқу), Жеке бот (лидтерді оқиды, диалогтарда жауап береді, лидтерге жазады), Тек оқу, Барлығы.

  • Құқықтар кілттің құқықтары мен филиалдарын лезде өзгертеді — интеграция жұмысын жалғастырады.
  • Қайта шығару жаңа құпия береді; ескісі бірден жұмысын тоқтатады, құқықтар мен журнал қалады.
  • Қайтарып алу — бірден және біржола, келесі сұраныс 401 алады.

Кілт Authorization: Bearer cnk_… тақырыбымен (немесе X-Api-Key: cnk_…) беріледі. Оны тек серверде сақтаңыз — браузерде де, мобильді қолданбада да емес.

2-қадам. Алғашқы сұраныстар#

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"

Жауап — әрқашан конверт:

{
  "meta": { "status": 200, "requestId": "…", "nextCursor": "WyIyMDI2LTEwLTA0…" },
  "data": { "total": 128, "contacts": [ { "id": "…", "status": "lead", "name": "Анна", "updatedAt": "2026-10-04T09:12:00Z" } ] }
}

Келесі бет — cursor=<meta.nextCursor> қосылған дәл сол сұраныс; nextCursor жоқ болса — беттер бітті. Қате — {"meta": {...}, "error": {"code": "…"}}.

Филиал. Кілтке бір филиал рұқсат болса, оны көрсетудің қажеті жоқ. Бірнешеу болса — location=<филиал id> қосыңыз (тізім — GET /v1/locations), әйтпесе жауап 400 location_required.

Қасиеттер мен оқиғалар сіздің user_id бойынша. Біздің лид id-ін сақтау міндетті емес: ?by=user_id қосыңыз, сонда мекенжай сіздің пайдаланушы идентификаторыңыз болады. Мұндай user_id-і бар лид әлі жоқ болса — біз оны жасаймыз.

# свойства: операции 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"

Жазу панельдегі түзетулермен бірдей кезек арқылы жүреді: өзгерістер бірнеше секунд ішінде қолданылады, ал user_id бойынша жазуға жауап — pending бар 202. Лид карточкасында түзету авторы «API: <кілт атауы>» ретінде көрінеді.

Әдістер#

Әдіс Не істейді Құқық
GET /v1/me, GET /v1/locations кілт, құқықтар, филиалдар —
GET /v1/contacts лидтер: status (anon, lead, user), q, limit, cursor contacts:read
GET /v1/contacts/{id} карточка: қасиеттер, тегтер, оқиғалар жиынтығы contacts:read
POST /v1/contacts/{id}/props қасиеттерді операциялармен (250-ге дейін) немесе {"props":{…}} contacts:write
POST / DELETE /v1/contacts/{id}/tags лидтің тегтері contacts:write
POST /v1/contacts/merge екі карточканы біріктіру: алдын ала қарау, содан кейін "apply": true contacts:write
POST /v1/contacts/{id}/erase субъектінің сұрауы бойынша жою ("confirm": true) contacts:write
GET /v1/contacts/{id}/events лидтің оқиғалар лентасы events:read
POST /v1/contacts/{id}/events, POST /v1/events оқиғалар (бір ретте 100-ге дейін) events:write
GET /v1/contacts/{id}/conversations лидтің диалогтары conversations:read
POST /v1/contacts/{id}/messages лидке оның соңғы диалогына жазу messages:send
GET /v1/conversations, /{id}, /{id}/messages диалогтар мен хабарламалар conversations:read
POST /v1/conversations/{id}/reply оператордың жауабы немесе жазба ("type": "note") conversations:write
POST /v1/conversations/{id}/status, /assign, /tags мәртебе, жауапты, белгілер conversations:write
GET /v1/segments, GET /v1/segments/{id}/contacts сегменттер және олардың қатысушылары segments:read

Әр әдістің өрістері, мысалдары және қате кодтары — анықтамалықта.

3-қадам. Вебхуктер#

Вебхуктер филиалда бапталады: Чат → Баптаулар → Вебхуктер — https мекенжайы, оқиғалар және қолтаңба құпиясы. Диалог оқиғаларына (жаңа диалог, жаңа хабарлама, мәртебе, баға, белгілер) лид оқиғалары қосылды:

Оқиға Қашан келеді
lead.created жаңа лид пайда болды (контакт чатта, формада қалдырылды немесе API арқылы құрылды)
lead.props_changed лидтің қасиеттері өзгерді — кілттер тізімі changedProps ішінде
lead.event_tracked лидте оқиға бар; әдепкі бойынша жүйелік ($…) оқиғаларсыз барлық сіздің оқиғаларыңыз, атаулар тізімі «Қандай оқиғаларды жіберу керек» өрісімен беріледі
message.goal_reached лид хабарлама мақсатына жетті (поп-ап, таратылым)
{
  "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 } }
}

Лидтің аты, поштасы және телефоны денеге вебхукте «Қонақтың контактілерін беру» белгісі қосылған жағдайда ғана кіреді. Қолтаңбаны тексеру — денені вебхук құпиясымен HMAC-SHA256:

# заголовок X-Meni-Signature: sha256=<hex>
echo -n "$BODY" | openssl dgst -sha256 -hmac "$SECRET"

2xx деп 5 секунд ішінде жауап беріңіз — әйтпесе жеткізу қайталанады; ұзақ сәтсіздіктер сериясынан кейін вебхук өшіріледі және бұл баптауларда көрінеді. Қайталануларды deliveryId бойынша ажыратыңыз.

Шектеулер#

  • Кілтке минутына 60 сұрау; одан асса — Retry-After тақырыпшасымен 429. Қалдығы — X-RateLimit-* ішінде.
  • Бетке 200-ге дейін жазба (әдепкі бойынша 50), топтамада 100-ге дейін оқиға, сұрауға 250-ге дейін қасиеттермен операция, бір ретте 30-ға дейін тег.
  • Тіркелгіге 20-ға дейін жұмыс істеп тұрған кілт.
  • Кілттің шақырулар журналы 30 күн сақталады: уақыт, әдіс, жол үлгісі (id мен денесіз), жауап коды, ұзақтығы.
  • API арқылы жіберілген оқиғалар лидтің карточкасына (лента, жиынтық, сегменттер) түседі, бірақ келулер аналитикасының шикі журналына түспейді.
  • Лидке тек бар диалогқа жазуға болады: диалог жоқ болса — 409 no_conversation жауабы.

Ақаулықтарды жою#

Жауап Не білдіреді Не істеу керек
401 api_key_missing / api_key_invalid сұрауда кілт жоқ, не ол қате, қайтарып алынған немесе мерзімі біткен тақырыпшаны тексеріңіз; қажет болса кілтті қайта шығарыңыз
403 scope_required кілтте қажетті құқық жоқ кілттің Құқықтары — құқық қосыңыз
400 location_required кілтке бірнеше филиал қолжетімді location=<id> қосыңыз
404 location_not_found кілттің филиалдары арасында мұндай филиал жоқ GET /v1/locations бойынша салыстырыңыз
404 not_found лид немесе диалог жоқ өз id-леріңіз үшін ?by=user_id пайдаланыңыз
429 rate_limited минутына 60 сұраудан көп Retry-After секунд күтіңіз, оқиғаларды топтамаларға топтаңыз
502 upstream_error уақытша ақаулық сұрауды кейінірек қайталаңыз

Әр сұрау Шақырулар журналы қойындысында көрінеді — жауап кодымен және кілт атауымен.

Жиі қойылатын сұрақтар#

API-ді браузерден шақыруға бола ма? Жоқ: кілт филиалдың барлық лидтеріне қолжетімділік береді. API-ді өз серверіңізден шақырыңыз.

user_id лидтің id-інен несімен ерекшеленеді? Лидтің id-і — карточканың біздің идентификаторымыз. user_id — сіздің пайдаланушы идентификаторыңыз (CRM-дегі нөмір, сайттағы тіркелгі id-і); ?by=user_id арқылы карточканы сол арқылы адрестеуге болады.

Оқиғаны қайта жібергенде не болады? Бірдей id-і бар оқиға бір рет есептеледі — желілік қате кезінде сұрауды батыл қайталауға болады.

Әр филиалға жеке кілт керек пе? Жоқ: бір кілт бірнеше филиалмен жұмыс істей алады, филиал location параметрімен таңдалады.

Қатысты бөлімдер#

Was this article helpful?