Google Action在帐户关联之前要求输入参数

时间:2019-06-08 06:39:36

标签: dialogflow actions-on-google

我将OAuth Authorisation Flow用于我的Google操作,由于某种原因,它要求输入参数,然后启动帐户关联,然后再次要求输入参数。

示例响应:

image image

代码

app.intent('Create Channel Intent', async (conv, params) => {

  if (!conv.user.access.token) {

    conv.ask(new SignIn());

  } else {

    var locale = conv.user.locale;

    if (locale === 'hi-IN') {

      var accessToken = conv.user.access.token;

      var channelNameRaw = params.channelname;
      var channelNameData = await helperFunctions.hinditranslate(channelNameRaw);
      var channelNameLwr = channelNameData.toLowerCase();
      var channelName = helperFunctions.replaceWhitespacesFunc(channelNameLwr);

      const headers = await helperFunctions.login(accessToken);
      const speechText = await helperFunctions.createChannel(channelName, headers);

      conv.ask(speechText);

    } else {

      var accessToken = conv.user.access.token;

      var channelNameRaw = params.channelname;
      var channelNameData = channelNameRaw.toLowerCase();
      var channelName = helperFunctions.replaceWhitespacesFunc(channelNameData);

      const headers = await helperFunctions.login(accessToken);
      const speechText = await helperFunctions.createChannel(channelName, headers);

      conv.ask(speechText);

    }

  }

});

Dialogflow

code code

2 个答案:

答案 0 :(得分:1)

您不应在您的SignIn事件意图中添加训练短语。如果要求登录许可的意图具有培训经验就足够了。因为它定向到actions_intent_SIGN_IN事件,然后继续在该事件上进行,除非用户尚未登录。我猜您是出于一种意图执行了这两个操作,因此这使它感到困惑,并尝试调用相同的意图并询问参数。

如果必须使用这种方式,请尝试使用上下文,以便可以在第二次调用时将参数值传递给该意图。

答案 1 :(得分:1)

我%99确保您的意图的树懒填充已关闭。

您的“创建频道意图”具有频道名称作为必需参数。如果没有Sloth-filling,则在满足每个必需参数之前,意图不会调用您的服务器/代码。

发生了什么事

  1. 您正在调用“创建频道意图”,它要求输入频道名称,因为它是必填项
  2. 用户提供一个频道名称,当所有必需参数都满足时,意图调用您的代码。
  3. 您的代码触发了sign_in意图,因为用户尚未登录。
  4. 用户授予触发actions_intent_SIGN_IN事件的权限
  5. 您的“创建频道意图”已被调用,因为它具有actions_intent_SIGN_IN作为触发器,并由于该意图是全新的而要求频道名称。

要解决此问题,请执行以下一项操作:

  • 在意图底部启用怠惰填充。
  • 添加输出上下文,并将#[CONTEXT-NAME] .channelname作为默认值添加到channelname参数(不使用手镯)。您可以通过在鼠标悬停在参数上时单击出现的3点来分配默认值。
  • 从创建频道意图中拆分捕获sign_in事件

希望有帮助。