Skip to content

📡 Гайд по событиям системы

Полное описание всех полей, доступных в событиях после парсинга через EventParser.

📋 Содержание

Типы событий

Система поддерживает следующие типы событий:

Тип событияОписаниеКогда возникает
messageОбычное сообщение от пользователяПользователь отправляет текстовое сообщение или медиа
callbackНажатие на инлайн-кнопкуПользователь нажимает на кнопку в сообщении
member_joinedВступление участника в группуПользователь вступает в группу или супергруппу
member_leftВыход участника из группыПользователь покидает группу или супергруппу
pre_checkout_queryЗапрос на подтверждение оплатыПользователь нажимает "Оплатить" в инвойсе, но до обработки платежа
payment_successfulУспешная оплатаПлатеж через инвойс успешно обработан

Общие поля

Эти поля доступны во всех типах событий. Все эти поля приходят изначально при получении события и содержат исходные данные, которые сформировали событие.

ℹ️ Важно: Эти атрибуты — это исходная информация о событии, переданная из источника (например, Telegram). Они используются системой как значения по умолчанию для действий (например, chat_id и message_id берутся из события, если не указаны явно в параметрах действия).

⚠️ Ограничение для scheduled сценариев: В сценариях, запущенных по расписанию (с полем schedule), большинство общих полей недоступны, так как событие не связано с пользователем или чатом. Доступны только системные поля (bot_id, tenant_id) и специальные поля scheduled сценариев (см. раздел Поля scheduled сценариев).

ПолеТипОписаниеПример
event_sourcestringИсточник события"telegram"
event_typestringТип события"message", "callback", "member_joined", "member_left", "pre_checkout_query", "payment_successful"
user_idintegerID пользователя, который инициировал событие123456789
chat_idintegerID чата, из которого пришло событие-1001234567890
chat_typestringТип чата"private", "group", "supergroup", "channel"
is_groupbooleanЯвляется ли чат группой или супергруппойtrue для group и supergroup, false для private и channel
message_idintegerID исходного сообщения, которое привело к событию. Для событий типа message — это ID текстового сообщения, для callback — ID сообщения с кнопкой, на которую был нажат callback1234
event_datestringДата события (ISO)"2024-01-15T10:30:45+03:00"
usernamestringUsername пользователя"john_doe" (может быть null)
first_namestringИмя пользователя"John"
last_namestringФамилия пользователя"Doe" (может быть null)
language_codestringКод языка пользователя"ru", "en" (может быть null)
is_botbooleanЯвляется ли пользователь ботомfalse
is_premiumbooleanПремиум пользовательtrue
chat_titlestringНазвание чата"Моя группа" (может быть null)
chat_usernamestringUsername чата"my_group" (может быть null)
user_statestringСостояние пользователя"feedback", "onboarding" (может быть null)
user_state_expired_atstringВремя истечения состояния (ISO)"3000-01-01T00:00:00+00:00" (может быть null)

🔧 Служебные поля

Система автоматически добавляет следующие служебные поля для корректной работы действий:

ПолеТипОписаниеНазначение
bot_idintegerID ботаОбязательно для отправки сообщений и выполнения действий
tenant_idintegerID тенантаОбязательно для загрузки сценариев и определения контекста
polling_start_timestringВремя запуска пуллинга бота (ISO)Служебное для фильтрации событий по времени
last_errorstringТекст последней ошибки действияСлужебное для передачи ошибок между шагами сценария
last_resultstringРезультат последнего выполненного действияСлужебное для отладки и проверки результата действия между шагами сценария
scenario_chainarrayЦепочка сценариев в порядке их вызоваСлужебное для отладки и логирования, содержит массив названий сценариев в порядке выполнения

