Перейти к основному содержимому

События

Сценарии в JAICP поддерживают два способа взаимодействия с ботом:

  • Запросы — сообщения, которые пользователь отправляет боту текстом или голосом. Их обрабатывает движок понимания естественного языка (NLU), после чего бот переходит в подходящий стейт и выполняет его реакции.
  • События — действия, которые происходят в сценарии бота, в аккаунте JAICP или в канале, который подключен к проекту. В обработке событий не участвует NLU. Если бот может попасть в стейт, который ожидает событие, он сразу переходит в стейт и выполняет реакции.

События могут иметь произвольную природу, например:

  • Когда пользователь отправляет в чат файл, канал отправляет событие о получении файла.
  • Сам движок NLU генерирует событие, если он не смог распознать запрос.
  • Внешний сервис при помощи события может оповестить бота, что пользователь вошел в аккаунт.

Типы событий

Системные события

Системные события по умолчанию доступны во всех сценариях JAICP. Подробнее о доступных событиях вы можете узнать в справочнике системных событий.

Пользовательские события

Разработчик может предусмотреть в сценарии обработку событий с произвольными именами. Такие события обычно используются для интеграции бота во внешние сервисы, например чат-приложения или CRM.

  • Если бот подключен к каналу Chat API, внешний сервис может отправить в чат произвольное событие с помощью методов /chatapi/{token} и /chatapi/{token}/async.
  • Встроенный сервис $pushgate позволяет создавать из сценария события по расписанию, а также пушбэки — специальные сущности для обработки событий через Pushgate API.
  • Пользовательские события также можно использовать в сценарии, чтобы активировать бота при запуске текстовых рассылок.

Использование в сценарии

Чтобы задать событие, по которому диалог может перейти в стейт, используйте глобальный тег event! или локальный тег event. После тега указывается название события.

state: NoMatch
event!: noMatch
a: Извините, я вас не понял. Попробуйте переформулировать вопрос.

state: InnerNoMatch
event: noMatch
a: К сожалению, я опять не смог вас понять. Перевожу запрос на оператора.

Некоторые события могут иметь вложенные данные. Их можно получить в стейте, который сработал по событию, через объект $request одним из способов:

  • $request.data.eventData
  • $request.rawRequest.eventData
подсказка
Набор данных зависит от типа события. Например, данные по событию stickerEvent содержат метаданные стикера: размер, наличие анимации, соответствующий эмодзи и другую информацию.
Пример значения $request.data.eventData
{
"file_id": "CAACAgIAAxkBAAIEEmHxVulVK5-ctf22Mes9jGXRBVTdAAIdFwACKyEFAAHPqSzw8fRaOyME",
"file_unique_id": "AgADHRcAAishBQAB",
"width": 512,
"height": 512,
"is_animated": false,
"thumb": {
"file_id": "AAMCAgADGQEAAgQSYfFW6VUrn5y1_bYx6z2MZdEFVN0AAh0XAAIrIQUAAc-pLPDx9Fo7AQAHbQADIwQ",
"file_unique_id": "AQADHRcAAishBQABcg",
"width": 128,
"height": 128,
"file_size": 2436
},
"emoji": "😭",
"set_name": "madl4bor",
"file_size": 30934
}

Справочник системных событий

События NLU

СобытиеОписание
matchКлассификатор распознал запрос пользователя, но бот не смог перейти ни в какой стейт сценария по интенту с наибольшим весом.
noMatchКлассификатор не распознал в запросе пользователя ни один интент или паттерн с достаточной степенью уверенности.
подсказка
События NLU работают только на второй версии диалогового движка. На первой версии событие match не актуально, а вместо event!: noMatch используется паттерн q!: *.

События ограничений запроса

СобытиеОписание
lengthLimitПревышено ограничение на длину запроса пользователя.
timeLimitПревышено ограничение на время обработки запроса.
nluSystemLimit

Превышено одно из системных ограничений:

  • Лимит на число элементов во фразе после токенизации.
  • Лимит на количество распознанных сущностей во фразе.
  • Лимит на расход памяти при распознавании паттерна.

Это событие нельзя настроить в конфигурационном файле chatbot.yaml, но можно отследить его в сценарии.

События переполнения $session и $client

СобытиеОписание
sessionDataSoftLimitExceededДостигнуто мягкое ограничение на объем данных в $session.
sessionDataHardLimitExceededДостигнуто жесткое ограничение на объем данных в $session.
clientDataSoftLimitExceededДостигнуто мягкое ограничение на объем данных в $client.
clientDataHardLimitExceededДостигнуто жесткое ограничение на объем данных в $client.

События отправки SMS

СобытиеОписание
smsSuccessEventSMS-сообщение было успешно отправлено получателю.
smsFailedEventSMS-сообщение не было отправлено получателю.

События аккаунта

СобытиеОписание
tariffBlockedАккаунт JAICP заблокирован за неуплату.

События входящих каналов

СобытиеОписание
fileEventПользователь отправил боту файл.
fileTooBigEventПользователь отправил файл размером выше 50 Мбайт.
подсказка
События fileEvent и fileTooBigEvent поддерживаются во всех входящих каналах, кроме Jivo, Zendesk и Zendesk Chat. В чат-виджете поддерживается только событие fileEvent.

Битрикс24

СобытиеОписание
CRM_SUCCESS_EVENTСобытие CRM Битрикс24 обновлено.
CRM_FAILED_EVENTСобытие CRM Битрикс24 не обновлено.
ONAPPINSTALLПриложение установлено.
ONAPPUPDATEПриложение обновлено.
ONIMBOTMESSAGEADDБот получил сообщение.
ONIMBOTMESSAGEUPDATEБот обновил сообщение.
ONIMBOTMESSAGEDELETEБот удалил сообщение.
ONIMCOMMANDADDБот получил команду.
ONIMJOINCHATБот получил информацию о том, что он добавлен в чат.
ONIMBOTDELETEБот удален.

edna WhatsApp 2.0

СобытиеОписание
locationEventПользователь отправил локацию.

Microsoft Teams

СобытиеОписание
acceptFileПользователь согласился принять файл.
declineFileПользователь отказался принять файл.

Telegram

СобытиеОписание
stickerEventПользователь отправил стикер.
telegramSendContactПользователь отправил контакт.
telegramSendLocationПользователь отправил локацию.
telegramApiRequestFailedНе удалось получить файл, который отправил пользователь.
telegramCallbackQueryПользователь нажал на инлайн-кнопку с параметром callback_data. Его значение доступно как $request.rawRequest.callback_query.data.
telegramPaymentSuccessEventПользователь совершил успешный платеж.
telegramPaymentFailedEventПлатеж не прошел, или возникла ошибка из-за того, что неправильно заполнены параметры формы оплаты.
telegramPrecheckoutEventTelegram сделал проверку наличия товара.
подсказка
События telegramPaymentSuccessEvent, telegramPaymentFailedEvent и telegramPrecheckoutEvent нужно обрабатывать, только если вы настраиваете оплату в Telegram через тип ответа telegramPayment. Если вы используете тег действия TelegramPayment, то обработка этих событий уже встроена в него.

Viber

СобытиеОписание
viberSendLocationПользователь отправил локацию.
viberSendStickerПользователь отправил стикер.
viberSendContactПользователь отправил контакт.
viberUnsubscribeПользователь отписался от бота. Бот не может посылать новые сообщения.
conversationStartedБот отправил приветственное сообщение до начала сессии.
предупреждение
При использовании события conversationStarted возможно расхождение количества уникальных пользователей на странице Управление аккаунтом с данными, которые есть у аккаунт-менеджера. Для получения актуальной информации обратитесь к аккаунт-менеджеру.

Vonage

Когда в канал Vonage WhatsApp приходит любое нетекстовое сообщение, в сценарий отправляется событие с названием его типа, например event: audio. В eventData передаются все данные запроса от канала.

WeChat

СобытиеОписание
weChatSendLocationПользователь отправил локацию.
weChatAnyMessageНе удалось распознать тип сообщения от пользователя.

События операторских каналов

СобытиеОписание
livechatFinishedОператор закрыл чат с пользователем.
noLivechatOperatorsOnlineВсе операторы оффлайн.

События телефонии

СобытиеОписание
speechNotRecognizedБот не смог распознать речь абонента в течение 5 секунд.
hangupАбонент завершил звонок.
botHangupБот завершил звонок при помощи метода $dialer.hangUp.
transferЗвонок переведен на оператора.
noDtmfAnswerEventАбонент не ввел DTMF-сообщение в тональном наборе.
onCallNotConnectedБот не смог дозвониться до абонента.
bargeInIntentАбонент сделал попытку перебить бота в режиме перебивания по условию.
speechInvalidБот не смог синтезировать речь или воспроизвести аудиофайл. Используйте для обработки ошибок синтеза и воспроизведения.