真的只是惊讶于官方的Alexa文档中存在某些内容,并且它在代码中不起作用。我只是想创建一个list
api,然后关注:Alexa NodeJS。
具体来说,this部分与Alexa列表谈论CRUD ListManagementServices
。
如果您点击我提供的第二个链接,您会清楚地看到它们陈述token can be retrieved from the request at this.event.context.System.user.permissions.consentToken
好的很棒,转到我的代码,插入this.event.context.System.user.permissions.consentToken
只是为了在cloudwatch中发现错误can't get consentToken of undefined
。完全被这个目瞪口呆,我记录了this.event.context
,看看我正在使用什么样的对象。这是对象:
{
"AudioPlayer": {
"playerActivity": "IDLE"
},
"Display": {
"token": ""
},
"System": {
"application": {
"applicationId": "amzn1.ask.skill.0beed0e6-51a1-4c6d-ac33-ffc5917865b7"
},
"user": {
"userId": "amzn1.ask.account.AGCMLFZZENPXOPVJNBZYE3MEATUMFIDBZSABYFXORTYX2NH5DYTKR2YGRNEHSKDCQCWA3Q33GIHZIKVI47GON36TEE3XSNXASFYYNS46OXAEAHC3M3QMOFEGH26CCO7VDTEEW5WJW4VIJVYC2XUPHTI73N7ZI5IKH66MOMX5XQTHKUVRLPOAK4ZPJALLZWFJOT4PDQXZP3MVBFA"
},
"device": {
"deviceId": "amzn1.ask.device.AG2Q3NSHYI3KAHOESWBELUSD7GBARMROPJI6NWNWMBHTNGMK3TCKP5PNDAS2AN34JWCCIKURX24EMFCTRMJZGIXSA2YBCSDOOOFQ52PGCZGFDK3RIUE6OK2Z5H7YIYBNBDU7UN5UL2PMXAUEK2IWHILS7SFQ",
"supportedInterfaces": {
"AudioPlayer": {},
"Display": {
"templateVersion": "1.0",
"markupVersion": "1.0"
}
}
},
"apiEndpoint": "https://api.amazonalexa.com",
"apiAccessToken": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IjEifQ.eyJhdWQiOiJodHRwczovL2FwaS5hbWF6b25hbGV4YS5jb20iLCJpc3MiOiJBbGV4YVNraWxsS2l0Iiwic3ViIjoiYW16bjEuYXNrLnNraWxsLjBiZWVkMGU2LTUxYTEtNGM2ZC1hYzMzLWZmYzU5MTc4NjViNyIsImV4cCI6MTUxOTc3MDI0OSwiaWF0IjoxNTE5NzY2NjQ5LCJuYmYiOjE1MTk3NjY2NDksInByaXZhdGVDbGFpbXMiOnsiY29uc2VudFRva2VuIjpudWxsLCJkZXZpY2VJZCI6ImFtem4xLmFzay5kZXZpY2UuQUcyUTNOU0hZSTNLQUhPRVNXQkVMVVNEN0dCQVJNUk9QSkk2TldOV01CSFROR01LM1RDS1A1UE5EQVMyQU4zNEpXQ0NJS1VSWDI0RU1GQ1RSTUpaR0lYU0EyWUJDU0RPT09GUTUyUEdDWkdGREszUklVRTZPSzJaNUg3WUlZQk5CRFU3VU41VUwyUE1YQVVFSzJJV0hJTFM3U0ZRIiwidXNlcklkIjoiYW16bjEuYXNrLmFjY291bnQuQUdDTUxGWlpFTlBYT1BWSk5CWllFM01FQVRVTUZJREJaU0FCWUZYT1JUWVgyTkg1RFlUS1IyWUdSTkVIU0tEQ1FDV0EzUTMzR0lIWklLVkk0N0dPTjM2VEVFM1hTTlhBU0ZZWU5TNDZPWEFFQUhDM00zUU1PRkVHSDI2Q0NPN1ZEVEVFVzVXSlc0VklKVllDMlhVUEhUSTczTjdaSTVJS0g2Nk1PTVg1WFFUSEtVVlJMUE9BSzRaUEpBTExaV0ZKT1Q0UERRWFpQM01WQkZBIn19.aKkY8UG0vSs-uP5IoOk-3_MflWI-d9KpIcWSba8YZSEGulOUeyJjHx9qfouOBO3o8WjqeMdLiE1agu6GohXaGeV4jFty9wpg2_Cp_RIAqSpPm-THDt48yRK_6O7PXZjVzgtUUrg81Gi8uceDy7bY42bP7_if5JDpTFLfRxuo7Cj5PmjhqA9aKpdV0PTUWCo6BFrOC9EoNZqjxt-MZrHyR0UQDIO4Ly-y-WfVIf4wqD_VR7YL3f9MW81UcH0XGA6G9_xwvKBsA-VlkideSqudnynM1fUb68HY42qzRn7AzlUPvTcu7ZUuJudc_hTyHDXmcB8J2XBkMWsZJLJCR8NlMA"
}
}
正如您所看到的,permissions
对象中没有users
对象,其他任何地方都没有token
。我唯一看到的是apiAccessToken
当我尝试使用它时,根本没有发生任何事情。没什么,我的意思是,我的以下控制台日志都没有被击中:
const lms = new Alexa.services.ListManagementService();
lms.createList(listObj, token)
.then((data) => {
console.log(`list retrieved: ${JSON.stringify(data)}`);
this.context.succeed();
})
.catch((err) => {
console.log(err.message);
});
去了应用程序,没有列表。我假设它失败了?我无法知道,因为没有控制台日志被告知我是否成功或错误(假设错误)。
有人可以向我解释如何获得所需的令牌吗?这些列表会自动显示在配套应用中吗?我确实读过他们应该阅读的地方,但同样,文档显然不是最新的,我只是想知道会发生什么以及如何查看这是否有效。
答案 0 :(得分:1)
这里的问题是您无权阅读list
。因此,user.permissions.consentToken是未定义的
尝试下载Alexa应用程序,并以我的Amazon用户身份登录。
在调用api之前,我会请求权限(在本示例中,该卡要求获得用户电子邮件的权限同意)
{"type": "AskForPermissionsConsent",
"permissions": [
"alexa::profile:email:read" //replace with the permissions that you need
])}
该应用程序的家应该出示一张允许访问的卡。因此,您可以获得具有正确权限的apiAccessToken和user.permissions.consentToken。