Вебхуки дозволяють отримувати сповіщення в реальному часі, коли відбуваються події у вашому віджеті чату. Коли відвідувач починає чат, надсилає форму або повідомлення, Chatim надсилає HTTP POST запит на вашу URL-адресу з даними події.
З вебхуками ви можете:
Після створення ви побачите Секрет вебхука — скопіюйте та збережіть його негайно. Цей секрет використовується для перевірки того, що вхідні запити надходять від Chatim. Він показується лише один раз.
| Подія | Спрацьовує коли |
|---|---|
chat.started | Відвідувач відкриває віджет чату і починає нову сесію |
chat.message.received | Відвідувач надсилає текстове повідомлення |
chat.form.submitted | Відвідувач надсилає форму в потоці чат-бота |
chat.closed | Сесія чату закривається |
chat.assigned | Агент підтримки приєднується до розмови |
chat.handoff | Чат-бот переходить з режиму бота до живого чату |
Кожна доставка вебхука — це HTTP POST запит з JSON тілом.
{
"event": "chat.started",
"eventId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"timestamp": "2025-01-15T10:30:00.000Z",
"projectUuid": "your-project-uuid",
"chatUuid": "visitor-chat-uuid",
"data": { }
}Включає інформацію про відвідувача, URL сторінки, місцезнаходження та агент користувача.
{
"event": "chat.started",
"data": {
"visitor": {
"uuid": "visitor-uuid",
"name": "John Doe",
"email": "[email protected]",
"phone": "+1234567890"
},
"page": {
"url": "https://example.com/pricing",
"title": "Pricing - Example"
},
"location": { "country": "US", "city": "Los Angeles" },
"userAgent": { "browser": "Chrome", "os": "Windows", "device": "Desktop" }
}
}{
"event": "chat.message.received",
"data": {
"messageUuid": "message-uuid",
"message": "Hi, I have a question about your pricing.",
"visitor": { "uuid": "visitor-uuid", "name": "John Doe" }
}
}{
"event": "chat.form.submitted",
"data": {
"formNodeId": "node-id",
"formName": "Contact Form",
"fields": {
"name": "John Doe",
"email": "[email protected]",
"phone": "+1234567890",
"message": "I'd like a product demo."
},
"visitor": { "uuid": "visitor-uuid", "name": "John Doe" }
}
}Включає хто закрив чат (agent, visitor, system або timeout), тривалість у секундах, кількість повідомлень та транскрипт.
{
"event": "chat.closed",
"data": {
"closedBy": "agent",
"status": "closed",
"duration": 345,
"messageCount": 12,
"visitor": { "uuid": "visitor-uuid", "name": "John Doe" }
}
}Надсилається, коли агент підтримки приєднується до розмови.
{
"event": "chat.assigned",
"data": {
"assignedTo": { "uuid": "agent-uuid", "name": "Jane Smith" },
"visitor": { "uuid": "visitor-uuid", "name": "John Doe" }
}
}Надсилається, коли чат-бот переходить у режим живого чату.
{
"event": "chat.handoff",
"data": {
"reason": "Visitor requested human support",
"fromNode": "node-id",
"visitor": { "uuid": "visitor-uuid", "name": "John Doe" }
}
}Кожен запит вебхука містить підпис, щоб ви могли перевірити, що він надійшов від Chatim. Підпис обчислюється як HMAC-SHA256(secret, timestamp + "." + payload) і надсилається в заголовку X-Chatim-Signature.
| Заголовок | Опис |
|---|---|
X-Chatim-Signature | HMAC-SHA256 підпис корисного навантаження |
X-Chatim-Timestamp | Мітка часу Unix, коли було надіслано запит |
X-Chatim-Event | Тип події |
X-Chatim-Delivery-Id | Унікальний ідентифікатор доставки |
const crypto = require('crypto');
function verifyWebhook(req, secret) {
const signature = req.headers['x-chatim-signature'];
const timestamp = req.headers['x-chatim-timestamp'];
const body = JSON.stringify(req.body);
// Reject requests older than 5 minutes
const age = Math.floor(Date.now() / 1000) - parseInt(timestamp);
if (age > 300) return false;
const expected = 'sha256=' + crypto
.createHmac('sha256', secret)
.update(timestamp + '.' + body)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expected)
);
}import hmac, hashlib, time
def verify_webhook(headers, body, secret):
signature = headers.get('X-Chatim-Signature', '')
timestamp = headers.get('X-Chatim-Timestamp', '')
if abs(time.time() - int(timestamp)) > 300:
return False
expected = 'sha256=' + hmac.new(
secret.encode(),
f'{timestamp}.{body}'.encode(),
hashlib.sha256
).hexdigest()
return hmac.compare_digest(signature, expected)Якщо ваш ендпоінт недоступний або повертає помилку, Chatim автоматично повторює спробу.
| Спроба | Затримка |
|---|---|
| 1-а повторна спроба | 1 хвилина |
| 2-а повторна спроба | 5 хвилин |
| 3-я повторна спроба | 30 хвилин |
| 4-а повторна спроба | 2 години |
| 5-а повторна спроба | 24 години |
Після 5 невдалих спроб доставка позначається як невдала. Відповіді 2xx вважаються успіхом, 4xx — постійними помилками (без повторних спроб), 5xx та тайм-аути (30с) запускають повторні спроби.
Якщо вебхук накопичує 10 послідовних невдач, він автоматично вимикається. Ви можете повторно увімкнути його з панелі керування після виправлення проблеми.
Натисніть Тест на будь-якому вебхуку, щоб надіслати зразкову подію chat.started на вашу URL-адресу. Це дозволяє перевірити ваш ендпоінт перед запуском.
Натисніть на вебхук, щоб переглянути нещодавні доставки з типом події, міткою часу, кодом стану HTTP та повідомленнями про помилки. Історія зберігається 30 днів.
Якщо секрет вебхука скомпрометований, натисніть Перегенерувати секрет, збережіть новий секрет та оновіть ваш ендпоінт. Старий секрет негайно стає недійсним.
Підпишіться на chat.form.submitted та chat.started, щоб автоматично створювати контакти та лідів у вашій CRM.
Підпишіться на chat.assigned та chat.handoff, щоб сповіщувати вашу команду, коли відвідувач потребує живої підтримки.
Підпишіться на всі події, щоб створити повну картину залучення в чаті, показників конверсії форм та часу відповіді підтримки.
Підпишіться на chat.form.submitted, щоб запускати привітальні листи, послідовності подальших дій або повідомлення підтвердження.
eventId для обробки дублікатів доставокtimestamp + "." + raw_body (не розпарсений JSON)Почати