События
Сценарии в 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 | Классификатор не распознал в запросе пользователя ни один интент с достаточной степенью уверенности. |
match
не актуально, а вместо event!: noMatch
используется паттерн q!: *
.События ограничений запроса
Событие | Описание |
---|---|
lengthLimit | Превышено ограничение на длину запроса пользователя. |
timeLimit | Превышено ограничение на время обработки запроса. |
nluSystemLimit | Превышено одно из системных ограничений:
chatbot.yaml , но можно отследить его в сценарии. |
События переполнения $session и $client
Событие | Описание |
---|---|
sessionDataSoftLimitExceeded | Достигнуто мягкое ограничение на объем данных в $session . |
sessionDataHardLimitExceeded | Достигнуто жесткое ограничение на объем данных в $session . |
clientDataSoftLimitExceeded | Достигнуто мягкое ограничение на объем данных в $client . |
clientDataHardLimitExceeded | Достигнуто жесткое ограничение на объем данных в $client . |
События отправки SMS
Событие | Описание |
---|---|
smsSuccessEvent | SMS-сообщение было успешно отправлено получателю. |
smsFailedEvent | SMS-сообщение не было отправлено получателю. |
События аккаунта
Событие | Описание |
---|---|
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 | Платеж не прошел, или возникла ошибка из-за того, что неправильно заполнены параметры формы оплаты. |
telegramPrecheckoutEvent | Telegram сделал проверку наличия товара. |
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 | Абонент сделал попытку перебить бота в режиме перебивания по условию. |