Alexa flask-ask获取用户个人信息

时间:2018-10-22 05:45:17

标签: python-3.x alexa alexa-skills-kit alexa-skill flask-ask

我设置了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模拟器上对其进行测试。 我已在enter image description here

下面的技能中启用了权限

所以我在这里做错了什么

3 个答案:

答案 0 :(得分:2)

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

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

在用apiEndpoint击中apiAccessToken之前,您应该可以访问该信息。否则,您将得到403。因此,每当您收到403时,请向用户发送回permission card。并且,在用户授予您权限后,点击apiEndpoint以获取所需的信息。

答案 1 :(得分: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

答案 2 :(得分:0)

对于任何坚持同一观点的人来说。 我正在alexa模拟器中对其进行测试。 因此,要授予权限,您必须 转到https://alexa.amazon.in/spa/index.html#cards。该URL在任何文档中都没有提及。

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

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