Главная · Блог · Входящий вебхук в чат-бот: как запустить сценарий из своей системы

Входящий вебхук в чат-бот: как запустить сценарий из своей системы

· Команда ЧБТ · Интеграции, Сценарии

Обычно сценарий бота запускает человек: нажал «Старт», написал слово, открыл виджет. Но бывает, что событие происходит не в мессенджере, а в вашей системе: заявка с формы на сайте, заказ в учётной программе, оплата в сервисе. Чтобы такое событие тоже запускало сценарий, в ЧБТ есть триггер «Входящий webhook» — адрес, на который ваша система отправляет запрос. Разбираем, как его настроить, что можно передать, что сценарий сделает дальше и чего этот триггер честно не умеет.

Что такое входящий вебхук

Вебхук — это адрес, на который одна программа отправляет запрос, когда у неё что-то произошло. «Исходящий» — когда бот сам отправляет данные наружу: в ЧБТ это действие «HTTP-запрос». «Входящий» — наоборот: внешняя система стучится к боту.

В ЧБТ входящий вебхук — один из триггеров сценария, наравне с «Команда (/start)», «Ключевые слова» и «Deeplink». У триггера есть свой адрес. Как только на него приходит POST-запрос, сценарий запускается с того шага, который вы выбрали в поле «С какого шага начать».

Триггер есть и в режиме «Шаги», и на «Холсте», от тарифа он не зависит.

Главное ограничение — до настройки

Входящий вебхук запускает сценарий как отдельное событие в канале чата на сайте. Он не продолжает переписку конкретного клиента в Telegram, MAX или ВКонтакте и не может написать ему первым. Если блок «Сообщение» стоит в такой ветке, текст уйдёт не клиенту в мессенджер, а в диалог контакта вебхука — его будет видно в «Диалогах», и только.

Поэтому входящий вебхук подходит, чтобы занести событие в ЧБТ и отреагировать командой: завести сделку, уведомить оператора, поставить тег, переслать данные дальше. Чтобы сообщить клиенту о событии в его мессенджере, нужен уже начатый диалог: ответить в него может оператор или ваша система через API ЧБТ. Как уведомлять клиентов честными способами — в статье про уведомления через бота.

Что нужно для работы

  • Подключённый чат на сайте. Сценарий вебхука работает в канале виджета. Если такого канала в проекте нет, запрос получит ответ 404 с ошибкой no web channel.
  • Включённый сценарий с триггером «Входящий webhook» и заполненным «Путь webhook». Выключенный сценарий вебхук не найдёт — ответ 404 no_trigger.
  • Система, которая умеет отправлять POST-запрос. Это может быть ваш сайт, CRM, учётная программа, форма с настройкой вебхука или сервис автоматизации — Make, n8n, Albato.

На Бесплатном тарифе каждый новый контакт вебхука расходует один из 30 диалогов месяца — учитывайте это, если событий много.

Как настроить триггер

  1. Откройте сценарий и в панели триггеров нажмите «Добавить триггер».
  2. В «Когда запускать» выберите «Входящий webhook».
  3. «Путь webhook» — короткое имя события латиницей, например order-created или site-form.
  4. «Секрет» новому триггеру выдаётся сразу. Кнопка «Сгенерировать» меняет его на новый — старый адрес после этого перестаёт работать, кабинет спросит подтверждение.
  5. Скопируйте готовый адрес из поля «URL для POST-запросов». Он выглядит так: https://app.chbt.io/webhook/inbound/<бот>/order-created?token=<секрет>.
  6. В «С какого шага начать» выберите первый шаг ветки.

В одном сценарии может быть несколько триггеров, поэтому один и тот же сценарий можно запускать и вебхуком, и, например, ключевым словом.

Что отправить в запросе

Метод — POST. В теле ЧБТ читает три поля:

  • uid (или user_id) — кто это. Один uid — один контакт в ЧБТ: повторные запросы с тем же uid попадут в его карточку и его диалог. Удобно передавать номер заказа, телефон или id клиента в вашей системе. Без uid каждый запрос создаст новый контакт.
  • text (или message) — текст события. Он сохраняется как входящее сообщение контакта и виден в «Диалогах».
  • name — имя контакта, до 120 символов. Его можно подставлять в тексты как {{name}}.

Пример:

curl -X POST "https://app.chbt.io/webhook/inbound/<бот>/site-form" \
  -H "X-Webhook-Token: <секрет>" \
  -H "Content-Type: application/json" \
  -d '{"uid":"79001234567","name":"Анна","text":"Заявка с сайта: кухня 3 м, замер в субботу"}'

Остальные поля тела ЧБТ не разбирает: отдельных переменных из них не появится. Всё, что нужно увидеть команде, кладите в text.

Секрет: в адресе или в заголовке

Секрет защищает адрес от чужих запросов. Передать его можно двумя способами:

  • параметром ?token= в адресе — подходит для систем, где можно вписать только URL;
  • заголовком X-Webhook-Token — если система умеет заголовки, это аккуратнее: секрет не оседает в логах вместе с адресом.

