У вас есть несколько вопросов по поводу использования опций.Давайте попытаемся прояснить некоторые вещи.
Могу ли я получить разные намерения, запускаемые для каждого параметра?
Нет.Способ, которым параметры сообщаются в Dialogflow, заключается в том, что все параметры будут инициировать одно и то же намерение.Вы несете ответственность за просмотр отправленной строки параметров и вызов другой функции, если хотите.
Как вы заметили, вам нужно создать намерение с событием actions_intent_OPTION
.
Ваш код для обработки этого может выглядеть примерно так, хотя есть и другие способы обработки:
app.intent('list.reply.click', (conv, params, option) => {
// Get the user's selection
// Compare the user's selections to each of the item's keys
if (!option) {
conv.ask('You did not select any item from the list or carousel');
} else if (option === 'OPTION_1') {
handleOption1( conv );
} else if (option === 'OPTION_2') {
handleOption2Or3( conv );
} else if (option === 'OPTION_3') {
handleOption2Or3( conv );
} else {
conv.ask('You selected an unknown item from the list, or carousel');
}
});
Могу ли я получитьразличные намерения, запущенные для каждой карусели?
Да.Для этого при отправке карусели вы установите OutgoingContext и удалите любые другие OutgoingContexts, которые вы создали для карусели (установите для их продолжительности жизни значение 0).Затем вы создадите Intent, который имеет этот контекст как IncomingContext.
Код для отправки карусели может выглядеть примерно так, если вы используете библиотеку actions-on-google
conv.ask("Here is menu 2");
conv.ask(new List({
title: "Menu 2",
items: {
"OPTION_1": {
title: "Option 1",
description: "Description 1"
},
"OPTION_2": {
title: "Option 2",
description: "Description 2"
},
"OPTION_3": {
title: "Option 3",
description: "Description 3"
},
}
});
conv.contexts.set("menu_2",99);
conv.contexts.delete("menu_1");
conv.contexts.delete("menu_3");
// Don't forget to add suggestions, too
Если вы используете библиотеку исполнения диалогового потока, она будет аналогичной, хотя есть несколько отличий:
let conv = agent.conv();
conv.ask("Here is menu 2");
conv.ask(new List({
title: "Menu 2",
items: {
"OPTION_1": {
title: "Option 1",
description: "Description 1"
},
"OPTION_2": {
title: "Option 2",
description: "Description 2"
},
"OPTION_3": {
title: "Option 3",
description: "Description 3"
},
}
});
agent.add(conv);
agent.setContext({name:"menu_1", lifespan:0});
agent.setContext({name:"menu_2", lifespan:99});
agent.setContext({name:"menu_3", lifespan:0});
Если вы используете multivocal , конфигурация ответа можетвыглядело примерно так:
{
Template: {
Text: "Here is menu 2",
Option: {
Type: "carousel",
Title: "Menu 2",
Items: [
{
Title: "Option 1",
Body: "Description 1"
},
{
Title: "Option 2",
Body: "Description 2"
},
{
Title: "Option 3",
Body: "Description 3"
}
]
}
},
Context: [
{
name: "menu_1",
lifetime: 0
},
{
name: "menu_2",
lifetime: 99
},
{
name: "menu_3",
lifetime: 0
}
]
}
Намерение, которое захватит это предложение, может выглядеть примерно так:
Вашкод для обработки этого будет аналогичен приведенному выше, за исключением использования другого имени намерения.
Если между обработчиками есть перекрывающиеся параметры, они могут вызывать ту же функцию, которая фактически выполняет работу (снова, как показано выше).
Как я могу обрабатывать голосовые и опциональные ответы одинаково?
AoG, в некоторых случаях, будет использовать голосовой ответ для запуска option.Это то, что псевдонимы для.Но даже помимо этого, если у вас есть Интенты, которые ловят фразы от пользователя, и Интент, который работает с Опциями, все, что вам нужно сделать, это заставить код выполнения вызывать ту же функцию.
Почему нетНе работает ли код?
Строка
app.intent('actions.intent.OPTION', (conv, params, option) => {
Возможно, не то, что вы думаете.Если это не имя для Intent в Dialogflow , строка actions.intent.OPTION
не будет отображаться в вашем обработчике.Это также, как вы регистрируете обработчик Intent в библиотеке actions-on-google.
Выглядит так, как будто вы смешиваете способ выполнения обработчика диалога для регистрации обработчиков Intent с библиотекой actions-on-google.способ регистрации обработчиков намерений с помощью функции carousel()
.Не делай этого.(Это также может быть причиной того, что ответы не возвращаются правильно.)