Главная / Документация / Вебхуки
Вебхуки
Нотифлоу шлет HTTP POST на ваш endpoint при каждом подписанном событии. Тело — JSON в UTF-8, подпись — HMAC-SHA256 секрета вебхука в заголовке X-Notiflow-Signature.
Настройка
Кабинет: Интеграции → Вебхуки → Создать. Секрет генерируется автоматически; показывается один раз — сохраните в хранилище.
Каталог событий
| Событие | Когда фируется |
|---|---|
chat_new | Новый диалог в поддержке |
chat_message | Сообщение от посетителя или оператора (без внутренних заметок) |
chat_closed | Диалог закрыт |
contact_identified | Анонимный посетитель идентифицирован через _nf('identify') или /v1/contacts |
contact.score_tier_changed | Изменился tier лида (cold → warm → hot) |
widget_show | Виджет показан посетителю |
widget_click | Клик по CTA в виджете |
widget_submit | Сабмит формы/квиза/NPS |
ai_auto_reply | AI-бот отправил авто-ответ |
ai_summary_generated | Сгенерирована сводка диалога |
Проверка подписи
Подпись считается по сырому телу запроса (не по распарсенному JSON). Заголовок:
X-Notiflow-Signature: sha256=<hex>
Node.js
const crypto = require('crypto');
function verify(rawBody, header, secret) {
const expected = 'sha256=' + crypto
.createHmac('sha256', secret)
.update(rawBody)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(header),
Buffer.from(expected)
);
}
Python
import hmac, hashlib
def verify(raw_body: bytes, header: str, secret: str) -> bool:
expected = 'sha256=' + hmac.new(
secret.encode(), raw_body, hashlib.sha256
).hexdigest()
return hmac.compare_digest(header, expected)
PHP
function verify(string $rawBody, string $header, string $secret): bool {
$expected = 'sha256=' . hash_hmac('sha256', $rawBody, $secret);
return hash_equals($expected, $header);
}
Ретраи. При HTTP ≥ 400 или таймауте делаем до 3 попыток с задержками 10 с / 60 с / 300 с. Ответ 2xx считаем доставкой.