Запрос без секрета или с неверным получит ответ 401 unauthorized, и сценарий не запустится. У старых триггеров, созданных до появления секретов, его может не быть — тогда вебхук принимает запросы без проверки. Нажмите «Сгенерировать», чтобы включить проверку, и обновите адрес в своей системе.

Что поставить после триггера

Ветка вебхука — это обычный сценарий, только без живого собеседника. Полезные шаги:

  • «Действие» → «Сделка в CRM» — заявка с сайта сразу ложится в канбан. В «Название сделки» можно подставить имя: Заявка с сайта — {{name}}, задать «Сумма» и «Этап».
  • «Действие» → «Уведомить оператора» — команда получает уведомление в кабинете и push. «Текст уведомления» тоже понимает переменные.
  • «Действие» → «Добавить тег» — например заявка-сайт, чтобы потом отфильтровать такие контакты в «Контактах».
  • «Действие» → «HTTP-запрос» — переслать событие дальше: в Google Таблицу, внешнюю CRM, свой сервер. В запрос уйдёт и текст события.
  • «Условие» — развести события по веткам, например по тегу контакта.

Какие события удобно передавать

  • Заявка с формы сайта или лендинга — чтобы она попала в ту же CRM, что и заявки из мессенджеров, и менеджер не проверял две почты.
  • Звонок или заявка из колл-трекинга — контакт с телефоном в uid и короткой сводкой в text.
  • Новый заказ в учётной системе — сделка с суммой на нужном этапе и уведомление ответственному.
  • Оплата на стороннем сервисе — тег оплатил, чтобы такие клиенты были видны в «Контактах» рядом с остальными.
  • Событие из Make или n8n — когда сценарий автоматизации собрал данные из нескольких источников и должен отдать итог команде в ЧБТ.

Общее у всех — событию нужна реакция команды, а не автоматический ответ клиенту в мессенджер.

Пример: заявка с сайта в CRM за минуту

Мебельная мастерская принимает заявки формой на сайте. Нужно, чтобы каждая заявка сразу оказывалась в ЧБТ — там, где менеджер уже отвечает клиентам из Telegram и виджета.

  1. Сценарий «Заявки с сайта»: триггер «Входящий webhook», путь site-form.
  2. Первый шаг — «Действие»: «Добавить тег» заявка-сайт, «Сделка в CRM» с названием Сайт — {{name}} на этапе «Новый», «Уведомить оператора» с текстом Новая заявка с сайта: {{name}}.
  3. Форма сайта отправляет POST с uid — телефоном, name — именем и text — тем, что клиент написал в форме.

Менеджер получает push, открывает сделку и в «Диалогах» видит текст заявки. Позвонить или написать клиенту он может как обычно. Если форма сама не умеет отправлять такие поля, поставьте между ней и ЧБТ сервис автоматизации: он примет данные формы и отправит их в нужном виде.

Как проверить вебхук

Тест-чат редактора здесь не поможет: «Проверить сценарий» имитирует переписку, а вебхук приходит извне. Проверяйте настоящим запросом:

  1. Отправьте запрос из примера выше — из терминала, Postman или тестового режима вашей системы.
  2. Ответ {"ok":true} — сценарий запущен. Ответы с ошибкой подскажут причину: 401 — секрет, 404 no_trigger — путь не совпал или сценарий выключен, 404 no web channel — нет чата на сайте, 400 — неверный адрес.
  3. Откройте «Контакты»: появился контакт с переданным именем, а у него — тег из ветки.
  4. Загляните в «CRM» и «Диалоги»: сделка и текст события на месте.

Используйте для проверки отдельный uid, например test-1, чтобы потом легко найти и удалить тестовый контакт.

Входящий вебхук, API и подписки — что выбрать

ЗадачаИнструмент
Событие в вашей системе должно запустить действия в ЧБТ: сделку, тег, уведомлениеТриггер «Входящий webhook»
Бот должен отправить данные клиента во внешнюю системуДействие «HTTP-запрос» — подробно в статье про HTTP-запрос из бота; для amoCRM и GetCourse есть готовые интеграции на событие «Заявка»
Внешняя система должна узнавать о сообщениях и диалогах«Подписки на события» в разделе интеграций
Внешняя система должна ответить клиенту в уже начатый диалогAPI ЧБТ с токеном из «Подключения по API»

Инструменты сочетаются: например, вебхук заводит заявку с сайта, а «HTTP-запрос» в той же ветке пересылает её в учётную систему.

Частые ошибки

  • Ждут сообщения клиенту в Telegram. Вебхук сценарий запускает, но клиенту в мессенджер не пишет. Для этого нужен его начатый диалог и ответ оператора или API.
  • Передают данные отдельными полями. phone, city, comment в теле ЧБТ не разберёт — объединяйте нужное в text, а для контакта используйте uid и name.
  • Нет uid. Каждый запрос создаёт новый контакт — и на Бесплатном тратит диалог месяца.
  • Сменили секрет и забыли про систему. После «Сгенерировать» старый адрес перестаёт работать — обновите его там, откуда идут запросы.
  • Отключили чат на сайте. Вебхуку нужен канал виджета, без него запросы получают 404.

Ещё в блоге