有什么方法可以使用内联编辑器而不是使用后续意图来请求用户确认?

Is there any way to ask for confirmation from user using inline-editor instead of using follow-up intents?

我有两个意图 get_name 和 get_age

在get_name我取用户名,这个intent是为了fulfillment启用的。 在编辑器中,如何要求确认姓名?

如果确认,那么我应该将输出上下文添加到 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}`);
    }
}

您混淆了几个概念。虽然可以使用内联编辑器来实现,并且可以确认没有后续意图的用户的输入,但您仍然需要额外的意图来进行确认。

关于 Dialogflow 实现编程,有两个重要的事情需要了解:

  1. 来自用户的所有 响应必须通过 Intent。它不需要是唯一的或后续 Intent,但用户所说的意图始终以这种方式捕获。
  2. 当一个Intent被触发时,它可以将信息发送给一个Intent Handler。这是 Intent Handler 从用户那里获取信息的唯一方式。触发处理程序时,它不会等待进一步的用户输入。它所能做的就是发送回复。

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

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

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

您将需要另一个可以捕获用户说是或否的 Intent。您可以将此作为一个或两个 Intent 来执行 - 您所做的取决于您。根据用户所说的,你再提示他们。

您的问题与this article中描述的类似,指出我们的回复方式基于两点:

  1. 当前状态(在你的情况下,你要求他们确认哪个问题)
  2. 用户的回复("yes",在这种情况下您保存信息并询问下一个问题,或者"no",在这种情况下您重复问题)