Как настроить вебхуки (Webhooks)

Вебхук — адрес на вашем сервере или в no-code сервисе, куда TapWay отправляет POST-запрос с JSON, когда на странице что-то происходит: пришла заявка, клиент записался, прошла оплата. Так данные сразу попадают в вашу CRM, таблицу или бота. Подключить вебхук можно двумя способами: в настройках проекта и в разделе «CRM».

Адрес уведомлений в настройках

  1. Откройте проект → «Ещё» → «Настройки» → раздел «Чаты».
  2. В карточке «Чаты и webhooks» вставьте адрес в поле «Webhook URL (уведомления)». Он должен начинаться с https:// или http://.
  3. Нажмите «Сохранить».
Поле «Webhook URL (уведомления)» в настройках проекта TapWay

На этот адрес приходят три события:

  • form_submit — заявка из блока «Форма»: block_id и fields — поля формы с ответами;
  • booking_create — запись через «Онлайн-запись»: block_id, master, service, date (ГГГГ-ММ-ДД), time (ЧЧ:ММ), client_name, client_phone;
  • payment.paid — оплата через Prodamus, например по кнопке «Оплатить» (приём оплат): order_num, title, amount, customer_email, customer_phone, paid_at, demo (тестовый режим). status — paid или mismatch, если заплатили меньше заданной суммы (expected) или меньше минимума доната.

В каждом событии есть event, multi_id, prefix — адрес мультиссылки — и sent_at — время отправки. Пример заявки:

{
  "event": "form_submit",
  "multi_id": 1234,
  "block_id": 5678,
  "prefix": "demo-studio",
  "fields": {
    "name": "Анна",
    "email": "anna@example.ru"
  },
  "sent_at": "2026-09-28T09:15:00.000Z"
}

Заголовки запроса — Content-Type: application/json и User-Agent: TapWay-Webhook/1.0. Подписи у этого способа нет: чтобы отсечь чужие запросы, добавьте в адрес секретный параметр, например ?token=…, и проверяйте его у себя.

Вебхуки в CRM

Откройте проект → «Ещё» → «CRM», в карточке «Webhook» вставьте адрес и нажмите «Добавить». Под адресом появится «Секрет подписи» — он нужен для проверки запросов.

Вебхук в разделе CRM TapWay: адрес и секрет подписи

События: form.submit (заявка из формы), survey.started (опрос или квиз начат), survey.submit и survey.finished (пройден опрос или квиз), booking.created (запись), payment.paid (оплата), order.created, order.paid, order.shipped, order.cancelled (заказы магазина). Приходят и служебные события самой CRM — deal.created, deal.updated, contact.upsert, booking.synced: лишние можно отбрасывать по заголовку X-TapWay-Event. Тело запроса — JSON с полями event, payload (данные события) и multi_id. Заголовки:

  • X-TapWay-Event — название события;
  • X-TapWay-Delivery — уникальный номер отправки;
  • X-TapWay-Signature — HMAC-SHA256 тела запроса с секретом подписи, в hex.

Проверка подписи на PHP:

$raw = file_get_contents('php://input');
$sign = hash_hmac('sha256', $raw, 'СЕКРЕТ_ПОДПИСИ');
$got = $_SERVER['HTTP_X_TAPWAY_SIGNATURE'] ?? '';
if (!hash_equals($sign, $got)) {
  http_response_code(401);
  exit;
}
$data = json_decode($raw, true);

Вебхуков в CRM: 0 на бесплатном тарифе и «Базовом», 1 на «Про», без лимита на «Бизнесе».

Повторы и ограничения

  • Каждое событие отправляется один раз, повторов нет. Если сервер не ответил за 5 секунд (адрес из настроек) или 10 секунд (CRM) или вернул ошибку, повторно оно не придёт — сверяйтесь с разделами «Заявки», «Оплаты» и «CRM» в кабинете.
  • Переадресации не выполняются: адрес должен отвечать сам.
  • На адреса во внутренней сети (localhost, частные IP) и на адреса с логином и паролем внутри события не отправляются: сохранить такой адрес можно, но запросов на него не будет.
  • Если тариф проекта сменился на бесплатный или «Базовый», адреса в CRM остаются в списке, но события на них не отправляются.

Как проверить

  1. Создайте временный адрес в сервисе для приёма тестовых запросов, например webhook.site, и вставьте его в поле.
  2. Отправьте заявку через форму на своей странице.
  3. Посмотрите, что пришло, и настройте разбор полей у себя. Оплату проверьте в тестовом режиме раздела «Оплаты» — в событии будет "demo": true.