Dialogflow-Google Assistant:显示消息后的setFollowupEvent

时间:2018-11-16 17:09:06

标签: node.js dialogflow actions-on-google

这是我的用例:在实现中的某个地方,在处理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.');
    ....
}

我期望的是

  1. 助手显示并说出字符串这是调用Intent A时的响应
  2. 然后调用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');
}

但结果仍然相同。知道如何实现我的目标吗?

2 个答案:

答案 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()两条简单消息),但这是一般的方法。