⚠️ Важно: Следующие поля добавляются автоматически:

  • Обязательные поля (bot_id, tenant_id) — требуются для выполнения действий (отправка сообщений, работа с БД, управление состояниями)
    • ℹ️ В scheduled сценариях: Поля bot_id и tenant_id доступны автоматически и не требуют явного указания в параметрах действий. Они автоматически подставляются из контекста синтетического события
  • Служебные поля (polling_start_time, last_error, last_result, scenario_chain) — используются системой для внутренней логики:
    • polling_start_time — фильтрация событий по времени
    • last_error — сохранение текста ошибки действия для последующих шагов сценария
    • last_result — сохранение результата выполнения действия (например, success, error, timeout, not_found) для отладки и проверки в последующих шагах сценария
    • scenario_chain — массив названий сценариев в порядке их вызова, автоматически обновляется при запуске каждого сценария и при переходах (jump_to_scenario). Текущий сценарий доступен как scenario_chain[-1], предыдущий — как scenario_chain[-2] (если есть). Используется для отладки и логирования потока выполнения
  • Поля состояний (user_state, user_state_expired_at) — могут быть null, если состояние не установлено или истекло

Поля scheduled сценариев

Дополнительные поля для сценариев, запущенных по расписанию:

ПолеТипОписаниеПример
scheduled_atstringВремя запуска scheduled сценария (ISO)"2024-01-15T10:30:00+03:00"
scheduled_scenario_idintegerID scheduled сценария в базе данных123
scheduled_scenario_namestringНазвание scheduled сценария"daily_report"

ℹ️ Важно: Эти поля доступны только в scheduled сценариях (с полем schedule в конфигурации). В обычных сценариях, запущенных по событиям, эти поля отсутствуют.

⚠️ Ограничение: В scheduled сценариях большинство общих полей (например, user_id, chat_id, event_text, message_id и др.) недоступны, так как событие не связано с пользователем или чатом. Для отправки сообщений используйте параметр target_chat_id в действиях.

Поля сообщений

Дополнительные поля для событий типа message:

ПолеТипОписаниеПример
event_textstringТекст сообщения"Привет! Как дела?"
media_group_idstringID медиагруппы"1234567890123456789" (может быть null)
event_attachmentarrayВложения[{"type": "photo", "file_id": "AgACAgIAAxkBAAIB..."}]
inline_keyboardarrayInline-клавиатура сообщения[[{"Кнопка 1": "action_1"}]] (может быть null)
is_replybooleanОтвет на сообщениеtrue
is_forwardbooleanПересланное сообщениеfalse

Поля ответных сообщений

ПолеТипОписаниеПример
reply_message_idintegerID ответного сообщения1233
reply_message_textstringТекст ответного сообщения"Как дела?"
reply_user_idintegerID автора ответного сообщения123456789
reply_usernamestringUsername автора ответного сообщения"jane_doe"
reply_first_namestringИмя автора ответного сообщения"Jane"
reply_last_namestringФамилия автора ответного сообщения"Smith"
reply_datestringДата ответного сообщения (ISO)"2024-01-15T10:25:30+03:00"
reply_attachmentarrayВложения ответного сообщения[{"type": "document", "file_id": "BQACAgIAAxkBAAIB..."}]

Поля пересланных сообщений

ПолеТипОписаниеПример
forward_message_idintegerID пересланного сообщения5678
forward_from_user_idintegerID автора пересланного сообщения987654321
forward_from_user_usernamestringUsername автора пересланного сообщения"original_author"
forward_from_user_first_namestringИмя автора пересланного сообщения"Original"
forward_from_user_last_namestringФамилия автора пересланного сообщения"Author"
forward_from_chat_idintegerID чата пересланного сообщения-1009876543210
forward_from_chat_titlestringНазвание чата пересланного сообщения"Исходная группа"
forward_from_chat_typestringТип чата пересланного сообщения"supergroup"
forward_datestringДата пересланного сообщения (ISO)"2024-01-15T09:15:20+03:00"

Поля callback

Дополнительные поля для событий типа callback:

ПолеТипОписаниеПример
callback_idstringID callback"1234567890123456789"
callback_datastringДанные callback"menu_main"
callback_message_textstringТекст исходного сообщения, к которому привязан callback (текст или подпись)"Выберите действие:" (может быть null)
inline_keyboardarrayInline-клавиатура сообщения, к которому привязан callback[[{"Кнопка 1": "action_1"}]] (может быть null)

События платежей

