这是我的用例:在实现中的某个地方,在处理Intent A时,我想使用setFollowupEvent
调用IntentB。像这样:
function intentA_Handler(){
....
agent.add('This is the response when calling Intent A');
agent.setFollowupEvent('call_intent_B_event');
}
function intentB_Handler(){
agent.add('I am in intent B now.');
....
}
我期望的是
agent.setFollowupEvent('call_intent_B_event');
并显示并说出字符串我现在的意图是B。 会发生什么:
助手立即显示并告诉我字符串我现在正在使用意图B ,并省略了第一个字符串这是调用意图A时的响应
已经尝试:
function intentA_Handler(){
....
new Promise((resolve, reject) => {
agent.add('This is the response when calling Intent A');
resolve();
});
agent.setFollowupEvent('call_intent_B_event');
}
但结果仍然相同。知道如何实现我的目标吗?
答案 0 :(得分:2)
这是预期的行为。后续事件将返回Dialogflow,而不是Google平台上的操作。第二个意图响应将作为唯一来自代理的响应返回给助手。
如果您使用Google客户端库(https://developers.google.com/actions/reference/nodejsv2/overview上的操作),则可以通过后续事件https://actions-on-google.github.io/actions-on-google-nodejs/classes/dialogflow.dialogflowconversation.html#followup传递参数 您可以使用参数值来跟踪要包含在最终响应中的其他信息。
答案 1 :(得分:1)
通常-如果您通过充实来做事,则无需使用后续事件。请记住-意向通常表示用户在做或说些什么,不是您希望回复的内容。
如果您需要同时在A和B的Intent Handler中调用某些代码-只需将该代码作为另一个函数调用即可。如果要在A和B中都以相同的消息作为结尾,则可以直接在A和B中使用所需的消息来调用add()
-直接或通过调用公共函数。也许是这样的:
function addMessageB(){
agent.add('This was from adding message B.');
}
function intentA_Handler(){
....
agent.add('This is the response when calling Intent A');
addMessageB();
}
function intentB_Handler(){
addMessageB();
....
}
有局限性(例如,您只能add()
两条简单消息),但这是一般的方法。