Событие диалога (event)
Каждое сообщение клиента превращается в событие event, которое проходит через NLU, хуки, звенья и переходы. Условия переходов и действия читают из него данные. Ниже поля, которые нужны на практике.
Сообщение
| Поле | Что содержит | Пример |
|---|---|---|
event.preview | Текст сообщения как строка; для кнопки название кнопки | 'Проверить баланс' |
event.type | Тип сообщения: text, quick_reply (кнопка меню), postback (кнопка карточки), file, image, session_reset и другие | 'quick_reply' |
event.payload | Содержимое по типу: для текста { type, text }, для кнопки { type, text, payload }, где payload значение кнопки в верхнем регистре; для файла ссылка и имя | event.payload.payload === 'BALANCE' |
event.channel | Канал: api для iQChannels и Converse API, web для эмулятора и веб-чата | |
event.target | Идентификатор клиента в канале (из iQChannels приходит идентификатор обращения клиента) | |
event.botId | Идентификатор бота | |
event.id | Идентификатор события; нужен действию «Отправить оценку» (temp.eventId) |
Кнопки меню приходят как quick_reply с названием в text и значением в payload; набранный вручную текст приходит как text. Условие «Если нажата кнопка» конструктора переходов учитывает оба случая.
Понимание языка
| Поле | Что содержит |
|---|---|
event.nlu.intent.name, event.nlu.intent.confidence | Лучшее намерение и уверенность (0–1). none, если ничего не подошло |
event.nlu.intents | Все кандидаты с уверенностью |
event.nlu.entities | Извлечённые сущности: name, type, data.value |
event.nlu.slots | Заполненные слоты намерения: event.nlu.slots.<слот>.value |
event.nlu.language | Язык, на котором распознавалась фраза; event.nlu.detectedLanguage определённый язык текста |
event.nlu.includedContexts | Контексты, в которых искалось намерение |
Условие по намерению из конструктора: event.nlu.intent.name === 'вопрос по кредиту' && event.nlu.intent.confidence >= 0.6.
Состояние
| Поле | Что содержит |
|---|---|
event.state.temp, event.state.session, event.state.user, event.state.bot | Переменные диалога, см. «Переменные и память диалога». В условиях и действиях доступны короткие имена temp, session, user, bot |
event.state.context.currentFlow, currentNode | Где сейчас клиент (служебное) |
event.state.session.lastMessages | Последние реплики: кто сказал, откуда ответ (replySource), уверенность |
Решение платформы
| Поле | Что содержит |
|---|---|
event.suggestions | Кандидаты на ответ: ответы QnA с уверенностью, предложения модулей; у каждого decision.status (elected, dropped) и причина |
event.decision | Что выбрано: источник (qna, decisionEngine) и подробности |
Эти поля показывает «Панель отладки» Studio: откройте вкладку «Отладчик», выберите сообщение в эмуляторе и увидите намерение, сущности, кандидатов и причину решения. Так удобно проверять условия перед тем, как вписывать их в переходы.
В действии
const text = event.preview // что написал клиент
const amount = event.nlu.slots.amount?.value
if (event.type === 'quick_reply') {
temp.choice = event.payload.payload // значение кнопки
}
await iqbot.events.replyToEvent(event, [{ type: 'text', text: `Вы написали: ${text}` }])
Поля event.nlu, event.suggestions и event.decision только для чтения; менять можно event.state.* и, в хуках before_incoming_middleware, сам event.payload (например, чтобы нормализовать текст).