我已经设置Alexa技能来使用Flask-Ask。技能的效果和预期一样好。现在我需要获取用户的个人信息,如姓名、电话、电子邮件、address.So,我使用了下面的代码
@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模拟器上测试它。我已经在技能中启用了权限,如下所示

我是不是做错了什么
发布于 2018-10-22 15:57:22
在技能配置中启用权限意味着技能可以请求用户同意才能访问某些信息。在您的情况下,是电子邮件Id。配置该权限后,用户必须授予对该特定信息的访问权限。这就像你如何在Android应用程序中提供权限一样。用户可以通过两种方式向您的技能授予权限:
Settings菜单下明确授予对您的技能的访问权限。permission card以获取同意。在使用apiAccessToken访问apiEndpoint之前,您应该能够访问该信息。否则你会得到403。因此,无论何时获得403,都要给用户发回一个permission card。一旦用户授予您权限,点击apiEndpoint获取您需要的信息。
发布于 2018-11-24 00:09:08
您不必将body传递给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-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
https://stackoverflow.com/questions/52923026
复制相似问题