Входящий Webhook
Блок принимает запрос от стороннего сервиса и выполняет ваш код на JavaScript. Так сценарий можно продолжить по событию снаружи: пришла оплата, изменился статус заказа, сработал датчик.


В этот блок не ведут связи из других блоков: он запускается только запросом.
Настройки
- «URL для запросов» — адрес, который нужно вызвать. Он выдаётся блоку при создании и выглядит так:
https://api.<домен платформы>/hook/<ID блока>:<секретный ключ>. Подходит любой метод —GET,POSTи другие. - «Код JavaScript для обработки запроса» — код, который выполняется на каждый запрос, до 16 384 символов.
Внимание
Адрес содержит секретный ключ. Любой, кто знает адрес, может запустить ваш код — не публикуйте его.
Что приходит в код
Запрос лежит в объекте request:
| Поле | Что в нём |
|---|---|
request.query |
Параметры из строки запроса |
request.headers |
Заголовки запроса, имена — строчными буквами |
request.body |
Тело запроса строкой, как оно пришло |
request.data |
Все параметры запроса вместе: из строки запроса, формы и тела в формате JSON |
Подробнее о полях и о том, как проверить подпись запроса, — в разделе «Встроенные переменные».
Запрос приходит не от человека, поэтому код сам должен указать, для какого контакта он выполняется. Для этого есть функции:
| Функция | Как ищет контакта |
|---|---|
setContactById(id) |
По ID контакта на платформе |
setContactByTelegramId(id) |
По ID человека в Telegram |
setContactByMaxId(id) |
По ID человека в MAX |
setContactByVkId(id) |
По ID человека во ВКонтакте |
setContactByViberId(id) |
По ID человека в Viber |
Подробнее о каждой функции — на странице «Выбор контакта».
Функция возвращает true, если контакт найден среди контактов этого бота, и false, если нет. Вызвать такую функцию можно один раз за запрос. Хотя бы одна из них обязана быть в коде — иначе блок ответит ошибкой и код не запустится.
После того как контакт найден, коду доступны его данные (id, name, phone и остальные) и все функции блока «Интерпретатор JavaScript»: переменные, теги, sendMessage, goToBlock, disableContinue.
var contactId = request.query.contact_id;
if (setContactById(contactId)) {
setContactVariable('статус_заказа', request.data.status);
sendMessage('Статус вашего заказа изменился.');
}
Чтобы внешний сервис знал ID контакта, передайте его заранее — например, блоком «HTTP-запрос» с автоподстановкой {{ id }}.
Важно
Если контакт не найден, код выполнится, но ничего не сохранит: переменные, теги и глобальные переменные не запишутся, сообщения не уйдут, связь «Продолжить» не сработает.
Выходы
- «Продолжить» — срабатывает после выполнения кода, если контакт найден и код не вызвал
disableContinue().
Что блок отвечает
Ответ — JSON с полями status (ok или error), message и return_value — значением последнего выражения в коде.
| Код ответа | Когда |
|---|---|
200 |
Код выполнен. Если контакт не найден, в message будет Code executed without setting contact |
404 |
Неправильный адрес: нет такого блока или не подходит ключ |
422 |
Ошибка в коде, поле кода пустое, в коде нет функции поиска контакта или у владельца бота нет Pro |
429 |
Слишком много запросов |
Каждый запрос и ответ на него записываются в «Лог выполнения» блока.


Ограничения
- Блок работает, только пока у владельца бота действует Pro. Подробнее — что доступно без Pro.
- Не более 30 запросов за 10 секунд на одного бота — на все его блоки «Входящий Webhook» вместе — и не более 180 запросов в минуту с одного IP-адреса.
- На код действуют те же ограничения, что в блоке «Интерпретатор JavaScript»: ES5 и 5 секунд на выполнение.
Запросы от Telegram и MAX
Блок может получать всё, что мессенджер присылает вашему боту. В окне подключения Telegram или MAX включите переключатель «Ретранслировать запросы на блок "Входящий Webhook"» и в поле «Блок» выберите блок по ID или имени.
После этого каждое событие мессенджера сначала обрабатывает бот — как обычно, по сценарию, — а затем оно передаётся в код блока. Событие в том виде, в каком его прислал мессенджер, лежит в request.data.
Так можно реагировать на то, что сценарий сам не обрабатывает: сообщения в группах и каналах, добавление бота в чат. Запросы встроенного режима Telegram в блок не передаются.
var message = request.data.message;
if (message && message.from && setContactByTelegramId(message.from.id)) {
setContactTag('писал_в_группе');
disableContinue();
}
Такие события идут в счёт того же ограничения по числу запросов в минуту.