有什么方法可以使用在线编辑器而不是跟进意图来向用户请求确认?

时间:2019-05-02 07:21:27

标签: node.js dialogflow dialogflow-fulfillment

我有两个意图get_name和get_age

在get_name中,我输入用户名,启用此意图是为了实现。 在编辑器中,如何要求确认姓名?

如果确认,那么我应该将输出上下文添加到get_name中,以便调用get_age意图。

我尝试使用conv对象在不离开意图的情况下开始对话,但是它甚至没有调用该函数。

function confirmation(agent){
    var entity_name = agent.name;
    var name = agent.parameters.name;
    var conv = agent.conv();
    conv.ask(`Is ${name} correct?`);
    agent.add(conv);
    var user_query = conv.query;
    if(user_query.entities.name=='yes'){
        agent.setContext({
            name: `${entity_name}`+'_done',
            lifespan: 2
        });
        agent.add(`Give your age ${name}`);
    }
}

1 个答案:

答案 0 :(得分:0)

您正在混淆两个概念。虽然可以使用内联编辑器来执行充实,并且可以在没有后续意图的情况下确认来自用户的输入,但是您仍将需要其他意图来进行确认。

关于Dialogflow实现编程,有两点要理解:

    用户的
  1. 所有响应必须通过Intent来实现。不一定要是唯一意图或“跟进意图”,但始终以这种方式捕获用户所说的意图。
  2. 触发Intent时,它可以将信息发送到Intent处理程序。这是意图处理程序从用户获取信息的唯一方法。触发处理程序时,它不会等待其他用户输入。它所能做的就是发送回复。

所以在您的代码中,一旦发送

conv.ask(`Is ${name} correct?`);
agent.add(conv);

您将不会在同一个Intent Handler中从该提示获得响应。

您将需要另一个可以捕获用户的“是”或“否”的Intent。您可以将其作为一种或两种意图进行,具体取决于您自己。根据用户所说,然后再次提示他们。

您的问题与this article中描述的问题类似,该问题指出我们的答复基于两件事:

  1. 当前状态(在您的情况下,您要让他们确认哪个问题)
  2. 用户的答复(“是”,在这种情况下,您保存信息并询问下一个问题,或者“否”,在这种情况下,您重复问题)