【问题标题】:Amazon Alexa Skills Kit: How do you link with external app account / userIdAmazon Alexa Skills Kit:如何与外部应用程序帐户/用户 ID 关联
【发布时间】:2015-09-15 00:48:15
【问题描述】:

在 Amazon alexa 技能 请求中有一个 userId,我试图了解这是什么以及是否有一些参考,因为我想链接Amazon Echo 用户帐户在我自己的应用程序中有一个帐户,为此我必须使用某种静态 userId。

示例请求:

{
 "version": "1.0",
 "session": {
   "new": false,
   "application": {
   "applicationId": "amzn1.echo-sdk-ams.app.[unique-value-here]"
  },
  "sessionId": "session1234",
  "attributes": {},
  "user": {
    "userId": null //IS THERE A DETAILED REFERENCE OF THIS SOMEWHERE?
  }
},
"request": {
"type": "IntentRequest",
"requestId": "request5678",
"intent": {
  "name": "MyColorIsIntent",
  "slots": {
    "Color": {
      "name": "Color",
      "value": "blue"
    }
  }
}
}
}

【问题讨论】:

    标签: amazon-web-services amazon userid alexa-skill alexa-skills-kit


    【解决方案1】:

    好问题。

    简答:您将不得不在您的第 3 方用户和 Alexa UserID 之间建立自己的配对。 Alexa Skills SDK 没有内置支持,可让您将 Alexa UserID 与您的用户 ID 相关联。您将必须创建一个特定的语音意图,将 Alexa UserID 与您的用户数据库相关联。

    更长的答案:让我们首先谈谈您在每个请求中获得的 Alexa UserID。您获得的 Alexa UserID 是 LWA(Login-With-Amozon)用户 ID。主要目的是让 Alexa Skills 可靠地检测重复用户。

    那么什么不起作用?您将遇到的问题是 LWA userId 对于每个 Alexa 应用程序始终是匿名的。这很重要,因为它确保不跟踪用户;但它也会阻止您将 Alexa 用户 ID 与您自己的 LWA 用户 ID 相关联。

    来自“Login with Amazon - Developer Guide”(第 10 页)

    每家为 Login with Amazon 创建网站或应用程序的公司都会获得 客户的相同 user_id。但是,当客户登录到 其他公司的应用或网站,user_id 会有所不同。这是 因此 user_id 不能用于在网络上跟踪客户。

    我想说的是,您不能只在 iOS、Android 或 Web 应用程序中实现 LWA,并期望为帐户获得与 Alexa 用户 ID 相同的 LWA 用户 ID。例如,如果您 implemented LWA on your Android app 有 foo@bar.com 用户登录到他们的亚马逊帐户,您可能会获得 amzn1.account.123456 作为用户 ID,但是当那同一个 foo@bar.com 用户与他们配对的 Echo 对话,您将获得一个 amzn1.account.98765 或任何其他完全不同的 userId。我实际上浪费了两天时间来构建这个架构,这就是我知道它不起作用的原因。

    那么什么是有效的?以语音为中心的 Pin 身份验证变体似乎是最好的。

    让我们看看另一个存在类似问题的应用空间:电视应用(xbox、android TV 等)。许多这些应用程序需要您登录才能访问内容(例如 hulu、netflix 等)。但是使用遥控器输入用户名和密码只是普通的旧用户体验。那么我们为电视应用做了什么?用户访问 myService.com/tv,登录到他们的帐户并获得一个特殊的短、数字和时间敏感的 pin 码,他们可以将其输入到他们的电视。

    当我实施 Alexa Skill 时,我们决定采用类似的方法。用户将登录我们的网站、iOS 应用程序或 Android 应用程序,进入专门的 Echo 页面,然后获取密码。屏幕上的说明会这样写:

    转到您的 Echo 并说:

    '启动 foo'

    '我的密码是一二三四'

    在我们的 foo 技能中,我们有一个 PairingIntent 意图听“我的 pin 是 {一二三四|pinCode}”示例话语.收到 PairingIntent 后,我​​们将检查该 pin 码是否有效,以及是否将 Alexa 用户 ID 与我们自己的用户数据库相关联。如果 pin 是有效的,Echo 会说“哦,你好,鲍勃!你现在可以访问所有很棒的东西了。”。如果密码无效,alexa 会提示用户重试。

    希望这是有道理的。还有其他选项可以将 3rd 方帐户与 Alexa Skills 相关联,但这种语音锁定方法是最简单的。

    【讨论】:

    • 非常有道理,感谢您对创建与外部服务配对的 Alexa 技能的洞察力。
    • 答案删除有什么原因吗?
    【解决方案2】:

    我不知道为什么原始答案已被删除,但亚马逊现在允许您将 Alexa 用户与系统中的用户关联起来。这是announcement。

    最终用户如何为技能设置帐户链接

    用户使用 Amazon Alexa 应用程序链接他们的帐户。请注意,用户 必须使用该应用程序。不支持单独建立链接 通过语音。

    用户通常在最初启用您的技能时开始该过程 应用:

    1. 在 Alexa 应用中,用户启用该技能。
    2. 应用程序使用您在注册技能时提供的授权 URL 在应用程序内显示您的登录页面 开发者门户。当配套应用调用此 URL 时,它包括 state、client_id 和 scope 作为查询字符串参数。

      • Alexa 服务在帐户关联过程中使用该状态。您的页面需要跟踪此值,您必须
        稍后再传回去。
      • client_id 由您定义。您的登录页面可以使用它来确定请求来自您的 Alexa 技能。
      • 范围是访问范围的可选列表,指示请求的访问级别。您定义要支持的范围集 为您的技能启用帐户关联。
    3. 用户使用他们的正常凭据登录您的站点。

    4. 您的服务对用户进行身份验证,然后生成一个访问令牌,用于在您的系统中唯一标识该用户。

    5. 您的服务将用户重定向到特定于 Amazon 的 URL,并传递 URL 中的 state、access_token 和 token_type 片段。

    6. Alexa 服务验证返回的信息,然后为 Alexa 用户保存 access_token。

    此时技能开启,用户的Alexa账号为 链接到您的服务中的帐户,并且该技能已准备就绪 用过。

    【讨论】:

      【解决方案3】:

      保证赋予 Alexa 技能的用户 ID 对于每个用户都是唯一的。它是根据开发者 ID 匿名化的,所以它在你的所有技能中都是相同的,但它会因开发者而异。无法将其显式链接回任何真实世界的 ID。你必须自己做。 我的一般建议是像 Firefox 同步一样。如果您的 Alexa 技能和您的应用程序共享一个后端,那么当用户想要从 Alexa 同步时,生成一个 4 个字符的同步代码,将其存储在后端,读取给用户,然后告诉他们去到网站并输入。在网站上,当他们提供同步代码时,将其匹配并在两者之间形成链接。 我在my book 中更详细地讨论了这一点,但这就是它的要点。

      【讨论】:

        【解决方案4】:

        在 Amazon alexa 技能请求中,我尝试将其与用户名绑定。

        因为您无法获得实际的用户名。但是,为了更完整,有不同的方法可以用来做你想做的事情。这将取决于您的技能要完成的工作,以了解哪种方法适合您。

        您的选择是:

        1. 将系统中的用户名链接到 Alexa 用户。在这种情况下,您不会获得用户名。您将获得一个令牌,然后您将使用该令牌在您的系统中将用户名链接在一起。阅读:https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/linking-an-alexa-user-with-a-user-in-your-system

        2. 如果您尝试做的只是从另一个用户中唯一地识别一个用户,但您不关心或不需要该用户的任何特定信息。该请求带有一个用户 (session.user.userId)。它是一个随机字符串,将针对他们发送的所有请求识别该用户,但不会告诉您任何关于它们的信息。阅读:https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/alexa-skills-kit-interface-reference

        3. 您可以有一个类似于“SetUser”的意图,并让用户以他们想要的用户名与您交谈。然后你可以使用上面的#2 将它们链接到某个数据存储的某个地方。我不知道亚马逊是否支持这条路线,因为它确实是一种绕过#1的方法。所以,这取决于你想要做什么。如果您需要有关用户的个人信息,请使用 #1。如果您只需要知道是某个用户还是另一个用户,请使用 #2。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-03-30
          • 1970-01-01
          • 2022-08-19
          • 1970-01-01
          • 2015-01-20
          • 1970-01-01
          • 2018-10-04
          相关资源
          最近更新 更多