Вбудовані змінні
Частину даних код отримує без виклику функцій — у готових змінних JavaScript. Набір залежить від блоку, у якому виконується код.
Дані контакту
В усіх блоках, крім «Вхідного Webhook», дані контакту, для якого виконується код, доступні одразу. У «Вхідному Webhook» вони з'являються після того, як код знайде контакт функцією вибору контакту.
| Змінна | Що в ній |
|---|---|
id |
ID контакту на платформі |
bot_id |
ID бота |
name |
Ім'я контакту повністю |
first_name |
Перше слово імені |
last_name |
Друге слово імені |
phone |
Телефон |
email |
Пошта |
address |
Адреса |
username |
Ім'я користувача в месенджері: @flower_lover у Telegram і MAX, id123456 у ВКонтакте |
telegram_id |
ID людини в Telegram |
max_id |
ID людини в MAX |
created_at |
Коли контакт з'явився в бота, у вигляді 2026-01-31 12:00:00 (UTC) |
Значення — рядки, зокрема id і bot_id. У «Вхідному Webhook» id і bot_id надходять числами, тому для порівняння зводьте їх до одного вигляду: Number(id) === 12345.
Якщо в контакту чогось немає — наприклад, телефону, — змінної не буде зовсім, і звернення до неї зупинить код із помилкою ReferenceError. Перевіряйте такі змінні через typeof:
if (typeof phone !== 'undefined') {
setContactVariable('телефон_для_доставки', phone);
} else {
sendMessage('Залиште, будь ласка, телефон для кур\'єра.');
}
У «Вхідному Webhook» після вибору контакту є ще кілька змінних — теж лише якщо в контакту є значення:
| Змінна | Що в ній |
|---|---|
start_message |
Перше повідомлення, яке контакт надіслав боту |
amocrm_lead_id, amocrm_contact_id |
ID угоди й контакту в amoCRM |
bitrix_lead_id, bitrix_deal_id, bitrix_contact_id |
ID ліда, угоди й контакту в Бітрікс24 |
Змінні контакту й глобальні змінні бота готовими змінними не надходять — їх читають функціями getContactVariable і getGlobalVariable.
Відповідь сервера
У коді блоку «HTTP-запит» відповідь сервера лежить в об'єкті response:
| Поле | Що в ньому |
|---|---|
response.status |
Код відповіді, число: 200, 404 і так далі |
response.body |
Тіло відповіді рядком, як воно надійшло |
response.data |
Тіло відповіді, розібране як JSON. Якщо відповідь не у форматі JSON, тут порожній об'єкт {} |
Код запускається, лише коли сервер відповів. Якщо відповіді немає — сервер не відповів за час із поля «Timeout» або з'єднання не встановилося, — блок іде виходом «Нема відповіді», і код не виконується. Відповідь із кодом помилки, наприклад 500, — звичайна відповідь: код виконається, перевірте response.status самі.
Код виконується після решти налаштувань блоку: змінні з «Записати відповідь json у змінні» на цей час уже записано.
if (response.status !== 200) {
sendMessage('Служба доставки зараз недоступна, спробуйте пізніше.');
disableContinue();
} else if (response.data.slots && response.data.slots.length > 0) {
setContactVariable('найближча_доставка', response.data.slots[0].time);
} else {
sendMessage('На сьогодні вільних вікон доставки немає.');
}
Вхідний запит
У коді блоку «Вхідний Webhook» запит, що надійшов, лежить в об'єкті request:
| Поле | Що в ньому |
|---|---|
request.query |
Параметри з рядка запиту. Значення — рядки |
request.headers |
Заголовки запиту. Імена — малими літерами: request.headers['content-type'] |
request.body |
Тіло запиту рядком, як воно надійшло |
request.data |
Усі параметри запиту разом: з рядка запиту, з форми й з тіла у форматі JSON. Числа й логічні значення з JSON лишаються числами й true/false |
Якщо в запиті немає параметрів, request.query — порожній об'єкт. Звертайтеся до вкладених полів із перевіркою, щоб код не зупинився на undefined:
var order = request.data.order;
if (order && order.contact_id && setContactById(order.contact_id)) {
setContactVariable('номер_замовлення', String(order.id));
sendMessage('Замовлення №' + order.id + ' зібрано й передано кур\'єрові.');
}
Якщо відправник підписує запити, підпис можна перевірити функцією hash_hmac — за request.body і заголовком із підписом.
Рядки таблиці
У коді блоку «Читання записів з Google Таблиці» знайдені рядки лежать у sheet.data — масиві рядків, де кожен рядок — масив клітинок.
- У
sheet.dataлише рядки, що пройшли фільтри блоку, і не більше, ніж зазначено в «Кількість записів в повідомленні». - Клітинки — рядки. Перша клітинка масиву — стовпець
A. - Блок завантажує стовпці до найправішого з тих, що згадані в його налаштуваннях. Щоб коду дісталися й інші стовпці, викличте на початку коду
setColumnRange("A:F")з потрібним діапазоном — блок прочитає цей виклик до запиту до таблиці. Порожніх клітинок наприкінці рядка Google не надсилає, тому довжина рядків може різнитися. - Якщо рядків не знайшлося, код не виконується: блок іде виходом «Записи не знайдено».
setColumnRange("A:C");
var rows = sheet.data;
var total = 0;
for (var i = 0; i < rows.length; i++) {
total += Number(rows[i][2] || 0);
}
setContactVariable('сума_замовлення', total);
Тут у стовпці C — ціна букета, і код складає ціни всіх знайдених рядків.