События, связанные с оплатой через Telegram инвойсы.

Поля pre_checkout_query

Событие pre_checkout_query возникает, когда пользователь нажимает кнопку "Оплатить" в инвойсе, но до обработки платежа. Это запрос на подтверждение оплаты от Telegram к боту.

ℹ️ Важно: На это событие нужно ответить через действие answer_pre_checkout_query для подтверждения или отклонения платежа. Если не ответить в течение 10 секунд, платеж будет автоматически отклонен.

ПолеТипОписаниеПример
pre_checkout_query_idstringID запроса на подтверждение оплаты"1234567890123456789"
invoice_payloadstringID инвойса (payload, который был передан при создании)"123"
currencystringВалюта платежа"XTR" (Telegram Stars)
total_amountintegerОбщая сумма платежа в минимальных единицах валюты100 (100 звезд)

Дополнительно: Событие содержит общие поля (см. раздел Общие поля).

Поля payment_successful

Событие payment_successful возникает после успешной обработки платежа через инвойс.

ПолеТипОписаниеПример
invoice_payloadstringID инвойса (payload, который был передан при создании)"123"
currencystringВалюта платежа"XTR" (Telegram Stars)
total_amountintegerОбщая сумма платежа в минимальных единицах валюты100 (100 звезд)
telegram_payment_charge_idstringID платежа в Telegram"1234567890"

Дополнительно: Событие содержит общие поля (см. раздел Общие поля).

События участников

События типа member_joined и member_left используют стандартные общие поля (см. раздел Общие поля).

ℹ️ Важно:

  • Событие member_joined возникает при вступлении пользователя в группу (переход из статуса left, kicked или первого вступления)
  • Событие member_left возникает при выходе пользователя из группы (переход в статус left или kicked)
  • Эти события доступны только для групп и супергрупп

Поля вложений

Структура объектов в массиве event_attachment и reply_attachment:

Типы вложений

ТипОписаниеПримечание
photoФотографияСамое большое разрешение из доступных
documentДокументЛюбой файл (PDF, DOC, ZIP и т.д.)
videoВидеоВидеофайл
audioАудиоАудиофайл
voiceГолосовое сообщениеГолосовое сообщение
stickerСтикерTelegram стикер
animationАнимацияGIF анимация
video_noteВидео заметкаКруглое видео сообщение

Структура объекта вложения

ПолеТипОписаниеПример
typestringТип вложения"photo"
file_idstringID файла"AgACAgIAAxkBAAIB..."

Пример структуры вложения

json
{
  "type": "photo",
  "file_id": "AgACAgIAAxkBAAIB..."
}

Примеры использования

Как использовать поля событий в сценариях:

Простые условия

yaml
# Проверка типа события
trigger:
  - event_type: "message"

# Проверка текста сообщения
trigger:
  - event_type: "message"
    event_text: "/start"

# Проверка callback данных
trigger:
  - event_type: "callback"
    callback_data: "menu_main"

# Проверка состояния пользователя
trigger:
  - event_type: "message"
    user_state: "feedback"

Сложные условия

yaml
# Проверка пользователя и чата
trigger:
  - event_type: "message"
    condition: |
      $user_id == 123456789 and
      $chat_type == "private" and
      $event_text ~ "привет"

# Проверка вложений
trigger:
  - event_type: "message"
    condition: |
      $event_attachment[0].type == "photo"

# Проверка ответного сообщения
trigger:
  - event_type: "message"
    condition: |
      $is_reply == true and
      $reply_user_id == 987654321

Использование в параметрах действий

yaml
# Отправка сообщения в тот же чат
- action: "send_message"
  params:
    bot_id: "{bot_id}"
    chat_id: "{chat_id}"
    text: "Привет, {first_name}!"

# Ответ на сообщение
- action: "send_message"
  params:
    bot_id: "{bot_id}"
    chat_id: "{chat_id}"
    text: "Получил ваше сообщение!"
    message_reply: "{message_id}"

# Управление состоянием пользователя
- action: "set_user_state"
  params:
    state: "feedback"
    expires_in_seconds: 3600

Coreness — Create. Automate. Scale.