如果他们以前使用过Action,如何使Dialogflow代理打招呼用户?

时间:2018-11-23 17:15:39

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

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

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数据库的函数?

感谢您的帮助或建议!

2 个答案:

答案 0 :(得分:1)

让我们先清除一些事情:

  • 可以满足您的意愿。
  • 不需要需要用户登录。尽管可以肯定地使用Google Sign In Assistant来使用,但这并不能从根本上改变您的问题。
  • 不需要不需要使用写入Firestore数据库的函数。同样,您可以使用它,但这不会改变您的问题。

不起作用的特定原因是因为在这种情况下,conv参数包含一个Dialogflow WebhookClient而不是Google动作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的来源。我假设您将从用户存储对象中删除它,但是您似乎还没有这样做。

答案 1 :(得分:0)

对于将来遇到此问题且只想直接答案而不必搜索含糊不清的答案/文档的任何人,请按以下步骤操作:

注意:我最终使用了Google登录方法,但是即使这不是您的目标,我也会将链接发布到其他方法。

1)在Google模块上导入操作。人员/教程不显示的是,您必须这样导入库(用于用户登录):

const {
   dialogflow,
   Permission,
   SignIn
} = require('actions-on-google')

代替

const dialogflow = require('actions-on-google')

2)使用此代码:

const app = dialogflow({
      clientId: '<YOUR CLIENT ID from Actions on Google>',
 });

 app.intent('Start Signin', conv => {
      conv.ask(new SignIn('To get your account details'));
 });


  app.intent('Get Signin', (conv, params, signin) => {
        if (signin.status === 'OK') {
               const payload = conv.user.profile.payload;
               conv.ask(`Welcome back ${payload.name}. What do you want to do next?`);
       } else {
           conv.ask(`I won't be able to save your data, but what do you want to do next?`);
   }
        });

此功能将询问用户登录信息,下次您调用该意图时,它会显示“ Welcome back name”(欢迎使用名字),因为Google会自动保存它。

以下是备用method的链接: