【问题标题】:Alexa flask-ask get the user personal informationAlexa flask-ask 获取用户个人信息
【发布时间】:2018-10-22 05:45:16
【问题描述】:

我已经设置了 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模拟器上测试它。 我已经在下面的技能中启用了权限

所以我在这里做错了什么

【问题讨论】:

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


    【解决方案1】:

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

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

    在您使用apiAccessToken 访问apiEndpoint 之前,您应该可以访问该信息。否则你会得到403。因此,每当您收到403 时,请向用户发送回permission card。一旦用户授予您权限,请点击apiEndpoint 获取您需要的信息。

    【讨论】:

      【解决方案2】:

      您不必将正文传递给 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
      

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-09-25
          • 1970-01-01
          • 2020-12-01
          • 2018-08-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多