Вебхук для лидов и встреч: заявки в Zapier, Make, n8n или вашу CRM

Вебхук для лидов и встреч

Вебхук сразу отправляет каждую новую заявку на выбранный вами адрес. Лиды и встречи попадают прямо в Zapier, Make, n8n или вашу собственную CRM, например чтобы создать тикет или отправить письмо отделу продаж.

Вебхук доступен с тарифа Стандартный, подробности на странице тарифов.

Настройка

  1. Откройте Панель управления → ваш ассистент → Функции.
  2. Выберите в списке Передавать автоматически (группа Привлекать клиентов). Там находится блок Вебхук.
  3. Введите адрес, например URL «Catch Hook» из Zapier, и нажмите Сохранить.
  4. Скопируйте Секретный ключ. Он показывается только один раз. Кнопка Новый ключ при необходимости создает новый.
  5. Выберите, что передавать: Новые заявки на контакт, Новые встречи или и то, и другое.
  6. Кнопка Проверить отправляет на ваш адрес тестовый запрос.

Адрес должен начинаться с https://, быть доступен из интернета и использовать порт 443 или 8443. Адреса внутри вашей сети (например localhost или 192.168.…) не принимаются.

События

СобытиеКогда
lead.createdСохранен лид: из чата, телефонного звонка или формы Action Bar.
booking.createdСоздана запись на встречу.

Пример: новый лид

{
  "id": "7a05fd6b-3b54-4235-b76e-7695c4ab13a3",
  "event": "lead.created",
  "createdAt": "2026-10-23T15:11:28.895Z",
  "data": {
    "leadId": "51f7f1e3-3e2f-471b-ade6-90959a5d3724",
    "source": "chat",
    "name": "Анна Иванова",
    "email": "anna@example.com",
    "phone": "+7 495 000-00-00",
    "interest": "Расчет стоимости теплового насоса",
    "language": "ru",
    "fields": { "Компания": "ООО Пример" },
    "sessionId": "861f9c24-11ab-4352-b326-5670b0196fc0",
    "createdAt": "2026-10-23T15:11:28.742Z"
  }
}

source принимает значения chat, phone или form. Поля без значения не передаются. В fields находятся ваши дополнительные данные, ключом служит их название. При запросе обратного звонка добавляется callback с day и time, у формы добавляется formName.

Пример: новая встреча

{
  "id": "0c8f2d0e-6f1a-4a43-9a0b-2f9a3c1d5e77",
  "event": "booking.created",
  "createdAt": "2026-10-23T15:20:04.112Z",
  "data": {
    "bookingId": "e3f82cb1-4f6a-4d6e-9c55-0d1a2b3c4d5e",
    "source": "card",
    "appointmentType": { "id": "consultation", "title": "Бесплатная консультация", "durationMinutes": 30 },
    "start": "2026-10-28T14:00",
    "end": "2026-10-28T14:30",
    "startUtc": "2026-10-28T11:00:00.000Z",
    "endUtc": "2026-10-28T11:30:00.000Z",
    "timezone": "Europe/Moscow",
    "name": "Иван Петров",
    "email": "ivan@example.com",
    "fields": { "Компания": "ООО Пример" },
    "createdAt": "2026-10-23T15:20:04.050Z"
  }
}

start и end указаны по местному времени в timezone, startUtc и endUtc это те же моменты в UTC. source принимает значения card (запись через карточку встречи в чате), chat или phone. Поля без значения не передаются: name (если имя не спрашивали или его не указали), email, phone, note (цель встречи), meetingLink (ссылка на видеозвонок, только при Google Calendar) и sessionId. В fields находятся ответы на дополнительные данные из функции Запись на встречи, ключом служит их название.

Заголовки

ЗаголовокСодержимое
X-Webhook-IdУникальный ID доставки, совпадает с полем id. По нему удобно отсеивать дубликаты.
X-Webhook-Eventlead.created или booking.created
X-Webhook-TimestampВремя отправки в секундах с 1970 года
X-Webhook-Signaturesha256= плюс HMAC-SHA256 от timestamp.rawBody с вашим секретным ключом

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

Проверяйте подпись, прежде чем использовать данные. Берите исходное тело запроса без изменений, а не заново сериализованный JSON.

Node.js:

import { createHmac, timingSafeEqual } from 'node:crypto'

export function isValidWebhook(rawBody, headers, secret) {
  const timestamp = headers['x-webhook-timestamp']
  const expected = 'sha256=' + createHmac('sha256', secret).update(`${timestamp}.${rawBody}`).digest('hex')
  const received = String(headers['x-webhook-signature'] || '')
  const fresh = Math.abs(Date.now() / 1000 - Number(timestamp)) < 300
  return fresh && received.length === expected.length && timingSafeEqual(Buffer.from(received), Buffer.from(expected))
}

PHP:

$raw = file_get_contents('php://input');
$timestamp = $_SERVER['HTTP_X_WEBHOOK_TIMESTAMP'] ?? '';
$received = $_SERVER['HTTP_X_WEBHOOK_SIGNATURE'] ?? '';
$expected = 'sha256=' . hash_hmac('sha256', $timestamp . '.' . $raw, $secret);

if (!hash_equals($expected, $received) || abs(time() - (int) $timestamp) > 300) {
    http_response_code(401);
    exit;
}
$event = json_decode($raw, true);

В Zapier или Make проверку подписи можно пропустить, если адрес остается в секрете.

Ответ и повторные попытки

  • Ответьте статусом 2xx, как только приняли данные. Тело вашего ответа мы не читаем.
  • Мы ждем ответа не дольше 5 секунд.
  • При тайм-ауте, ошибке сети, статусе 429 или 5xx мы повторяем отправку через 1 и через 5 секунд, то есть всего не больше трех попыток.
  • При других ошибках (например 404) повторных попыток нет. Перенаправления не выполняются.
  • Результат последней доставки виден в панели управления в строке Последняя передача.

Если ваша система не отвечает, лид не теряется: он всегда сначала сохраняется в разделе «Лиды» панели управления.