Структура контекста + JSON Path
Last updated
Last updated
Если в значении переменной находится JSON-массив или JSON-объект, то можно получить конкретное свойство этого объекта, просто дописав его путь к переменной через точку.
Например для такого объекта object
со значением
Значение идентификатора первого пользователя можно получить так:
{var:object.users[0].id}
Для поиска значений используется библиотека JMESPath: и .
Все JSON объекты, которые приведены ниже (и спрятаны под спойлерами), разобраны на примере события Входящее сообщение и запроса из Телеграм.
Самые важные данные события, для использования в схеме
Часто используемые переменные:
{var:object.id}
- ID объекта (сообщения, комментария и т. п.)
{var:object.text}
- текст события (например, текст сообщения)
{var:object.type}
- тип объекта. Например, есть такие типы:
message
- сообщение
comment
- комментарий
post
- пост
notice
- уведомление (в чате)
admin
- объект администратора чата (с правами)
invite_link
- пригласительная ссылка
{var:object.post.id}
- ID поста где произошло событие (например, пост комментария)
Обработанные данные входящих запросов
Часто используемые переменные :
{var:platform.short_name}
- мессенджер в котором произошло событие
{var:platform.contact.type}
- тип контакта, по которому событие ищет пользователя
{var:platform.integration.id}
- внешний ID бота (или аккаунта), с которым произошло событие
{var:platform.chat.id}
- текущий чат - в котором произошло событие
{var:platform.author.id}
- автор отвеченного сообщения - ID пользователя (на внешней платформе), который написал сообщение, на которое ответили.
Внутренние идентификаторы для локальных проверок
ID пользователя здесь - это ID пользователя в проектеЧасто используемые переменные :
{var:graph.item.id}
- ID текущей блок-схемы
{var:graph.integration.id}
- ID интеграции, которая запустила события
{var:platform.short_name}
- тип платформы интеграции (находится в объекте платформы)
{var:graph.project.id}
- ID проекта в котором была запущена схема
{var:graph.event.localId}
- Системный номер блока (#) события, которое запустило схему
{var:graph.restore.localId}
- Системный номер блока (#), который восстановил* схему
{var:graph.path}
- Путь пользователя по схеме в рамках ветки, в виде массива localId
. Учитываются все типы объектов схемы: порты, блоки, стрелки, контейнеры.
{var:graph.template.id}
- ID текущего шаблона
{var:template}
- все переменные текущего шаблона
* - Работа схемы останавливается например, когда пользователь попадает на входящий порт события. Этот момент можно назвать “началом ожидания события“. Когда событие наконец происходит, схема восстанавливается со всеми данными начиная с номера блока этого (промежуточного) события.
Пользователи сервиса, с которыми произошло событие (в рамках проекта).
ID пользователя здесь - это ID пользователя в проекте
Часто используемые переменные :
{var:users.user.id}
- ID пользователя в проекте
{var:users.user.first_name}
- Имя пользователя в проекте
{case:{var:users.user.appeal}|обращение на Вы|женщинам|мужчинам}
- разный текст в зависимости от пола пользователя (для многих мессенджеров, чтобы это заработало пол надо спросить у пользователя и сохранить в профиль)
{var:users.user.contact.tg_id[0]}
- первый контакт указанного типа
Типы контактов:
tg_id
- ID в Telegram
vk_id
- ID в VK
phone
- номер телефона
email
- электронный адрес
Внимание: Данные пользователя можно перезаписывать функциями бота. Но будьте внимательны, назад надо возвращать вручную, предварительно сохранив исходное значение.
Необработанные данные входящего запроса (события).
{var:request}
— оригинальный входящий запрос полностью.
Например, вам нужно достать имя отправителя.
Получится переменная:{var:request.message.from.first_name}
Или проверить купил ли он Телеграм премиум:{var:request.message.from.is_premium}
Каждое действие (в том числе сообщение и таймер) перезаписывает в контексте три переменных:
1) Успешно ли выполнилось действие:
{var:ok}
где:
ok = true
- нет ошибок, всё хорошо, можно работать дальше
ok = false
- есть ошибки, смотрите детали в {var:error.message}
В условиях рекомендуется проверять через «Числовую переменную» где true
это 1
а false
это 0
2) Полезная нагрузка действия:
{var:result}
Каждое действие выполняет какую-то операцию. И возвращает какие-то полезные данные. Возможно вы захотите использовать их, проверять в следующем блоке или сохранить их часть в собственные переменные для использования по всей схеме.
3) Важные данные из результата работы конкретного типа действия:
{var:effect}
Например, исходящее сообщение записывает сюда внешний идентификатор отправленного сообщения (в рамках платформы) для более удобного редактирования этого сообщения позже:
{var:effect.message.id}
4) Детали ошибки. Если ошибки не было, то {var:error}
будет равно None
{var:error}
При этом {var:error}
содержит различную системную информацию, из которой самое важное это сообщение с описанием проблемы.
{var:error.message}
Можно визуально выделить успешный результат выполнения действия при помощи этой комбинации литералов:
Пример готового текста сообщения для полного результата действия:
Второй пример результата, где ошибка показывается только если действие выполнено не успешно. Когда всё ОК, показывается только результат
Условия тоже имеют результат выполнения, но для удобства записывают его в отдельную переменную: {var:condition}
1) Условие отработало без ошибок:
2) Результат проверки условия. Возможные значения: true
, false
, null
, которые, собственно, и влияют на то, по какому выходу пойдет пользователь:
3) Детали ошибки, если ошибки есть. Если нет вернет undefined
Всё работает аналогично как и в действиях, только немного другой путь к переменным
Данные изнутри можно доставать через
Данные изнутри можно доставать через