API для разработчиков

Event Webhooks

Кратко

Event Webhooks tuk-tuk.online: платформа отправляет HTTP POST с JSON на URL вашего сервера при каждом из 50 типов событий (сообщения, диалоги, цепочки, каналы, AI, платежи, календарь, интеграции, SMS, файлы). Каждый запрос подписан HMAC-SHA256 секретным ключом вебхука.

  • Настройка в кабинете: Настройки проекта → Вебхуки → «Создать вебхук»: URL, типы событий, секретный ключ. Там же включение/выключение, перегенерация ключа, логи доставки.
  • Заголовки запроса: Content-Type: application/json, X-Webhook-Event (тип события), X-Webhook-Timestamp (ISO 8601), X-Webhook-Signature (HMAC-SHA256 сырого тела, hex, ключ: секрет вебхука).
  • Тело: { "event": "<тип>", "timestamp": "<ISO 8601>", "data": { ... } }; состав data зависит от типа события.
  • Группы событий (50 типов): message.* (3), dialog.* (8), chain.* (7), channel.* (5), ai.* (10), payment.*/balance.changed/tier.changed (5), calendar.* (3), integration.* (3), sms.* (4), file.* (2).
  • Доставка: таймаут 10 секунд, без повторных попыток (fire-and-forget). После 50 последовательных ошибок вебхук отключается; успешная доставка обнуляет счётчик.
  • Проверка подписи: HMAC-SHA256 от raw body с секретом, сравнение через crypto.timingSafeEqual (Node.js) или hash_equals (PHP); при несовпадении отвечать 401.
На этой странице

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 ошибок подряд вебхук отключается.

#Как подключить

  1. Откройте Настройки проекта, раздел Вебхуки.
  2. Нажмите Создать вебхук.
  3. Укажите URL вашего сервера (рекомендуется HTTPS).
  4. Выберите типы событий, которые хотите получать.
  5. Скопируйте секретный ключ: он нужен для проверки подписи.

В настройках вебхука доступны: включение и выключение, смена URL и списка событий, перегенерация секретного ключа, логи доставки.

#Формат доставки

При наступлении события tuk-tuk.online отправляет HTTP POST на ваш URL.

#Заголовки

ЗаголовокОписание
Content-Typeapplication/json
X-Webhook-SignatureHMAC-SHA256 подпись тела запроса (hex)
X-Webhook-EventТип события (например, message.inbound)
X-Webhook-TimestampВремя события в формате ISO 8601

#Тело запроса

Все события приходят в единой структуре:

JSON
{
  "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
  }
}
ПолеТипОписание
eventstringТип события
timestampstringВремя события, ISO 8601
dataobjectДанные события, состав зависит от типа

#Проверить подпись

Заголовок X-Webhook-Signature содержит HMAC-SHA256 подпись сырого тела запроса в hex-формате, ключ подписи: секретный ключ вебхука. Проверяйте подпись до разбора JSON, иначе любой сможет прислать вам поддельное событие.

JavaScript
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
<?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';

#Пример обработчика

Тестовый запрос для проверки вашего обработчика и полный пример с разбором нескольких типов событий.

Shell
# Тестовый запрос для проверки вашего обработчика
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
    }
  }'
