Спросить ИИ
Русский RU
Перейти в Watbot

Встроенные переменные

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