Вхідний 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();
}
Такі події йдуть у рахунок того самого обмеження за кількістю запитів на хвилину.