Event Webhooks доставляют события tuk-tuk.online на ваш сервер HTTP POST запросом в момент, когда они происходят: новое сообщение, смена статуса диалога, запуск цепочки, платёж. Соединение server-to-server, без постоянного подключения с вашей стороны.
Каждый запрос подписан HMAC-SHA256, поэтому подделать событие без вашего секретного ключа нельзя. Всего 50 типов событий в 10 группах.
#Для ИИ-агента
- Чтобы получать события, создай вебхук в кабинете: Настройки проекта → Вебхуки → «Создать вебхук», укажи URL, выбери типы событий, скопируй секретный ключ.
- Каждое событие приходит как HTTP POST с JSON
{ "event", "timestamp", "data" }и заголовкамиX-Webhook-Event,X-Webhook-Timestamp,X-Webhook-Signature. - Чтобы проверить подлинность, посчитай HMAC-SHA256 от сырого тела запроса с секретным ключом (hex) и сравни с
X-Webhook-Signatureчерез безопасное сравнение. - Чтобы узнать о новом сообщении клиента, подпишись на
message.inbound: вdataпридутmessageId,dialogId,body,channelType,channelId,mediaType. - Отвечай
200в течение 10 секунд. Повторных попыток нет; после 50 ошибок подряд вебхук отключается.
#Как подключить
- Откройте Настройки проекта, раздел Вебхуки.
- Нажмите Создать вебхук.
- Укажите URL вашего сервера (рекомендуется HTTPS).
- Выберите типы событий, которые хотите получать.
- Скопируйте секретный ключ: он нужен для проверки подписи.
В настройках вебхука доступны: включение и выключение, смена URL и списка событий, перегенерация секретного ключа, логи доставки.
#Формат доставки
При наступлении события tuk-tuk.online отправляет HTTP POST на ваш URL.
#Заголовки
| Заголовок | Описание |
|---|---|
Content-Type | application/json |
X-Webhook-Signature | HMAC-SHA256 подпись тела запроса (hex) |
X-Webhook-Event | Тип события (например, message.inbound) |
X-Webhook-Timestamp | Время события в формате ISO 8601 |
#Тело запроса
Все события приходят в единой структуре:
{
"event": "message.inbound",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"messageId": "msg-uuid",
"dialogId": "dialog-uuid",
"body": "Привет!",
"channelType": "TELEGRAM_BOT",
"channelId": "ch-uuid",
"mediaType": null
}
}| Поле | Тип | Описание |
|---|---|---|
event | string | Тип события |
timestamp | string | Время события, ISO 8601 |
data | object | Данные события, состав зависит от типа |
#Проверить подпись
Заголовок X-Webhook-Signature содержит HMAC-SHA256 подпись сырого тела запроса в hex-формате, ключ подписи: секретный ключ вебхука. Проверяйте подпись до разбора JSON, иначе любой сможет прислать вам поддельное событие.
const crypto = require('crypto');
const express = require('express');
const app = express();
const WEBHOOK_SECRET = 'your_secret_key';
app.post('/webhook', express.raw({ type: 'application/json' }), (req, res) => {
const signature = req.headers['x-webhook-signature'];
const expected = crypto
.createHmac('sha256', WEBHOOK_SECRET)
.update(req.body)
.digest('hex');
if (!crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected))) {
return res.status(401).send('Invalid signature');
}
const { event, data } = JSON.parse(req.body);
console.log('Event:', event, data);
res.status(200).send('OK');
});<?php
$secret = 'your_secret_key';
$body = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_WEBHOOK_SIGNATURE'] ?? '';
$expected = hash_hmac('sha256', $body, $secret);
if (!hash_equals($expected, $signature)) {
http_response_code(401);
exit('Invalid signature');
}
$payload = json_decode($body, true);
$event = $payload['event'];
$data = $payload['data'];
// Обработка события
http_response_code(200);
echo 'OK';#Пример обработчика
Тестовый запрос для проверки вашего обработчика и полный пример с разбором нескольких типов событий.
# Тестовый запрос для проверки вашего обработчика
curl -X POST https://your-server.com/webhook \
-H "Content-Type: application/json" \
-H "X-Webhook-Signature: your_hmac_hex" \
-H "X-Webhook-Event: message.inbound" \
-H "X-Webhook-Timestamp: 2025-06-15T10:30:00.000Z" \
-d '{
"event": "message.inbound",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"messageId": "msg-uuid",
"dialogId": "dialog-uuid",
"body": "Привет!",
"channelType": "TELEGRAM_BOT",
"channelId": "ch-uuid",
"mediaType": null
}
}'const crypto = require('crypto');
const express = require('express');
const app = express();
const SECRET = 'your_secret_key';
app.post('/webhook', express.raw({ type: 'application/json' }), (req, res) => {
const sig = req.headers['x-webhook-signature'];
const expected = crypto.createHmac('sha256', SECRET).update(req.body).digest('hex');
if (!crypto.timingSafeEqual(Buffer.from(sig), Buffer.from(expected))) {
return res.status(401).send('Invalid signature');
}
const { event, timestamp, data } = JSON.parse(req.body);
switch (event) {
case 'message.inbound':
console.log('Новое сообщение:', data.body, 'от', data.dialogId);
break;
case 'dialog.created':
console.log('Новый диалог:', data.dialogId, data.clientName);
break;
case 'payment.succeeded':
console.log('Оплата:', data.paymentId, data.amount);
break;
default:
console.log('Событие:', event, data);
}
res.status(200).send('OK');
});
app.listen(3000);<?php
$secret = 'your_secret_key';
$body = file_get_contents('php://input');
$sig = $_SERVER['HTTP_X_WEBHOOK_SIGNATURE'] ?? '';
$expected = hash_hmac('sha256', $body, $secret);
if (!hash_equals($expected, $sig)) {
http_response_code(401);
exit('Invalid signature');
}
$payload = json_decode($body, true);
$event = $payload['event'];
$data = $payload['data'];
switch ($event) {
case 'message.inbound':
error_log("Новое сообщение: {$data['body']}");
break;
case 'dialog.created':
error_log("Новый диалог: {$data['dialogId']}");
break;
case 'payment.succeeded':
error_log("Оплата: {$data['paymentId']} на {$data['amount']}");
break;
default:
error_log("Событие: $event");
}
http_response_code(200);
echo 'OK';#Типы событий
50 типов в 10 группах. У каждой группы таблица событий и примеры тела data в раскрывающихся блоках.
#Сообщения
| Событие | Описание |
|---|---|
message.inbound | Входящее сообщение от клиента |
message.outbound | Исходящее сообщение оператора или бота |
message.status_changed | Изменение статуса отправленного сообщения |
message.inbound: входящее сообщение от клиента
{
"event": "message.inbound",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"messageId": "msg-550e8400-e29b-41d4-a716-446655440000",
"dialogId": "dlg-123e4567-e89b-12d3-a456-426614174000",
"body": "Привет! Хочу узнать о статусе заказа",
"channelType": "TELEGRAM_BOT",
"channelId": "ch-987fcdeb-51a2-3c4d-b5e6-789012345678",
"mediaType": null
}
}message.outbound: исходящее сообщение
{
"event": "message.outbound",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"messageId": "msg-660e8400-e29b-41d4-a716-446655440001",
"dialogId": "dlg-123e4567-e89b-12d3-a456-426614174000",
"body": "Здравствуйте! Ваш заказ в пути.",
"channelType": "TELEGRAM_BOT",
"channelId": "ch-987fcdeb-51a2-3c4d-b5e6-789012345678",
"mediaType": null
}
}message.status_changed: статус сообщения изменён
{
"event": "message.status_changed",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"messageId": "msg-660e8400-e29b-41d4-a716-446655440001",
"status": "COMPLETE",
"previousStatus": "PENDING",
"channelType": "TELEGRAM_BOT"
}
}#Диалоги
| Событие | Описание |
|---|---|
dialog.created | Создан новый диалог |
dialog.updated | Диалог обновлён |
dialog.tag_added | К диалогу добавлен тег |
dialog.tag_removed | Из диалога удалён тег |
dialog.note_added | Добавлена заметка |
dialog.read | Диалог прочитан оператором |
dialog.merged | Диалоги объединены |
dialog.custom_fields_updated | Обновлены кастомные поля |
dialog.created: создан новый диалог
{
"event": "dialog.created",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"dialogId": "dlg-123e4567-e89b-12d3-a456-426614174000",
"clientName": "Иван Петров",
"channelType": "TELEGRAM_BOT",
"clientIdentifier": "123456789"
}
}dialog.updated: диалог обновлён
{
"event": "dialog.updated",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"dialogId": "dlg-123e4567-e89b-12d3-a456-426614174000",
"action": "status_changed",
"status": "CLOSED"
}
}Возможные значения action: closed, reopened, status_changed, phone_updated, email_updated, telegram_chat_id_updated.
dialog.tag_added: добавлен тег
{
"event": "dialog.tag_added",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"dialogId": "dlg-123e4567-e89b-12d3-a456-426614174000",
"tag": "VIP"
}
}dialog.tag_removed: удалён тег
{
"event": "dialog.tag_removed",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"dialogId": "dlg-123e4567-e89b-12d3-a456-426614174000",
"tag": "VIP"
}
}dialog.note_added: добавлена заметка
{
"event": "dialog.note_added",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"dialogId": "dlg-123e4567-e89b-12d3-a456-426614174000",
"text": "Клиент просил перезвонить завтра в 10:00"
}
}dialog.read: диалог прочитан
{
"event": "dialog.read",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"dialogId": "dlg-123e4567-e89b-12d3-a456-426614174000"
}
}dialog.merged: диалоги объединены
{
"event": "dialog.merged",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"targetDialogId": "dlg-123e4567-e89b-12d3-a456-426614174000",
"sourceDialogId": "dlg-789abcde-f012-3456-7890-abcdef012345"
}
}dialog.custom_fields_updated: обновлены кастомные поля
{
"event": "dialog.custom_fields_updated",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"dialogId": "dlg-123e4567-e89b-12d3-a456-426614174000",
"fields": {
"order_id": "ORD-12345",
"priority": "high"
}
}
}#Цепочки автоматизации
| Событие | Описание |
|---|---|
chain.created | Создана цепочка |
chain.updated | Цепочка обновлена |
chain.removed | Цепочка удалена |
chain.toggled | Цепочка включена или выключена |
chain.execution_started | Запуск цепочки для клиента |
chain.execution_completed | Цепочка завершена |
chain.execution_failed | Ошибка выполнения цепочки |
chain.created: создана цепочка
{
"event": "chain.created",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"chainId": "chain-550e8400-e29b-41d4-a716-446655440000",
"name": "Приветственная цепочка",
"template": null
}
}Поле template содержит ключ шаблона ("welcome", "support" и т.д.), если цепочка создана из шаблона, или null, если создана с нуля.
chain.updated: цепочка обновлена
{
"event": "chain.updated",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"chainId": "chain-550e8400-e29b-41d4-a716-446655440000",
"name": "Приветственная цепочка v2"
}
}chain.removed: цепочка удалена
{
"event": "chain.removed",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"chainId": "chain-550e8400-e29b-41d4-a716-446655440000"
}
}chain.toggled: цепочка включена или выключена
{
"event": "chain.toggled",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"chainId": "chain-550e8400-e29b-41d4-a716-446655440000",
"isActive": true
}
}chain.execution_started: запуск цепочки
{
"event": "chain.execution_started",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"chainId": "chain-550e8400-e29b-41d4-a716-446655440000",
"chainName": "Приветственная цепочка",
"runId": "run-660e8400-e29b-41d4-a716-446655440001",
"clientIdentifier": "123456789"
}
}chain.execution_completed: цепочка завершена
{
"event": "chain.execution_completed",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"chainId": "chain-550e8400-e29b-41d4-a716-446655440000",
"runId": "run-660e8400-e29b-41d4-a716-446655440001",
"clientIdentifier": "123456789"
}
}chain.execution_failed: ошибка выполнения
{
"event": "chain.execution_failed",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"chainId": "chain-550e8400-e29b-41d4-a716-446655440000",
"runId": "run-660e8400-e29b-41d4-a716-446655440001",
"reason": "block_error",
"blockId": "block-abc123",
"blockType": "SEND_MESSAGE",
"error": "Bot not running or send error"
}
}Возможные значения reason: block_error (ошибка в блоке), max_steps_exceeded (превышен лимит шагов, защита от бесконечных циклов).
#Каналы
| Событие | Описание |
|---|---|
channel.created | Создан канал |
channel.removed | Канал удалён |
channel.toggled | Канал включён или выключен |
channel.config_updated | Обновлена конфигурация канала |
channel.error | Ошибка в работе канала |
channel.created: создан канал
{
"event": "channel.created",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"channelId": "ch-987fcdeb-51a2-3c4d-b5e6-789012345678",
"type": "TELEGRAM_BOT",
"name": "Мой Telegram бот"
}
}channel.removed: канал удалён
{
"event": "channel.removed",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"channelId": "ch-987fcdeb-51a2-3c4d-b5e6-789012345678",
"type": "TELEGRAM_BOT",
"name": "Мой Telegram бот"
}
}channel.toggled: канал включён или выключен
{
"event": "channel.toggled",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"channelId": "ch-987fcdeb-51a2-3c4d-b5e6-789012345678",
"type": "TELEGRAM_BOT",
"isActive": false
}
}channel.config_updated: конфигурация обновлена
{
"event": "channel.config_updated",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"channelId": "ch-987fcdeb-51a2-3c4d-b5e6-789012345678",
"type": "TELEGRAM_BOT"
}
}channel.error: ошибка канала
{
"event": "channel.error",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"channelId": "ch-987fcdeb-51a2-3c4d-b5e6-789012345678",
"channelType": "TELEGRAM_BOT",
"error": "Токен бота недействителен. Проверьте токен или создайте нового бота в @BotFather."
}
}#AI
| Событие | Описание |
|---|---|
ai.provider_created | Добавлен AI-провайдер |
ai.provider_removed | Удалён AI-провайдер |
ai.instruction_created | Создана инструкция |
ai.instruction_updated | Инструкция обновлена |
ai.instruction_removed | Инструкция удалена |
ai.assistant_created | Создан AI-ассистент |
ai.assistant_updated | Ассистент обновлён |
ai.assistant_removed | Ассистент удалён |
ai.assistant_toggled | Ассистент включён или выключен |
ai.assistant_replied | Ассистент ответил клиенту |
ai.provider_created: добавлен AI-провайдер
{
"event": "ai.provider_created",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"providerId": "prov-550e8400-e29b-41d4-a716-446655440000",
"type": "OPENAI",
"name": "OpenAI Production"
}
}ai.provider_removed: удалён AI-провайдер
{
"event": "ai.provider_removed",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"providerId": "prov-550e8400-e29b-41d4-a716-446655440000",
"type": "OPENAI"
}
}ai.instruction_created: создана инструкция
{
"event": "ai.instruction_created",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"instructionId": "instr-550e8400-e29b-41d4-a716-446655440000",
"name": "Инструкция для поддержки",
"mode": "SYSTEM"
}
}ai.instruction_updated: инструкция обновлена
{
"event": "ai.instruction_updated",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"instructionId": "instr-550e8400-e29b-41d4-a716-446655440000",
"name": "Инструкция для поддержки v2"
}
}ai.instruction_removed: инструкция удалена
{
"event": "ai.instruction_removed",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"instructionId": "instr-550e8400-e29b-41d4-a716-446655440000"
}
}ai.assistant_created: создан AI-ассистент
{
"event": "ai.assistant_created",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"assistantId": "asst-550e8400-e29b-41d4-a716-446655440000",
"name": "Бот поддержки",
"type": "SUPPORT"
}
}ai.assistant_updated: ассистент обновлён
{
"event": "ai.assistant_updated",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"assistantId": "asst-550e8400-e29b-41d4-a716-446655440000",
"name": "Бот поддержки v2"
}
}ai.assistant_removed: ассистент удалён
{
"event": "ai.assistant_removed",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"assistantId": "asst-550e8400-e29b-41d4-a716-446655440000"
}
}ai.assistant_toggled: ассистент включён или выключен
{
"event": "ai.assistant_toggled",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"assistantId": "asst-550e8400-e29b-41d4-a716-446655440000",
"isActive": true
}
}ai.assistant_replied: ассистент ответил
{
"event": "ai.assistant_replied",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"assistantId": "asst-550e8400-e29b-41d4-a716-446655440000",
"dialogId": "dlg-123e4567-e89b-12d3-a456-426614174000",
"assistantName": "Бот поддержки"
}
}#Платежи и баланс
| Событие | Описание |
|---|---|
payment.created | Создан новый платёж |
payment.succeeded | Платёж успешно проведён |
payment.refunded | Платёж возвращён |
balance.changed | Баланс изменился |
tier.changed | Изменён тарифный план |
payment.created: создан платёж
{
"event": "payment.created",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"paymentId": "pay-550e8400-e29b-41d4-a716-446655440000",
"amount": 2990,
"currency": "RUB"
}
}payment.succeeded: платёж проведён
{
"event": "payment.succeeded",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"paymentId": "pay-550e8400-e29b-41d4-a716-446655440000",
"amount": 2990
}
}payment.refunded: платёж возвращён
{
"event": "payment.refunded",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"paymentId": "pay-550e8400-e29b-41d4-a716-446655440000",
"amount": 2990
}
}balance.changed: баланс изменился
{
"event": "balance.changed",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"amount": 15000,
"change": -500,
"source": "ai_tokens",
"tier": "BUSINESS"
}
}tier.changed: тарифный план изменён
{
"event": "tier.changed",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"oldTier": "FREE",
"newTier": "BUSINESS",
"billingPeriod": "monthly",
"reason": "user_upgrade"
}
}Возможные значения reason: user_upgrade, trial_expired.
#Календарь
| Событие | Описание |
|---|---|
calendar.event_created | Создано событие календаря |
calendar.event_updated | Событие обновлено |
calendar.event_removed | Событие удалено |
calendar.event_created: создано событие
{
"event": "calendar.event_created",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"eventId": "evt-550e8400-e29b-41d4-a716-446655440000",
"title": "Созвон с клиентом",
"provider": "GOOGLE_CALENDAR"
}
}calendar.event_updated: событие обновлено
{
"event": "calendar.event_updated",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"eventId": "evt-550e8400-e29b-41d4-a716-446655440000",
"title": "Созвон с клиентом (перенесён)"
}
}calendar.event_removed: событие удалено
{
"event": "calendar.event_removed",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"eventId": "evt-550e8400-e29b-41d4-a716-446655440000",
"title": "Созвон с клиентом"
}
}#Интеграции
| Событие | Описание |
|---|---|
integration.connected | Подключена интеграция |
integration.disconnected | Интеграция отключена |
integration.updated | Интеграция обновлена |
integration.connected: интеграция подключена
{
"event": "integration.connected",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"integrationId": "int-550e8400-e29b-41d4-a716-446655440000",
"type": "AMOCRM",
"name": "AmoCRM Production"
}
}integration.disconnected: интеграция отключена
{
"event": "integration.disconnected",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"integrationId": "int-550e8400-e29b-41d4-a716-446655440000",
"type": "AMOCRM"
}
}integration.updated: интеграция обновлена
{
"event": "integration.updated",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"integrationId": "int-550e8400-e29b-41d4-a716-446655440000",
"type": "AMOCRM",
"name": "AmoCRM Production v2"
}
}#SMS
| Событие | Описание |
|---|---|
sms.sent | SMS отправлено |
sms.status_changed | Изменился статус SMS |
sms.device_connected | Подключено SMS-устройство |
sms.device_disconnected | SMS-устройство отключено |
sms.sent: SMS отправлено
{
"event": "sms.sent",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"requestId": "req-550e8400-e29b-41d4-a716-446655440000",
"to": "+79991234567",
"channelId": "ch-987fcdeb-51a2-3c4d-b5e6-789012345678"
}
}sms.status_changed: статус SMS изменён
{
"event": "sms.status_changed",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"requestId": "req-550e8400-e29b-41d4-a716-446655440000",
"status": "delivered",
"to": "+79991234567",
"channelId": "ch-987fcdeb-51a2-3c4d-b5e6-789012345678"
}
}sms.device_connected: SMS-устройство подключено
{
"event": "sms.device_connected",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"deviceId": "dev-550e8400-e29b-41d4-a716-446655440000",
"channelId": "ch-987fcdeb-51a2-3c4d-b5e6-789012345678",
"name": "Samsung Galaxy A54"
}
}sms.device_disconnected: SMS-устройство отключено
{
"event": "sms.device_disconnected",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"deviceId": "dev-550e8400-e29b-41d4-a716-446655440000",
"reason": "manual_removal"
}
}Возможные значения reason: manual_removal (удалено пользователем), invalid_fcm_token (невалидный FCM-токен, устройство отключено автоматически).
#Файлы
| Событие | Описание |
|---|---|
file.uploaded | Загружен файл |
file.deleted | Файл удалён |
file.uploaded: файл загружен
{
"event": "file.uploaded",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"fileId": "file-550e8400-e29b-41d4-a716-446655440000",
"originalName": "document.pdf",
"mimeType": "application/pdf",
"size": 245760
}
}file.deleted: файл удалён
{
"event": "file.deleted",
"timestamp": "2025-06-15T10:30:00.000Z",
"data": {
"fileId": "file-550e8400-e29b-41d4-a716-446655440000",
"filename": "document.pdf"
}
}#Ограничения и доставка
| Параметр | Значение |
|---|---|
| Таймаут доставки | 10 секунд |
| Повторные попытки | Нет: fire-and-forget, одна попытка на событие |
| Автоотключение | После 50 последовательных ошибок вебхук деактивируется |
| Сброс счётчика ошибок | При успешной доставке счётчик обнуляется |
| Подпись | HMAC-SHA256 тела запроса, заголовок X-Webhook-Signature, hex |
Чтобы вызывать платформу в обратную сторону (отправить сообщение, прочитать историю), используйте REST API v1. Вебхуки внутри цепочек автоматизации описаны на странице блока Webhook.
