javascript - 如果用户之前使用过该操作,如何让 Dialogflow 代理向用户打招呼?

标签 javascript node.js firebase dialogflow-es actions-on-google

我正在使用 Actions On Google/Dialogflow,并且我正在尝试创建一个函数,如果用户之前使用过该操作,则该函数会通过用户的名字向他们打招呼,如果没有,则会询问他们的名字。我尝试通过实现将其映射到“欢迎意图”,但每当我尝试在模拟器上运行该操作时,都会收到此错误:

Error 206: Webhook Error

如果这被映射到另一个意图,那么最初是有意义的,但我想知道我是否会收到此错误,因为您无法实现欢迎意图?

这是我在内联编辑器中使用的代码,这可能是问题所在:

exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request,response) => {
  const agent = new WebhookClient({ request, response });


  function welcome(conv) {
      if (conv.user.last.seen) {
          conv.ask(`Welcome back ${name}!`);
    } else {
          conv.ask('Welcome to The app! My name is Atlas, could I get your name?');
   }}

  let intentMap = new Map();
  intentMap.set('Welcome Intent', welcome);
  agent.handleRequest(intentMap);

这怎么行不通?我需要实现用户登录吗?我是否需要使用写入 firestore 数据库的函数?

感谢您的帮助或建议!

最佳答案

让我们先澄清一些事情:

  • 可以实现您的欢迎意图。
  • 不需要需要用户登录。虽然使用 Google Sign In for Assistant 当然可以使用,但这并不能从根本上改变您的问题。
  • 不需要需要使用写入 firestore 数据库的函数。同样,您可以使用它,但这不会改变您的问题。

这不起作用的具体原因是因为本例中的 conv 参数包含 Dialogflow WebhookClient而不是 Google 上的操作 Conversation对象。

要使用您拥有的参数获取 Conversation 对象,您可以调用 conv.getConv(),这将为您提供一个具有 user 参数的对象。所以这可能看起来像

function welcome(conv) {
  let aog = conv.getConv();
  if (aog.user.last.seen) {
      conv.ask(`Welcome back ${name}!`);
  } else {
      conv.ask('Welcome to The app! My name is Atlas, could I get your name?');
}}

但是,这仍然存在一些问题。最值得注意的是,尚不清楚 name 从何而来。我假设您将从用户存储对象中获取它,但您似乎没有这样做。

关于javascript - 如果用户之前使用过该操作,如何让 Dialogflow 代理向用户打招呼?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53450716/

相关文章:

javascript - 如何在 jQuery 中使用循环自动绑定(bind)多个事件处理程序

javascript - 如何在 JavaScript 中将 Decimal128 值转换为数字?

javascript - Javascript 分页出错

javascript - 终端输出 : manpath: can't set the locale; make sure $LC_* and $LANG are correct

java - 我如何指向随 secret 钥(firebase 用户 ID)

javascript - 在html中将puppeteer json写入html表并在没有jQuery的情况下保存

javascript - 使用nodejs 将文档索引到elasticsearch

javascript - Node promise 链似乎在字符串匹配时被破坏,如何解决?

ios - 从 TableViewCell 行获取当前子 ID 到另一个 View Controller 并通过添加新字段更新此子 ID

ios - 同步下载 Firebase 存储