16

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"
    }
  }
}
}
}
4

4 回答 4

29

好问题。

简短的回答:您将不得不在您的第 3 方用户和 Alexa 用户 ID 之间建立自己的配对。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 相关联。

来自“使用 Amazon 登录 - 开发人员指南”(第 10 页)

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

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

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

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

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

转到您的 Echo 并说:

'启动富'

“我的别针是一二三四”

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

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

于 2015-06-29T00:03:24.553 回答
12

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

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

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

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

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

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

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

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

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

至此,该技能已启用,用户的 Alexa 帐户与您的服务中的帐户关联,并且该技能已准备好使用。

于 2015-09-05T12:16:47.590 回答
0

在 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。

于 2017-03-07T06:53:36.217 回答
0

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

于 2015-08-01T03:23:10.043 回答