使用Google操作在API.AI上验证Google日历

时间:2017-05-27 14:35:34

标签: google-calendar-api google-authentication dialogflow actions-on-google

我正在使用Google操作编写API.AI应用程序(将在google assistant和google home上运行)。该应用应该能够读取\添加事件到用户的谷歌日历帐户。

后端是Google Cloud Functions,我在开发者控制台中启用了Calendar API。

用户应该体验的流程是这样的:

  

用户:"嗨谷歌,我最后一次与安娜见面的时间是什么时候?"

     

代理商:"两天前与Anna的最后一次会面"

     

用户:"明天与Anna安排会面"

     

代理商:"好的。会议已设置"

如何构建身份验证过程以授予应用程序访问日历的权限?

2 个答案:

答案 0 :(得分:4)

更新,2017年11月8日

截至2017年10月4日,Google更新了他们的政策,明确禁止此行为。大约在同一时间,他们也采取了技术措施来防止这种情况发生。

关于启用Calendar API的部分仍然是正确的,但不足以完成原始问题的要求。

原始答案

从广义上讲,您需要执行的身份验证任务分为四个部分:

  1. 配置项目(在云控制台中),以便启用Calendar API并正确配置OAuth2客户端。
  2. 在操作控制台中为帐户链接配置操作。
  3. 为您的API.AI代理配置Google Integration上的操作,以指示需要登录。
  4. 当API.AI调用您的webhook来实现Intent时,它将包含一个身份验证令牌作为JSON的一部分。您可以使用此令牌拨打所需的Google API。
  5. 配置云计划

    您需要配置您的云项目,以便它可以访问您需要的Google API并设置OAuth2客户端ID,密码和重定向URI。

    1. 转到https://console.cloud.google.com/apis/dashboard并确保您拥有所选项目。然后确保您已启用所需的API。 (在本例中为Calendar API)

    2. 选择"凭据"菜单在左边。你应该看到这样的东西:

    3. Credentials screen

      1. 选择"创建凭据"然后" OAuth客户ID" Create credentials

      2. 选择这是针对" Web应用程序" (它......有点......)

      3. 输入名称。在下面的屏幕截图中,我使用了" Action客户端"所以我记得这实际上是针对谷歌的行动。

      4. 在"授权重定向URI"部分,您需要包含https://oauth-redirect.googleusercontent.com/r/your-project-id形式的URI替换" your-project-id"部分包含...您在Cloud Console中的项目ID。此时,屏幕应如下所示:enter image description here

      5. 点击"创建"按钮,您将获得一个包含您的客户端ID和密码的屏幕。您现在可以获得这些副本,但您也可以稍后获取它们。 enter image description here

      6. 点击"确定"并且你将被带回"证书"添加了新客户端ID的屏幕。如果您需要再次获取ID和密码,可以单击铅笔图标(如果已经泄露,则重置密码)。

      7. enter image description here

        配置操作控制台

        一旦我们为项目设置了OAuth,我们就需要告诉Actions这是我们用来验证和授权用户的。

        1. 转到https://console.actions.google.com/并选择您正在使用的项目。

        2. 在概述中,完成所有必要的配置,直到您可以进入步骤4,"帐户关联"。这可能需要您设置名称和图标 - 如果需要,您可以稍后再更正。

        3. enter image description here

          1. 选择授权类型"授权码"然后单击“下一步”。
          2. enter image description here

            1. 在“客户端信息”部分中,输入在云控制台中创建凭据时的客户端ID和客户端密钥。 (如果您忘记了,请转到Cloud Console API凭据部分,然后单击铅笔。)

            2. 对于授权网址,请输入https://accounts.google.com/o/oauth2/v2/auth

            3. 对于令牌网址,请输入https://www.googleapis.com/oauth2/v4/token

            4. 单击“下一步”

            5. enter image description here

              1. 您现在可以为您要求的范围配置客户端。与您输入范围的大多数其他地方不同 - 您需要每行一个。 (在这种情况下,您还要添加访问用户日历所需的正确范围。)然后单击“下一步”。
              2. enter image description here

                1. 您需要输入测试说明。在您提交操作之前,这些说明应包含测试帐户和密码,审核小组可以使用该帐户和密码对其进行评估。但是,您可以在测试时将某些内容放在那里,然后点击“保存”按钮。
                2. 配置API.AI

                  在API.AI中,您需要指明用户需要登录才能使用Action。

                  1. 转到https://console.api.ai/并选择您正在使用的项目。

                  2. 选择"集成"然后"谷歌的行动"。如果您还没有打开它,请将其打开。

                  3. 点击"登录欢迎意图和#34;复选框。

                  4. enter image description here

                    处理您的webhook中的内容

                    完成所有设置后,处理webhook中的内容非常简单!您可以通过以下两种方式之一获取OAuth访问令牌:

                    • 如果您正在使用JavaScript库,请致电app.getUser().authToken

                    • 如果您正在查看JSON正文,则它位于originalRequest.data.user.accessToken

                    您将使用此访问令牌使用其他地方定义的方法对Google的API端点进行调用。

                    您不需要刷新令牌 - 除非用户已撤销访问权限,否则助理应向您提供有效的访问令牌。

答案 1 :(得分:0)

如果您使用Google登录作为登录提供商,则可以请求访问日历范围,作为OAuth流程的一部分。

https://docs.perl6.org/type/Rat州:

"请勿从Google请求任何OAuth范围,除非用户使用Google登录登录您的服务。"