首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Alexa flask-ask获取用户个人信息

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

Stack Overflow用户
提问于 2018-10-22 13:45:17
回答 3查看 638关注 0票数 2

我已经设置Alexa技能来使用Flask-Ask。技能的效果和预期一样好。现在我需要获取用户的个人信息,如姓名、电话、电子邮件、address.So,我使用了下面的代码

代码语言:javascript
复制
@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模拟器上测试它。我已经在技能中启用了权限,如下所示

我是不是做错了什么

EN

回答 3

Stack Overflow用户

发布于 2018-10-22 15:57:22

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

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

在使用apiAccessToken访问apiEndpoint之前,您应该能够访问该信息。否则你会得到403。因此,无论何时获得403,都要给用户发回一个permission card。一旦用户授予您权限,点击apiEndpoint获取您需要的信息。

票数 2
EN

Stack Overflow用户

发布于 2018-11-24 00:09:08

您不必将body传递给api:

代码语言:javascript
复制
@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
票数 1
EN

Stack Overflow用户

发布于 2018-10-22 16:06:21

只对那些坚持相同观点的人来说。我是在alexa模拟器上测试的。因此,要授予权限,您必须转到https://alexa.amazon.in/spa/index.html#cards。在任何文档中都没有提到这个url。

选择Skills (从左侧菜单) => Your skills => All skills授予权限。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52923026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档