JavaScript
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
<?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: входящее сообщение от клиента
JSON
{
  "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: исходящее сообщение
JSON
{
  "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: статус сообщения изменён
JSON
{
  "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: создан новый диалог
JSON
{
  "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: диалог обновлён
JSON
{
  "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: добавлен тег
JSON
{
  "event": "dialog.tag_added",
  "timestamp": "2025-06-15T10:30:00.000Z",
  "data": {
    "dialogId": "dlg-123e4567-e89b-12d3-a456-426614174000",
    "tag": "VIP"
  }
}
dialog.tag_removed: удалён тег
JSON
{
  "event": "dialog.tag_removed",
  "timestamp": "2025-06-15T10:30:00.000Z",
  "data": {
    "dialogId": "dlg-123e4567-e89b-12d3-a456-426614174000",
    "tag": "VIP"
  }
}
dialog.note_added: добавлена заметка
JSON
{
  "event": "dialog.note_added",
  "timestamp": "2025-06-15T10:30:00.000Z",
  "data": {
    "dialogId": "dlg-123e4567-e89b-12d3-a456-426614174000",
    "text": "Клиент просил перезвонить завтра в 10:00"
  }
}
dialog.read: диалог прочитан
JSON
{
  "event": "dialog.read",
  "timestamp": "2025-06-15T10:30:00.000Z",
  "data": {
    "dialogId": "dlg-123e4567-e89b-12d3-a456-426614174000"
  }
}
dialog.merged: диалоги объединены
JSON
{
  "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: обновлены кастомные поля
JSON
{
  "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: создана цепочка
JSON
{
  "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: цепочка обновлена
JSON
{
  "event": "chain.updated",
  "timestamp": "2025-06-15T10:30:00.000Z",
  "data": {
    "chainId": "chain-550e8400-e29b-41d4-a716-446655440000",
    "name": "Приветственная цепочка v2"
  }
}
chain.removed: цепочка удалена
JSON
{
  "event": "chain.removed",
  "timestamp": "2025-06-15T10:30:00.000Z",
  "data": {
    "chainId": "chain-550e8400-e29b-41d4-a716-446655440000"
  }
}
chain.toggled: цепочка включена или выключена
JSON
{
  "event": "chain.toggled",
  "timestamp": "2025-06-15T10:30:00.000Z",
  "data": {
    "chainId": "chain-550e8400-e29b-41d4-a716-446655440000",
    "isActive": true
  }
}
chain.execution_started: запуск цепочки
JSON
{
  "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: цепочка завершена
JSON
{
  "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: ошибка выполнения
JSON
{
  "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: создан канал
JSON
{
  "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: канал удалён
JSON
{
  "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: канал включён или выключен
JSON
{
  "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: конфигурация обновлена
JSON
{
  "event": "channel.config_updated",
  "timestamp": "2025-06-15T10:30:00.000Z",
  "data": {
    "channelId": "ch-987fcdeb-51a2-3c4d-b5e6-789012345678",
    "type": "TELEGRAM_BOT"
  }
}
channel.error: ошибка канала
JSON
{
  "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-провайдер
JSON
{
  "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-провайдер
JSON
{
  "event": "ai.provider_removed",
  "timestamp": "2025-06-15T10:30:00.000Z",
  "data": {
    "providerId": "prov-550e8400-e29b-41d4-a716-446655440000",
    "type": "OPENAI"
  }
}
ai.instruction_created: создана инструкция
JSON
{
  "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: инструкция обновлена
JSON
{
  "event": "ai.instruction_updated",
  "timestamp": "2025-06-15T10:30:00.000Z",
  "data": {
    "instructionId": "instr-550e8400-e29b-41d4-a716-446655440000",
    "name": "Инструкция для поддержки v2"
  }
}
ai.instruction_removed: инструкция удалена
JSON
{
  "event": "ai.instruction_removed",
  "timestamp": "2025-06-15T10:30:00.000Z",
  "data": {
    "instructionId": "instr-550e8400-e29b-41d4-a716-446655440000"
  }
}
ai.assistant_created: создан AI-ассистент
JSON
{
  "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: ассистент обновлён
JSON
{
  "event": "ai.assistant_updated",
  "timestamp": "2025-06-15T10:30:00.000Z",
  "data": {
    "assistantId": "asst-550e8400-e29b-41d4-a716-446655440000",
    "name": "Бот поддержки v2"
  }
}
ai.assistant_removed: ассистент удалён
JSON
{
  "event": "ai.assistant_removed",
  "timestamp": "2025-06-15T10:30:00.000Z",
  "data": {
    "assistantId": "asst-550e8400-e29b-41d4-a716-446655440000"
  }
}
ai.assistant_toggled: ассистент включён или выключен
JSON
{
  "event": "ai.assistant_toggled",
  "timestamp": "2025-06-15T10:30:00.000Z",
  "data": {
    "assistantId": "asst-550e8400-e29b-41d4-a716-446655440000",
    "isActive": true
  }
}
ai.assistant_replied: ассистент ответил
JSON
{
  "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: создан платёж
JSON
{
  "event": "payment.created",
  "timestamp": "2025-06-15T10:30:00.000Z",
  "data": {
    "paymentId": "pay-550e8400-e29b-41d4-a716-446655440000",
    "amount": 2990,
    "currency": "RUB"
  }
}
payment.succeeded: платёж проведён
JSON
{
  "event": "payment.succeeded",
  "timestamp": "2025-06-15T10:30:00.000Z",
  "data": {
    "paymentId": "pay-550e8400-e29b-41d4-a716-446655440000",
    "amount": 2990
  }
}
payment.refunded: платёж возвращён
JSON
{
  "event": "payment.refunded",
  "timestamp": "2025-06-15T10:30:00.000Z",
  "data": {
    "paymentId": "pay-550e8400-e29b-41d4-a716-446655440000",
    "amount": 2990
  }
}
balance.changed: баланс изменился
JSON
{
  "event": "balance.changed",
  "timestamp": "2025-06-15T10:30:00.000Z",
  "data": {
    "amount": 15000,
    "change": -500,
    "source": "ai_tokens",
    "tier": "BUSINESS"
  }
}
tier.changed: тарифный план изменён
JSON
{
  "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: создано событие
JSON
{
  "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: событие обновлено
JSON
{
  "event": "calendar.event_updated",
  "timestamp": "2025-06-15T10:30:00.000Z",
  "data": {
    "eventId": "evt-550e8400-e29b-41d4-a716-446655440000",
    "title": "Созвон с клиентом (перенесён)"
  }
}
calendar.event_removed: событие удалено
JSON
{
  "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: интеграция подключена
JSON
{
  "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: интеграция отключена
JSON
{
  "event": "integration.disconnected",
  "timestamp": "2025-06-15T10:30:00.000Z",
  "data": {
    "integrationId": "int-550e8400-e29b-41d4-a716-446655440000",
    "type": "AMOCRM"
  }
}
integration.updated: интеграция обновлена
JSON
{
  "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.sentSMS отправлено
sms.status_changedИзменился статус SMS
sms.device_connectedПодключено SMS-устройство
sms.device_disconnectedSMS-устройство отключено
sms.sent: SMS отправлено
JSON
{
  "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 изменён
JSON
{
  "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-устройство подключено
JSON
{
  "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-устройство отключено
JSON
{
  "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: файл загружен
JSON
{
  "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: файл удалён
JSON
{
  "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.