HTTP-запрос: как отправить данные подписчика в CRM, n8n или на свой сервер
В конструкторе появилось действие «HTTP-запрос». Шаг сценария отправляет событие на ваш адрес — свой сервер, n8n, Make, Zapier или CRM. В событии — id подписчика в мессенджере, имя, username, телефон, email и все его заполненные переменные. Ответ сервера бот может сохранить в переменную, а дальше поведёт подписчика по ветке «при успехе» или «при ошибке». Работает в Telegram, MAX и ВКонтакте.
Зачем это нужно
- лид в CRM сразу после анкеты — с телефоном, ответами и id в мессенджере, без выгрузок;
- сценарий в n8n или Make — событие расходится дальше: в таблицу, чат команды, сервис рассылок;
- персональная ссылка от сервера — на оплату, личный кабинет или промокод: сервер возвращает её в ответе, бот показывает подписчику;
- проверка по вашей базе — есть ли такой клиент и какой у него статус, а дальше — условие;
- лид из MAX — с id пользователя и id чата с ботом, чтобы ваша система знала, кому в MAX принадлежит заявка.
Как настроить
- Откройте рубрику и добавьте действие «HTTP-запрос» — оно среди интеграций, рядом с Google Таблицами.
- Вставьте адрес (URL). Для n8n и Make это адрес вебхука из их сценария.
- Выберите метод: POST отправит JSON со всеми данными подписчика, GET — только адрес, без тела.
- По желанию задайте секрет для подписи — как её проверить, ниже.
- Если сервер что-то возвращает, выберите переменную для ответа и, если нужно, поле в JSON-ответе:
data.linkилиitems[0].url. Пустое поле — ответ сохранится целиком. - Укажите переходы «При успехе» и «При ошибке» и пройдите сценарий сами: событие придёт на ваш адрес с вашими данными.
Что придёт на сервер
POST-запрос несёт JSON такого вида — здесь подписчик бота MAX:
{
"event": "step",
"deliveryId": "9f1c…",
"time": "2026-10-27T18:00:00+03:00",
"bot": {"id": 7, "platform": "max", "username": "shopbot"},
"step": {"id": 11, "category": 5, "name": "В CRM"},
"user": {
"id": 42,
"platform": "max",
"platformId": "5550001",
"chatId": "-70001234",
"firstName": "Анна",
"username": "anna",
"phone": "+79990001122",
"email": "a@b.ru"
},
"variables": {"city": "Казань"}
}
user.id — id подписчика в BotBrother, platformId — его id в мессенджере: chat id в Telegram, id пользователя в MAX и ВКонтакте. chatId — id чата с ботом; у MAX это другое число, поэтому всегда приходят оба. В variables — заполненные переменные по их ключам. Если подписчик не делился телефоном или почтой, поля придут пустыми.
Для GET данные вставляются в адрес переменными: https://example.com/hook?id={{$SystemVar->userid}}. Значения экранируются сами — пробел или амперсанд в ответе подписчика адрес не сломают. Хост переменной быть не может: запрос уйдёт только туда, куда вы его направили.
Как проверить подпись
Каждый запрос несёт X-Webhook-Timestamp — время отправки этой попытки в секундах Unix (у каждого повтора своё). Если задан секрет, добавляется X-Webhook-Signature — sha256= и HMAC-SHA256 от строки «время + точка + данные», где данные — сырое тело для POST и путь с параметрами для GET. Проверка на Python:
import hashlib
import hmac
import time
SECRET = b"ваш-секрет"
def verify_signature(headers, payload: bytes) -> bool:
# payload — сырое тело POST-запроса, как пришло,
# или путь с параметрами для GET-запроса
ts = headers.get("X-Webhook-Timestamp", "")
sig = headers.get("X-Webhook-Signature", "")
# старше 5 минут — отклоняем: у каждой попытки своё время, дубли — по X-Webhook-Delivery
if not ts.isdigit() or abs(time.time() - int(ts)) > 300:
return False
msg = ts.encode() + b"." + payload
digest = hmac.new(SECRET, msg, hashlib.sha256).hexdigest()
return hmac.compare_digest("sha256=" + digest, sig)
Считайте подпись по телу в том виде, в каком оно пришло, — до разбора JSON. Сравнивайте через hmac.compare_digest, а не обычным равенством, и отклоняйте слишком старые запросы: так перехваченное событие не получится прислать ещё раз.
Повторы и дубли
Бот ждёт ответа до 10 секунд. Нет ответа (сбой сети, таймаут) или ответ 408, 429, 5xx — будут ещё две попытки, через 10 и 60 секунд, с тем же телом. Заголовок X-Webhook-Delivery и поле deliveryId во всех попытках одинаковые: сохраняйте их и не обрабатывайте одно событие дважды — на повтор просто ответьте 200. На ответ 4xx и перенаправление повторов нет: подписчик сразу пойдёт по ветке «при ошибке» (а если она не выбрана — к следующему действию). Событие, которое ждало отправки дольше суток — например, бот был остановлен, — не отправляется вовсе.
Пока бот ждёт ответа, подписчик стоит на этом шаге. Поэтому отвечайте быстро, а долгую работу — запись в несколько систем, генерацию документов — делайте уже после ответа.
Ответ в переменную
Любой ответ 2xx — успех. Для ответа ниже путь data.link запишет в переменную ссылку, и следующее «Сообщение» покажет её подписчику:
HTTP/1.1 200 OK
Content-Type: application/json
{"data": {"link": "https://example.com/pay/42"}}
В переменную сохраняется ответ до 64 КБ. Если ответ длиннее, не JSON при заданном пути или нужного поля в нём нет — сценарий пойдёт по ветке «при ошибке».
Ограничения
- адрес — http:// или https://, до 2000 символов, домены на кириллице (.рф) тоже; переменные — только в пути и параметрах;
- если переменная в пути адреса пуста, запрос не отправляется — сценарий идёт по ветке «при ошибке»;
- запросы на локальные, внутренние и частные адреса и служебные порты (SSH, почта, базы данных) заблокированы — адрес должен быть доступен из интернета;
- по перенаправлениям бот не ходит — указывайте конечный адрес;
- в событии — до 200 переменных, значение каждой — до 4000 символов;
- секрет после сохранения не показывается: его можно только заменить или убрать;
- настраивать действие могут сотрудники с доступом к разделу «Пользователи» или полным доступом — остальные видят только адрес сервера без пути.
Через нейросеть и MCP
Ассистент по MCP создаст и поправит «HTTP-запрос», как любое другое действие, — но только с ключом полного доступа. Действие решает, куда уходят данные подписчиков, поэтому ключу с ограниченными правами оно недоступно. Сохранённый секрет ассистент не видит, только маску.
Формат события, подпись и пределы собраны на странице «HTTP-запрос из бота». Остальные интеграции — на странице функций конструктора, а оповещения команды о заявках — в профилях оповещений. Для ботов MAX — подробнее на странице конструктора ботов MAX.
Решение в BotBrother
Без кода — или словами через нейросеть по MCP: рассылки, приём оплат, брони, управление каналами. 200 ₽ на баланс для старта.
Попробовать бесплатно