alexa请求令牌未被传递

时间:2018-02-27 21:41:19

标签: node.js alexa alexa-skills-kit

真的只是惊讶于官方的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);
     });

去了应用程序,没有列表。我假设它失败了?我无法知道,因为没有控制台日志被告知我是否成功或错误(假设错误)。

有人可以向我解释如何获得所需的令牌吗?这些列表会自动显示在配套应用中吗?我确实读过他们应该阅读的地方,但同样,文档显然不是最新的,我只是想知道会发生什么以及如何查看这是否有效。

1 个答案:

答案 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。