2

我已经设置了 Alexa 技能来使用 Flask-Ask。技能按预期工作正常。现在我需要获取用户的个人信息,如姓名、电话、电子邮件、地址。所以我使用了下面的代码

@ask.intent('AskPermission')
def get_permission():
    token=context.System.apiAccessToken
    api_end_point=context.System.apiEndpoint
    request_id=request.requestId
    headers = {"Content-Type": "application/json",
               # "X-Amzn-RequestId":request_id,
               "Authorization": "Bearer {}".format(token)}
    body = {
              "version": "1.0",
              "response": {
                "card": {
                  "type": "AskForPermissionsConsent",
                  "permissions": [
                    "alexa::profile:email:read",
                  ]
                }
              }
            }

    permission_result = requests.get('{api_end_point}/v2/accounts/~current/settings/Profile.email'.format(api_end_point=api_end_point), json=body, headers=headers)

我每次都会收到 403 响应。我在alexa模拟器上测试它。我在下面的技能中启用了权限在此处输入图像描述

所以我在这里做错什么了吗

4

3 回答 3

2

在技​​能配置中启用权限意味着技能可以请求用户同意才能访问某些信息。在您的情况下,电子邮件 ID。配置该权限后,用户必须授予对该特定信息的访问权限。这就像您在 Android 应用程序中提供权限的方式一样。用户可以通过两种方式授予您的技能权限:

  1. 用户必须在Settings您的 Alexa 技能菜单下明确授予对您技能的访问权限。
  2. 您可以向permission card用户发送同意书。

在您点击之前apiEndpointapiAccessToken您应该可以访问该信息。否则你会得到403. 所以每当你得到403,给用户发回一个permission card. 一旦用户授予您权限,点击apiEndpoint获取您需要的信息。

于 2018-10-22T07:57:21.557 回答
1

您不必将正文传递给 api:

@ask.intent('AskPermission')
def get_permission():
    """ Retreive User email from alexa user profile api """

    token = context.System.apiAccessToken
    api_end_point = context.System.apiEndpoint
    headers = {
        "Host": "api.amazonalexa.com",
        "Accept": "application/json",
        "Authorization": "Bearer {}".format(token)}

    resp = requests.get('{api_end_point}/v2/accounts/~current/settings/Profile.email'.format(api_end_point=api_end_point),headers=headers)
    if resp.status_code == 200:
        return resp.json()
    return resp
于 2018-11-23T16:09:07.630 回答
0

仅适用于坚持同一点的任何人。我正在从 alexa 模拟器测试它。因此,要授予您必须转到https://alexa.amazon.in/spa/index.html#cards的权限。任何文档中均未提及此网址。

选择技能(从左侧菜单)=> 你的技能=> 所有技能授予权限。

下面的视频帮助我做到了这一点。 https://www.youtube.com/watch?v=2Xfn5kNWbnU

于 2018-10-22T08:06:20.903 回答