Структура контекста + JSON Path
JSON Path
Если в значении переменной находится JSON-массив или JSON-объект, то можно получить конкретное свойство этого объекта, просто дописав его путь к переменной через точку.
Например для такого объекта object со значением
{"users":[{"id":123,"name":"Киррил"},{"id":234,"name":"Кир"}],"club":123456}Значение идентификатора первого пользователя можно получить так:
{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 в Telegramvk_id- ID в VKphone- номер телефона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
Всё работает аналогично как и в действиях, только немного другой путь к переменным
Last updated