Исходящие вебхуки
Кратко
Исходящий вебхук отправляет JSON POST на HTTPS-адрес при выбранном событии заявки. По желанию тело подписывается HMAC-SHA256.
Доступ и события
Настройка находится в Настройки → Автоматизация → Исходящие вебхуки и доступна администратору. Интерфейс предлагает события:
ticket_created— создана заявка;status_changed— изменён статус;message_added— добавлено сообщение.
Если список событий пуст, вебхук получает все вызываемые движком события.
Формат запроса
{
"event": "ticket_created",
"ticket_id": 4521,
"tenant_id": 18,
"timestamp": "2026-08-30T10:30:00Z",
"data": {
"subject": "Не работает оплата",
"status": "new",
"priority": "high",
"category": "billing",
"assigned_to": null,
"source": "widget"
}
}
Дополнительные поля конкретного события добавляются внутрь data. Полей webhook_id, вложенных ticket/contact/metadata в общем контракте нет.
Также отправляется заголовок X-Webhook-Event с кодом события.
Проверка подписи
Если у вебхука задан секрет, заголовок имеет вид:
X-Webhook-Signature: sha256=<hex-hmac>
Пример для Node.js:
const crypto = require('crypto');
const expected = 'sha256=' + crypto
.createHmac('sha256', secret)
.update(rawBody)
.digest('hex');
const actual = req.headers['x-webhook-signature'] || '';
const valid = expected.length === actual.length &&
crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(actual));
Считайте HMAC по исходным байтам тела до JSON-разбора.
Доставка и журнал
Движок делает одну синхронную попытку: до 5 секунд на соединение и до 10 секунд на весь запрос, без перехода по redirect. Встроенной очереди повторов, backoff и автоматического отключения после серии ошибок сейчас нет. Поэтому принимающая сторона должна быстро вернуть 2xx, а собственную тяжёлую работу поставить в свою очередь.
Для каждой попытки сохраняются HTTP-код, ошибка, сокращённый ответ и время. В списке видны число отправок и последний статус; полный журнал показывает последние 100 записей.
Настройка и тест
- Нажмите Добавить вебхук.
- Укажите имя, HTTPS URL, необязательный секрет и события.
- Сохраните и нажмите кнопку теста.
- Тест отправляет событие
test; внутриdataбудутtest: trueи служебное сообщение.
- Проверьте HTTP-код в карточке и детали в журнале.
Успешный тест подтверждает доступность URL и формат текущего запроса, но не доказывает обработку реальных событий вашей системой.
Частые вопросы
Почему доставка не повторилась?
Повторов в текущем движке нет. Исправьте принимающий endpoint и инициируйте новое событие либо тест.
Можно подписать один URL на несколько событий?
Да. Отметьте нужные события; их код всегда приходит в поле event и заголовке X-Webhook-Event.