Продукт +
Чат Виджеты Помощник Команды и роли База знаний Внутренние заметки
Тарифы
Ресурсы +
Журнал и база знаний Документация
Контакты Войти Начать бесплатно

Вебхуки

Нотифлоу шлет HTTP POST на ваш endpoint при каждом подписанном событии. Тело — JSON в UTF-8, подпись — HMAC-SHA256 секрета вебхука в заголовке X-Notiflow-Signature-256.

Настройка

Кабинет: Интеграции → Вебхуки → Создать. Секрет генерируется автоматически; показывается один раз — сохраните в хранилище.

Каталог событий

Активные события — реально отправляются при наступлении:

СобытиеКогда отправляется
chat_newНовый диалог в поддержке (виджет, Телеграм, MAX, ВКонтакте, email)
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_summary_generatedСгенерирована сводка диалога
email_receivedВходящее письмо от клиента принято в диалог email-канала
email_sentОтвет оператора передан SMTP-серверу (доставка подтверждается отдельно, отказ придет как bounce)
crm_lead_createdЛид или сделка созданы в подключенной CRM (Битрикс24, amoCRM)
crm_deal_updatedСделка в CRM обновлена: статус по lead score или заметка-сводка при закрытии диалога

Зарезервированные события — объявлены в контракте и доступны для подписки в кабинете, но отправка пока не включена. Подписка на них безопасна: доставки начнутся с релизом соответствующей функции, о чем сообщим в changelog.

СобытиеЧто будет означать
form_submittedОтправлена standalone-форма

Проверка подписи

Подпись считается по сырому телу запроса (не по распарсенному JSON). Каждая доставка несет два заголовка:

X-Notiflow-Signature-256: sha256=<hex>   ← используйте этот
X-Notiflow-Signature: <hex>               ← устаревший, будет отключен

Проверяйте X-Notiflow-Signature-256: значение — sha256= плюс hex HMAC-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)
  );
}

// verify(rawBody, req.headers['x-notiflow-signature-256'], secret)

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)

# verify(request.data, request.headers['X-Notiflow-Signature-256'], secret)

PHP

function verify(string $rawBody, string $header, string $secret): bool {
    $expected = 'sha256=' . hash_hmac('sha256', $rawBody, $secret);
    return hash_equals($expected, $header);
}

// verify($rawBody, $_SERVER['HTTP_X_NOTIFLOW_SIGNATURE_256'], $secret);
Ретраи. При HTTP ≥ 400 или таймауте делаем до 3 попыток с задержками 10 с / 60 с / 300 с. Ответ 2xx считаем доставкой.