app.askForSignIn();根本不工作

时间:2017-10-14 16:18:33

标签: javascript actions-on-google google-assistant-sdk api-ai dialogflow

登录意图目前无效,如文档中清楚解释的那样,它只是您可以在模拟器中用于测试的内容,但它在生产中无法使用。

我的情况是我正在使用帐户关联,我的令牌在一天后过期,因此如果用户未与助理互动,则令牌将不再有效。然后,如果在webhook上证明该令牌无效,我想发回“请再次将您的帐户关联”给webhook的助手。

有一个方法app.askForSignIn();看起来与我需要的方法相似,但看起来它不适用于Dialogflow,只适用于SDK。

所以我所做的是:

  • 在Dialogflow中创建一个名为actions.intent.SIGN_IN并在其中添加actions_intent_SIGN_IN事件的意图
  • 当任何请求到达webhook时,我会检查令牌,如果遇到无效令牌,我会调用app.askForSignIn();

发生了什么:

  • 该应用刚刚离开了对话,例如:测试应用程序离开了对话
  • 当我再次说“与测试应用程序交谈”时,它表现得像帐户已关联,并且在我使用测试控制台的重置按钮手动重置整个应用程序之前不会要求帐户链接

更新:

我尝试使用doc(https://developers.google.com/actions/reference/nodejs/AssistantApp#askForSignIn)中的代码段 并且它不能正常工作,这是我从webhook调用app.askForSignIn();时来自模拟器的响应

enter image description here

1 个答案:

答案 0 :(得分:0)

您可以有2个令牌,一个是访问令牌,它是短期的,另一个是刷新令牌,它是长期的。

因此,当Google需要调用您的服务的API之一时,Google会一起使用这些端点来获得用户的许可,以代表他们调用这些API。由Google启动的典型OAuth 2.0会话具有以下流程:

首先,Google在用户的浏览器中打开您的授权端点。如果尚未登录,则用户登录,如果尚未授予权限,则授予Google权限以使用您的API来访问其数据。

然后,您的服务将创建授权码,并通过将用户的浏览器重定向到Google并附带请求中的授权码来将其返回给Google。

接下来,Google将授权代码发送到您的令牌交换端点,该端点将验证代码的真实性并返回访问令牌和刷新令牌。访问令牌是您的服务接受作为访问API的凭据的短暂令牌。刷新令牌是一种长期存在的令牌,Google可以存储该令牌,并在令牌过期后用于获取新的访问令牌。

最后,Google调用您服务的API,并在每个请求中附加访问令牌。您的服务将验证访问令牌是否已授予Google授权以访问API,然后完成API调用。