Встроенные переменные
Часть данных код получает без вызова функций — в готовых переменных 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 — цена букета, и код складывает цены всех найденных строк.