Я думаю, вы говорите о последующих событиях , а не о последующих действиях. Следующие Интенты устанавливаются как Интенты, которые могут быть запущены после того, как Пользователь намерен выполнить какое-либо действие - это делается путем установки контекста. Последующие события устанавливаются во время выполнения и предназначены для запуска намерения, для которого установлено это Событие.
В большинстве случаев вам не нужно использовать Последующие события.
Вместо этого - просто вызовите функцию, которая выполняет обработку и отвечает так, как вы хотите. Ничто не говорит о том, что ваша функция-обработчик должна делать все сама - она может вызывать функцию точно так же, как любая другая функция, и может вызывать ее с параметрами.
Так что вполне разумно иметь обработчики намерений, такие как
app.intent('intent.one', (conv) => {
reply( conv, "Hello!" );
});
app.intent('intent.two', (conv) => {
reply( conv, "How are you?" );
});
app.intent('intent.quit', (conv) => {
reply( conv );
});
function reply( conv, msg ){
if( !msg ){
conv.close( "I give up!" );
} else {
cov.ask( msg );
}
}
Это все еще не объясняет, почему это не сработало.
То, что вам не хватает в том, как вы используете Followup Events, это то, что вы используете conv.followup()
не отправляет ничего , которое вы могли отправить обратно в Dialogflow, когда он перенаправляет на событие. Как документация гласит:
Запускает намерение по вашему выбору, отправляя событие отслеживания из webhook. [...] Диалоговый поток не передает ничего обратно в Google Assistant, поэтому информация, заданная Google Assistant c, прежде всего conv.user.storage, игнорируется.
То, что вы можете do, однако, отправляет параметры новому намерению, обнаруженному в событии. Примерно так может работать:
const params = {
result: "Hello!"
};
conv.followup("customEvent1", params);
и затем в обработчике для намерения события:
app.intent('CUSTOM_EVENT_INTENT', (conv) => {
console.log("[DEBUG] - CUSTOM_EVENT_INTENT");
console.log("[DEBUG] - conv.parameters.result = "+conv.parameters.result);
if(!conv.parameters.result) {
console.log("[DEBUG] - I give up");
conv.close("Nessuna risposta");
}
else conv.ask(conv.parameters.result);
});