Центр допомоги
Chat API

Webhooks

Останнє оновлення:

Огляд вебхуків

Вебхуки дозволяють ChatLab сповіщати ваші системи в той самий момент, коли щось відбувається у ваших чатботах. Замість опитування Management API або ручного експорту даних, ви реєструєте кінцеву точку HTTPS, і ChatLab надсилає на неї підписаний запит HTTP POST у режимі реального часу - коли відвідувач залишає лід, надсилає контактну форму, оцінює розмову, викликає людину або коли виконується дія ШІ.

Типові сценарії використання:

  • передавати нові ліди безпосередньо у вашу CRM щойно вони зафіксовані
  • сповіщати команду в Slack, коли відвідувач запитує live chat (чат наживо)
  • передавати оцінки та підсумки розмов у власну аналітику
  • відстежувати виконання AI action (дій ШІ) та отримувати сповіщення про помилки

Доступність: вебхуки доступні починаючи з тарифного плану Standard (функція: Webhooks).

Де налаштувати: у панелі адміністратора відкрийте Account settings -> Webhooks (Налаштування акаунта -> Вебхуки, поруч із розділом Management API). Вебхуки діють на рівні акаунта - одна кінцева точка може отримувати події від усіх ваших ботів або від вибраного списку.

Налаштування кінцевої точки

  1. Відкрийте Account settings -> Webhooks і натисніть Create endpoint (Створити кінцеву точку).
  2. Заповніть форму кінцевої точки:
    • Name (Назва) - мітка для вашої зручності, наприклад "Синхронізація з CRM" або "Сповіщення Slack".
    • URL - адреса HTTPS, на яку ChatLab надсилатиме події методом POST.
    • Events (Події) - виберіть типи подій, які має отримувати ця кінцева точка (дивіться каталог нижче). Вибирайте лише необхідне; високонавантажені події на зразок ai_action.executed можуть створювати великий обсяг трафіку.
    • Bot filter (Фільтр ботів) (необов'язково) - обмежити кінцеву точку конкретними ботами. Залиште порожнім, щоб отримувати події від усіх ботів вашого акаунта.
    • Custom form filter (Фільтр спеціальних форм) (необов'язково) - спрямовує надсилання конкретної власної форми на цю кінцеву точку. Це звужує лише подію custom_form.submitted; усі інші вибрані вами події (ліди, запити контактів, розмови, чат наживо, дії ШІ) надсилатимуться незалежно від цього налаштування.
  3. Збережіть. Secret (секретний ключ) кінцевої точки показується лише один раз у вікні підтвердження - скопіюйте його зараз і збережіть у безпечному місці. Він знадобиться для перевірки підписів (дивіться розділ "Безпека" нижче). Отримати його у відкритому вигляді пізніше неможливо.

Кожна кінцева точка також має:

  • Enable/disable toggle (Перемикач увімкнення/вимкнення) - призупиняє доставку без видалення кінцевої точки. Вимкнені кінцеві точки просто ігнорують події (вони не ставляться в чергу на потім).
  • Send sample event (Надіслати тестову подію) - надсилає підписаний тестовий запит на вашу URL-адресу, щоб ви могли повністю перевірити роботу свого обробника. Ви можете вибрати тип події та змінити зразки значень перед відправленням, щоб обробник побачив реалістичні дані. Тест приходить як звичайна доставка з параметром eventType, що відповідає вашому вибору (або як webhook.test для простої перевірки з'єднання).
  • Roll secret (Оновити секретний ключ) - генерує новий секретний ключ і анулює старий. Використовуйте цю дію, якщо є підозра на витік ключа. Новий ключ знову буде показано лише один раз. Оновіть налаштування на стороні свого обробника перед зміною ключа, інакше доставки не проходитимуть перевірку підпису на вашому боці.
  • Delivery log (Журнал доставок) - список останніх доставок для кожної кінцевої точки з часовою міткою, типом події, кодом відповіді HTTP від вашого сервера та часом відповіді. Тут відображаються невдалі спроби доставки та паузи автоматичного захисту (circuit breaker). Журнал зберігається протягом 14 днів.

Структура події (Event envelope)

Кожна доставка є запитом HTTP POST із заголовком Content-Type: application/json. Тіло запиту завжди має однакову базову структуру; об'єкт data залежить від конкретного типу події:

{
  "eventId": "9f1c1c8e-6a2b-4b9e-9d2f-3f8a1e2b4c5d",
  "eventType": "lead.created",
  "timestamp": "2026-08-13T14:22:31Z",
  "botId": 1234,
  "botName": "Support Bot",
  "conversationId": "conv_a1b2c3",
  "sessionId": "sess_x9y8z7",
  "data": { }
}
  • eventId - унікальний ідентифікатор події. Використовуйте його для дедуплікації, якщо ваша обробка має бути ідемпотентною.
  • eventType - один із задокументованих нижче типів; також передається в заголовку X-ChatLab-Event.
  • timestamp - час виникнення події у форматі ISO 8601 UTC.
  • botId / botName - бот, якому належить подія.
  • conversationId / sessionId - контекст розмови, якщо застосовно.

Каталог подій

lead.created

Спрацьовує, коли відвідувач надсилає свої контактні дані - через форму збору лідів, попередню форму live chat або спеціальну форму, призначену для збору лідів.

{
  "eventId": "9f1c1c8e-6a2b-4b9e-9d2f-3f8a1e2b4c5d",
  "eventType": "lead.created",
  "timestamp": "2026-08-13T14:22:31Z",
  "botId": 1234,
  "botName": "Support Bot",
  "conversationId": "conv_a1b2c3",
  "sessionId": "sess_x9y8z7",
  "data": {
    "email": "jane.doe@example.com",
    "name": "Jane Doe",
    "phone": "+1 555 0123",
    "source": "LEAD_COLLECTION_FORM",
    "formCodeName": "lead_form",
    "formName": "Lead form",
    "fields": [
      {"name": "email", "value": "jane.doe@example.com", "type": "email"},
      {"name": "company", "value": "Acme Inc.", "type": "text"},
      {"name": "topics", "value": ["Billing", "Delivery"], "type": "multichoice"},
      {"name": "attachment", "value": "https://api.chatlab.com/aichat/customform/download?key=...&token=...", "type": "file"}
    ],
    "pageUrl": "https://acme.com/pricing"
  }
}
  • source - спосіб отримання контактних даних: LEAD_COLLECTION_FORM (форма збору лідів), LIVE_CHAT_FORM (попередня форма live chat), CONVERSATION (ШІ розпізнала дані під час діалогу), ADMIN_DATA_UPDATE або UPDATE_CLIENT_CONTEXT (відредаговано на боці ChatLab). Надсилання через форму звернення до оператора ніколи не викликає цю подію - замість неї спрацьовує contact_form.submitted.
  • email, name, phone - контактні дані, зіставлені із записом ліда.
  • Якщо для збору лідів використовується власна форма, кожне визначене в ній поле додається до масиву fields у порядку форми, а параметри formCodeName / formName ідентифікують цю форму. У разі використання стандартної форми збору лідів обидва параметри мають значення null, а fields є порожнім масивом.
  • Кожен запис у fields має формат {name, value, type}. name - це технічна назва поля, яка не змінюється при редагуванні підписів; використовуйте її для зіставлення з полями у вашій CRM.
  • Для полів multichoice значення value є масивом вибраних варіантів. Поля прапорців передаються як окремі записи зі значеннями "true" / "false".
  • Для полів типу file значення value є посиланням для завантаження переданого файлу; вебхук ніколи не містить безпосередній вміст файлу.
  • pageUrl - сторінка, на якій перебував відвідувач під час надсилання форми.

contact_form.submitted

Спрацьовує, коли відвідувач надсилає контактну форму зв'язку з оператором або спеціальну форму, призначену для зв'язку з людиною.

{
  "eventId": "3a7b9c2d-1e4f-4a6b-8c0d-5e2f7a9b1c3d",
  "eventType": "contact_form.submitted",
  "timestamp": "2026-08-13T14:25:02Z",
  "botId": 1234,
  "botName": "Support Bot",
  "conversationId": "conv_a1b2c3",
  "sessionId": "sess_x9y8z7",
  "data": {
    "email": "jane.doe@example.com",
    "message": "I need help with my last invoice.",
    "source": "CUSTOM_FORM",
    "formCodeName": "contact_form",
    "formName": "Contact form",
    "fields": [
      {"name": "email", "value": "jane.doe@example.com", "type": "email"},
      {"name": "order_number", "value": "A-10293", "type": "text"},
      {"name": "message", "value": "I need help with my last invoice.", "type": "textarea"}
    ]
  }
}
  • email - адреса, яку залишив відвідувач, і на яку ваша служба підтримки має надіслати відповідь.
  • source - CUSTOM_FORM, якщо як контактна форма використовується власна форма, або CONTACT_FORM для вбудованої форми.
  • formCodeName / formName - ідентифікатори спеціальної форми, через яку надійшов запит; обидва параметри мають значення null для стандартної форми.
  • Якщо використовується власна форма, кожне визначене в ній поле додається до масиву fields (у тому ж форматі {name, value, type}, що й у lead.created). У разі вбудованої контактної форми заповнюються лише email та message, fields залишається порожнім масивом, а ідентифікатори форми містять null.
  • message - зіставлене поле повідомлення або всі заповнені значення, об'єднані разом, якщо форма не містить окремого поля повідомлення.

custom_form.submitted

Спрацьовує під час кожного надсилання власної форми незалежно від її призначення. Зверніть увагу: форми, призначені для збору лідів або зв'язку з людиною, також надсилають відповідні спеціалізовані події lead.created / contact_form.submitted - підписуйтеся на той чи інший варіант залежно від того, чи потрібен вам загальний, чи спеціалізований перегляд даних, і налаштуйте дедуплікацію за параметрами conversationId + timestamp, якщо ви підписані на обидва типи.

{
  "eventId": "6c1d8e3f-2a5b-4c7d-9e0f-1a4b6c8d0e2f",
  "eventType": "custom_form.submitted",
  "timestamp": "2026-08-13T14:27:45Z",
  "botId": 1234,
  "botName": "Support Bot",
  "conversationId": "conv_a1b2c3",
  "sessionId": "sess_x9y8z7",
  "data": {
    "formCodeName": "warranty_claim",
    "formName": "Warranty claim",
    "fields": [
      {"name": "order_number", "value": "A-10293", "type": "text"},
      {"name": "issue", "value": "Damaged on arrival", "type": "textarea"},
      {"name": "photo", "value": "https://api.chatlab.com/aichat/customform/download?key=...&token=...", "type": "file"}
    ],
    "purpose": "STANDALONE"
  }
}
  • formCodeName - постійне системне ім'я форми, яке не змінюється при її перейменуванні; використовуйте його для маршрутизації звернень у вашій системі. formName - це назва форми, що відображається відвідувачам.
  • fields містить такі самі елементи {name, value, type}, як і в lead.created: значення множинного вибору передаються масивами, значення файлів - посиланнями для завантаження.
  • purpose - STANDALONE, LEAD_COLLECTION або HUMAN_CONTACT, залежно від того, як форма підключена до чатбота.

conversation.started

Спрацьовує, коли відвідувач надсилає перше повідомлення нової розмови.

{
  "eventId": "8e2f0a4b-3c6d-4e8f-a1b2-2c5d7e9f1a3b",
  "eventType": "conversation.started",
  "timestamp": "2026-08-13T14:20:11Z",
  "botId": 1234,
  "botName": "Support Bot",
  "conversationId": "conv_a1b2c3",
  "sessionId": "sess_x9y8z7",
  "data": {
    "firstMessage": "Do you ship to Canada?",
    "chatSource": "WIDGET",
    "byAdmin": false,
    "countryCode": "PL",
    "ipAddress": "83.12.44.7"
  }
}
  • firstMessage - точний текст першого повідомлення відвідувача. Має значення null, якщо розмову було розпочато без тексту повідомлення.
  • chatSource - канал, через який надійшла розмова: WIDGET, WHATSAPP, MESSENGER, VOICE, VOICE_PHONE, API, BOOKING, AIRBNB або IDOBOOKING.
  • byAdmin - має значення true, якщо розмова ведеться у вікні попереднього перегляду чатбота в панелі керування ChatLab, а не реальним відвідувачем. Використовуйте цей параметр, щоб ваші тестові чати не потрапляли до CRM.
  • countryCode - код країни за стандартом ISO, визначений за IP-адресою відвідувача, або null, якщо його не вдалося встановити.
  • ipAddress - IP-адреса відвідувача, зафіксована ChatLab, або null, якщо вона недоступна. Згідно з вимогами GDPR ці дані належать до персональних, тому зберігайте їх лише за наявності законних підстав.

conversation.rated

Спрацьовує, коли відвідувач оцінює відповідь бота пальцем вгору або вниз (дивіться Оцінювання розмов).

{
  "eventId": "1b4c6d8e-5f0a-4b2c-8d3e-4f7a9b1c3d5e",
  "eventType": "conversation.rated",
  "timestamp": "2026-08-13T14:31:09Z",
  "botId": 1234,
  "botName": "Support Bot",
  "conversationId": "conv_a1b2c3",
  "sessionId": "sess_x9y8z7",
  "data": {
    "rating": "POSITIVE"
  }
}
  • rating - POSITIVE або NEGATIVE. Скасування виставленої оцінки не викликає подію, тому нейтральне значення ніколи не надсилається.

conversation.summarized

Спрацьовує, коли ChatLab створює підсумок завершеної розмови.

{
  "eventId": "4d7e9f1a-6b2c-4d4e-9f0a-5b8c0d2e4f6a",
  "eventType": "conversation.summarized",
  "timestamp": "2026-08-13T14:45:00Z",
  "botId": 1234,
  "botName": "Support Bot",
  "conversationId": "conv_a1b2c3",
  "sessionId": "sess_x9y8z7",
  "data": {
    "summary": "Visitor asked about shipping to Canada and delivery times. The bot confirmed availability and quoted 5-7 business days. Visitor left satisfied.",
    "language": "en"
  }
}
  • summary - згенерований текст підсумку. Підсумки формуються через кілька хвилин після того, як розмова стає неактивною, тому ця подія надходить пізніше за решту подій діалогу.
  • language - код ISO мови, якою було складено підсумок (відповідає мові розмови).

client.summarized

Спрацьовує, коли ChatLab оновлює ШІ-профіль клієнта. Профіль формується на основі попереднього профілю та підсумку щойно завершеної розмови, тому ця подія надходить слідом за conversation.summarized для того самого діалогу. Клієнти ідентифікуються за адресою електронної пошти, тому вона продубльована на верхньому рівні об'єкта data.

{
  "eventId": "b5d8f1a3-7c2e-4d9b-a6f0-1e3c5a7b9d2f",
  "eventType": "client.summarized",
  "timestamp": "2026-08-18T09:12:04Z",
  "botId": 1234,
  "botName": "Support Bot",
  "conversationId": "conv_a1b2c3",
  "sessionId": "sess_x9y8z7",
  "data": {
    "clientEmail": "jane.doe@example.com",
    "client": {
      "email": "jane.doe@example.com",
      "name": "Jane Doe",
      "phone": "+1 555 0123",
      "countryCode": "PL",
      "ipAddress": "83.12.44.7"
    },
    "clientSummary": "Returning customer interested in international shipping. Asked about delivery times to Canada twice and about return costs once."
  }
}
  • clientEmail - ідентифікатор для зіставлення клієнта з вашою CRM. Має значення null для анонімних відвідувачів, які не залишили адресу електронної пошти (для них подія теж надсилається - ігноруйте такі надходження, якщо ваша інтеграція прив'язана до e-mail).
  • client - контактні дані, збережені в ChatLab для цієї людини: email, name, phone, countryCode та ipAddress. Усі ключі присутні завжди; невідомі значення мають вигляд null.
  • clientSummary - повний текст профілю у вигляді звичайного тексту, а не різниці змін (diff). Він повністю замінює попередній підсумок, тому його слід зберігати шляхом перезапису, а не додавання в кінець.
  • Профіль оновлюється лише для ботів з увімкненою функцією пам'яті чату і лише для розмов, які залишалися неактивними достатньо довго для формування підсумку. Очікуйте надходження цієї події через кілька хвилин після завершення розмови, а не миттєво.

live_chat.requested

Спрацьовує, коли ШІ передає розмову в live chat - тому що відвідувач попросив покликати людину або тому що бот вирішив, що потрібна допомога оператора.

{
  "eventId": "7a0b2c4d-8e3f-4a5b-b0c1-6d9e1f3a5b7c",
  "eventType": "live_chat.requested",
  "timestamp": "2026-08-13T14:33:20Z",
  "botId": 1234,
  "botName": "Support Bot",
  "conversationId": "conv_a1b2c3",
  "sessionId": "sess_x9y8z7",
  "data": {
    "requestedBy": "AI"
  }
}
  • requestedBy - наразі завжди має значення AI, оскільки передача оператору завжди ініціюється відповідною дією бота, навіть коли відвідувач вимагає цього словами. Вважайте це відкритим переліком: коректно обробляйте невідомі значення замість жорсткої перевірки тільки на AI.
  • Ця подія свідчить лише про те, що було створено запит на передачу діалогу, а не про те, що оператор долучився до розмови. Початок реальної сесії позначається подією live_chat.started.

live_chat.started

Спрацьовує, коли оператор приєднується до діалогу і фактично починається сесія чату наживо.

{
  "eventId": "0c3d5e7f-9a4b-4c6d-a1b2-7e0f2a4b6c8d",
  "eventType": "live_chat.started",
  "timestamp": "2026-08-13T14:33:55Z",
  "botId": 1234,
  "botName": "Support Bot",
  "conversationId": "conv_a1b2c3",
  "sessionId": "sess_x9y8z7",
  "data": {}
}
  • Об'єкт data навмисно порожній. Уся необхідна інформація міститься в базовій структурі: botId ідентифікує чатбота, а conversationId / sessionId пов'язують подію з розмовою, для якої ви вже отримали сповіщення live_chat.requested.

live_chat.ended

Спрацьовує, коли сесія чату наживо завершується.

{
  "eventId": "2e5f7a9b-0c5d-4e7f-b2c3-8f1a3b5c7d9e",
  "eventType": "live_chat.ended",
  "timestamp": "2026-08-13T14:52:41Z",
  "botId": 1234,
  "botName": "Support Bot",
  "conversationId": "conv_a1b2c3",
  "sessionId": "sess_x9y8z7",
  "data": {
    "durationSeconds": 1126
  }
}
  • durationSeconds - тривалість перебування оператора в діалозі у секундах з моменту початку сесії. Поле опускається в рідкісних випадках, коли сесія завершується, так і не розпочавшись.

ai_action.executed

Спрацьовує щоразу, коли бот виконує AI action (дію ШІ) - виклик вбудованої інтеграції або власну функцію API. Це високонавантажена подія: активний бот в інтернет-магазині може виконувати сотні дій на день, а один запит відвідувача може викликати кілька таких операцій поспіль. Підписуйтеся на неї на окремій кінцевій точці або переконайтеся, що ваш сервер здатний витримати таке навантаження.

{
  "eventId": "5f8a0b2c-1d6e-4f8a-c3d4-9a2b4c6d8e0f",
  "eventType": "ai_action.executed",
  "timestamp": "2026-08-13T14:21:03Z",
  "botId": 1234,
  "botName": "Support Bot",
  "conversationId": "conv_a1b2c3",
  "sessionId": "sess_x9y8z7",
  "data": {
    "actionName": "search_products",
    "status": "SUCCESS",
    "durationMs": 842,
    "errorMessage": null
  }
}
  • actionName - системна назва виконаної дії, яку бачить ШІ: наприклад, search_products для готової інтеграції або ім'я, яке ви задали для власної дії API.
  • status - SUCCESS або ERROR.
  • durationMs - тривалість виконання дії в мілісекундах. Зручно для виявлення затримок у роботі інтеграцій до того, як на них почнуть скаржитися користувачі.
  • errorMessage - причина помилки; заповнюється лише тоді, коли status має значення ERROR (в інших випадках містить null).

webhook.test

Надсилається після натискання кнопки Send sample event (Надіслати тестову подію) під час базової перевірки зв'язку. Підписується точно так само, як і справжня подія.

{
  "eventId": "9b2c4d6e-3f8a-4b0c-d5e6-0b3c5d7e9f1a",
  "eventType": "webhook.test",
  "timestamp": "2026-08-13T14:10:00Z",
  "botId": 1234,
  "botName": "Support Bot",
  "conversationId": "conv_a1b2c3",
  "sessionId": "sess_x9y8z7",
  "data": {
    "message": "Test delivery from ChatLab"
  }
}
  • message - фіксований текст, завжди однаковий. Поля основної структури містять тестові значення, тому ніколи не обробляйте подію webhook.test як реальні дані.
  • Це єдиний тип події, на який не можна підписатися в налаштуваннях кінцевої точки: він надсилається вручну з панелі адміністратора і завжди надходить саме на ту кінцеву точку, для якої ви викликали перевірку, незалежно від налаштованих фільтрів.

Безпека: перевірка доставок

Кожна доставка містить чотири заголовки:

Header Value
X-ChatLab-Signature sha256=<hex hmac> - підпис корисного навантаження (payload) за алгоритмом HMAC-SHA256
X-ChatLab-Timestamp Час Unix у секундах, коли було підписано доставку
X-ChatLab-Event Тип події, наприклад lead.created
X-ChatLab-Delivery Унікальний ідентифікатор доставки, що відповідає значенню eventId у тілі запиту

Підпис обчислюється як HMAC-SHA256 для рядка {timestamp}.{rawBody} з використанням секретного ключа вашої кінцевої точки (endpoint secret), де {timestamp} - це значення X-ChatLab-Timestamp, а {rawBody} - сире, нерозібране тіло запиту. Завжди виконуйте перевірку на основі сирих байтів - повторна серіалізація розібраного JSON змінить послідовність байтів і порушить підпис.

Щоб захиститися від атак повторного відтворення (replay attacks), відхиляйте доставки, значення X-ChatLab-Timestamp яких старіше за 5 хвилин.

Node.js

const crypto = require('crypto');

function verifyChatLabSignature(req, secret) {
    const signature = req.headers['x-chatlab-signature'];
    const timestamp = req.headers['x-chatlab-timestamp'];
    if (!signature || !timestamp) return false;

    // Reject stale deliveries (older than 5 minutes)
    const ageSeconds = Math.abs(Date.now() / 1000 - Number(timestamp));
    if (ageSeconds > 300) return false;

    // rawBody must be the raw request body bytes, not re-serialized JSON.
    // With Express: app.use(express.json({ verify: (req, res, buf) => { req.rawBody = buf; } }))
    const expected = 'sha256=' + crypto
        .createHmac('sha256', secret)
        .update(timestamp + '.' + req.rawBody)
        .digest('hex');

    const a = Buffer.from(signature);
    const b = Buffer.from(expected);
    return a.length === b.length && crypto.timingSafeEqual(a, b);
}

PHP

<?php
function verifyChatLabSignature(string $secret): bool
{
    $signature = $_SERVER['HTTP_X_CHATLAB_SIGNATURE'] ?? '';
    $timestamp = $_SERVER['HTTP_X_CHATLAB_TIMESTAMP'] ?? '';
    if ($signature === '' || $timestamp === '') {
        return false;
    }

    // Reject stale deliveries (older than 5 minutes)
    if (abs(time() - (int) $timestamp) > 300) {
        return false;
    }

    $rawBody = file_get_contents('php://input');
    $expected = 'sha256=' . hash_hmac('sha256', $timestamp . '.' . $rawBody, $secret);

    return hash_equals($expected, $signature);
}

Якщо перевірка не вдалася, поверніть відповідь 401 і відкиньте корисне навантаження. Ніколи не обробляйте неперевірені доставки - будь-хто, хто дізнається вашу URL-адресу, може надіслати на неї довільний JSON методом POST.

Поведінка доставки

Ознайомтеся з цими гарантіями, перш ніж створювати рішення на базі webhook:

  • Відповідайте швидко. Ваша кінцева точка повинна відповісти протягом 3 секунд, інакше доставка вважатиметься невдалою. Негайно повертайте статус 2xx і обробляйте корисне навантаження асинхронно (поставте його в чергу, а потім надішліть підтвердження) - не виконуйте виклики CRM або запис у базу даних перед наданням відповіді.
  • Fire-and-forget, щонайбільше один раз (at-most-once). Для кожної події виконується рівно одна спроба доставки - повторних спроб немає. Якщо ваша кінцева точка недоступна, час очікування вичерпано або вона повертає статус, відмінний від 2xx, ця подія втрачається і більше не надсилатиметься. Webhook - це сповіщення, а не репліковане сховище даних: коли вам потрібна гарантована повнота даних, звіряйтеся з Management API або експортом лідів.
  • Circuit breaker (автоматичний розмикач). Після 5 поспіль невдалих доставок для бота надсилання для цього бота призупиняється на 5 хвилин. Події, що виникають під час паузи, скидаються, а журнал доставок відображає записи CIRCUIT_OPEN, щоб ви могли точно бачити, коли і чому передачу трафіку було зупинено. Доставки, пропущені через розімкнений ланцюг, не враховуються для автоматичного вимкнення.
  • Автоматичне вимкнення. Перевірка виконується безпосередньо в момент збою доставки, а не за таймером. Якщо доставка завершується помилкою і протягом 7 днів не було жодної успішної доставки - відлік ведеться від останньої успішної спроби або від дати створення кінцевої точки, якщо успішних доставок не було взагалі, - кінцева точка вимикається, і ви отримуєте сповіщення електронною поштою. Один успішний статус 2xx у будь-який момент скидає цей лічильник. Кінцева точка, яка не отримує трафіку, ніколи не вимикається, оскільки жодних збоїв не виникає. Увімкніть її знову в Account settings (Налаштування акаунта), щойно роботу приймача буде виправлено; лічильник збоїв і позначка автоматичного вимкнення скидаються під час повторного ввімкнення, а події, пропущені за час простою, повторно не надсилаються.
  • 410 Gone. Якщо ваша кінцева точка відповідає зі статусом HTTP 410 Gone, ChatLab негайно вимикає її. Використовуйте це, щоб програмно виводити кінцеву точку з експлуатації зі сторони приймача.
  • Ідемпотентність. Повторні доставки не очікуються за нормальної роботи, але якщо ваша обробка має бути суворо ідемпотентною, виконуйте дедуплікацію за значенням eventId (воно також доступне в заголовку X-ChatLab-Delivery).

Ліміти

  • До 10 кінцевих точок webhook на акаунт.
  • Термін зберігання журналу доставок: 14 днів. Старіші записи видаляються автоматично.

Пов'язані статті

  • Збір лідів - форма, що стоїть за подією lead.created
  • Контактна форма підтримки людини - форма, що стоїть за подією contact_form.submitted
  • Live Chat - процес, що стоїть за подіями live_chat.*
  • Оцінка розмови - оцінки палець угору/вниз, що стоять за подією conversation.rated
  • AI Actions - інтеграції, що стоять за подією ai_action.executed
  • Chat API - зворотні виклики (callbacks) віджета у браузері (клієнтський аналог webhook)
  • Management API - REST API для керування ботами та перегляду даних про використання