【问题标题】:Google Assistant verify user input in Dialogflow webhookGoogle Assistant 在 Dialogflow webhook 中验证用户输入
【发布时间】:2018-09-27 18:48:10
【问题描述】:

首先要了解一些信息:我的 Google Assistant 聊天机器人目前有 2 个功能(意图),即注册用户(输入:用户的姓名、出生日期和 ID)和向另一个用户付款(输入: 收款人的姓名和身份证以及要支付的金额)。我已经设置好了,一个 index.js webhook 链接到 firebase。

以下是我目前用于 2 个意图的代码:

app.intent('onboard user', (conv, {name, surname, birthdate, ID}) => {
  var user = db.collection("Users").doc(ID);

  var setUser = user.set({
    "FirstName": name,
    "Surname": surname,
    "DateofBirth": new Date(birthdate),
    "ID": ID,
    "AccountCreated": new Date(),
  });
    conv.close('Is this correct? Your full name is ' + name + ' ' + surname + '. You were born on ' + birthdate + ' and your ID is ' + ID);
});

app.intent('payment', (conv, {recipient, amount, ID}) => {
  var transactionRef = db.collection("Transactions").doc(ID);

  var setTransaction = transactionRef.set({
  "Recipient": recipient,
  "Amount": amount,
  "ID": ID,
  "Date": new Date(),
});
  conv.close('Is this correct? You wish to pay ' + recipient + ' with ID ' + ID + ' ' + amount.amount + ' ' + amount.currency);
});

我有一些非常简单的需求想要实现,即验证指定的ID是否超过6位,最好是出生日期在合理的范围内(可能在1910年到2010年之间)。

问题是我无法找到有关如何执行此操作的明确指南。我最初是按照 Google 的 Google Assistant 和 Dialogflow 教程以及其他一些在线指南进行操作的。但我觉得这并没有让我了解除了为 Google 助理开发的基本知识之外的任何内容。

我查看了后续意图,但如果我的要求没有得到满足,我特别想打电话给他们。简单来说:

if(ID.length < 6){
    \\assistant gives informative response asking and prompts for ID again
}

因此,如果我能在这方面寻求帮助,以及任何好的指南/教程,作为扩展助手开发理解的良好资源,我将不胜感激。

【问题讨论】:

    标签: javascript dialogflow-es google-assistant-sdk


    【解决方案1】:
    【解决方案2】:

    首先:您不应该使用conv.close(your answer),因为这会结束对话。如果您使用它,助手会简单地回答,然后您会听到关闭操作的耳鸣。

    改为使用conv.ask("your question") 来回答用户的问题,然后要求提供更多输入。您可以为每个意图使用多个 conv.ask() 语句。所以第一个可以用来实际向用户提供信息。

    对于您使用的第一个示例,我将对其进行转换:

    conv.ask('Thanks. I understood, that your full name is ' + name + ' ' + surname + '. You were born on ' + birthdate + ' and your ID is ' + ID);
    conv.ask('Is this correct?')
    

    首先向用户提供有关用户输入内容的一些信息非常重要(通过语音,这非常重要,因为他们没有其他反馈)。然后提出一个问题,让用户知道她可以(实际上应该)再次说话。

    第二:关于验证输入:那是普通的 Javascript。如上所示,您可以再次执行以下操作:

    if (ID.length < 6){
        conv.ask(`I understood your ID to be ${ID}. But it should be at least six digits long. Can you repeat the ID please?`);
    } else {
        // the code from above
    }
    

    此示例使用 JS 模板字符串。我更喜欢它们而不是字符串连接。但是您必须使用反引号才能使它们起作用!但这取决于您选择哪种风格。

    最后:考虑使用SSML。特别是如果 ID 使用字符时,使用该元素会很有帮助,因为您可以让它分别拼写每个字符,而不是尝试从中拼出一个单词(在 ID 的情况下这听起来很奇怪)。但是,当然,前两件事是重要的部分。您可以在之后完善响应:-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-16
      • 1970-01-01
      • 1970-01-01
      • 2019-11-19
      相关资源
      最近更新 更多