我设置了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模拟器上对其进行测试。 我已在
下面的技能中启用了权限所以我在这里做错了什么
答案 0 :(得分:2)
在技能配置中启用许可意味着技能可以请求用户同意以访问某些信息。对于您的情况,请发送电子邮件ID。配置该权限后,用户必须授予对该特定信息的访问权限。就像您在Android应用中提供权限的方式一样。用户可以通过两种方式向您的技能授予权限:
Settings
菜单下明确授予对您技能的访问权限。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