Разработчик смартапа может сам определить механизм срабатывания стейтов при совместном использовании интентов, паттернов и групп примеров.
Функция-обработчик в качестве параметра получает контекст ctx, содержащий поле nluResults. Объект nluResults содержит следующие поля:
patterns— массив результатов от паттерн-матчера;examples— массив р езультатов от примеров;intents— массив результатов от интентов;externalIntents— значение интента полученного из протокола от ассистента;selected— результат, выбранный по умолчанию.
Для изменения источника результата измените значение поля selected.
Пример
theme:/
init: //объявляем обработчик
bind("selectNLUResult", function(ctx) { //задаем обработчик для фазы `selectNLUResult`
log(ctx.nluResults); // выводим результаты в лог
if (ctx.nluResults.intents.length > 0){
ctx.nluResults.selected = ctx.nluResults.intents[0]; // используем результат от интентов
return;
}
if (ctx.nluResults.patterns.length > 0){
ctx.nluResults.selected = ctx.nluResults.patterns[0]; // если результата от интентов нет, используем паттерны
return;
}
if (ctx.nluResults.examples.length > 0){
ctx.nluResults.selected = ctx.nluResults.examples[0]; // если результата от интентов и паттернов нет, используем примеры
}
if (ctx.nluResults.externalIntents.length > 0){
ctx.nluResults.selected = ctx.nluResults.externalIntents[0]; // используем результат от интентов из протокола
return;
}
})
- В секции
initобъявляем обработчик. - Задаем обработчик для фазы
selectNLUResult. - Выведем результаты в лог:
log(ctx.nluResults). - Далее задаем порядок использования результатов:
- использовать результат от интентов:
ctx.nluResults.selected = ctx.nluResults.intents[0]; - использовать результат от паттерн-матчера:
ctx.nluResults.selected = ctx.nluResults.patterns[0]; - использовать результат от примеров:
ctx.nluResults.selected = ctx.nluResults.examples[0]. - использовать результат от интента полученного из протокола:
ctx.nluResults.selected = ctx.nluResults.externalIntents[0];.
- использовать результат от интентов: