Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript app.askForSignIn();根本不工作_Javascript_Actions On Google_Google Assistant Sdk_Api Ai_Dialogflow Es - Fatal编程技术网

Javascript app.askForSignIn();根本不工作

Javascript app.askForSignIn();根本不工作,javascript,actions-on-google,google-assistant-sdk,api-ai,dialogflow-es,Javascript,Actions On Google,Google Assistant Sdk,Api Ai,Dialogflow Es,正如文档中明确解释的那样,登录意图目前不起作用,它只是可以在模拟器中用于测试的东西,但在生产环境中不可用 我的情况是,我正在使用帐户链接,我的令牌在一天后过期,因此如果用户不与助手交互,令牌将不再有效。然后,如果令牌在webhook上被证明无效,我想从webhook向助手发回“请再次链接您的帐户” 有一个方法app.askForSignIn()这似乎与我需要的类似,但它似乎不适用于Dialogflow,而仅适用于SDK 因此,我所做的是: 在Dialogflow中创建一个名为actions.i

正如文档中明确解释的那样,登录意图目前不起作用,它只是可以在模拟器中用于测试的东西,但在生产环境中不可用

我的情况是,我正在使用帐户链接,我的令牌在一天后过期,因此如果用户不与助手交互,令牌将不再有效。然后,如果令牌在webhook上被证明无效,我想从webhook向助手发回“请再次链接您的帐户”

有一个方法
app.askForSignIn()
这似乎与我需要的类似,但它似乎不适用于Dialogflow,而仅适用于SDK

因此,我所做的是:

  • 在Dialogflow中创建一个名为
    actions.intent.SIGN\u in
    的意图,并向其添加
    actions\u intent\u SIGN\u in
    事件
  • 当任何请求到达webhook时,我会检查令牌,如果遇到无效令牌,我会调用
    app.askForSignIn()
正在发生的事情:

  • 应用程序刚刚离开对话例如:测试应用程序离开了对话
  • 当我再次说“与测试应用程序对话”时,它的行为就像帐户被链接一样,并且在我使用测试控制台的重置按钮手动重置整个应用程序之前,不会请求帐户链接
更新:

我试图使用文档()中的代码片段 它也不能正常工作,这是我调用app.askForSignIn()时模拟器的响应来自webhook


您可以有两个令牌,一个是短期访问令牌,另一个是长期刷新令牌

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

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

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

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


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

我被您的问题弄糊涂了。一切正常,但代币在一天后过期?是的,代币在1小时后过期。例如:我从助手应用程序开始,说“与测试应用程序对话”,它要求帐户链接,然后我输入密码并进入,让我命令
ok google问我的测试应用程序显示出席情况
,它返回时带有
4个出现在
之外,一小时内一切正常,但在一小时令牌到期后,当我说
ok时,谷歌要求我的测试应用程序向我显示出勤情况
失败,助手不明白我不再经过身份验证,然后继续使用相同的标记,结果是永远不要取消与帐户的链接在您的问题中,听起来好像您正在尝试使用askForSignIn()解决问题。。。为什么呢?askForSignIn()将在从DialogFlow调用的web钩子中工作。