我正在尝试使用邮递员测试将事件发送到Amazon Event Gateway以获得我的Alexa Smart Home技能,但是我一直收到“无效的访问令牌异常”。我已经阅读了亚马逊的文档,但是显然我缺少了一些东西。
启用技能后,我的Smart Home Lambda会收到AcceptGrant。
{ "directive": { "header": { "namespace": "Alexa.Authorization", "name": "AcceptGrant", "messageId": "b2862179-bc56-4bb2-ac05-ce55c7a3e977", "payloadVersion": "3" }, "payload": { "grant": { "type": "OAuth2.AuthorizationCode", "code": "ANSVjPzpTDBsdfoRSyrs" }, "grantee": { "type": "BearerToken", "token": "Atza|IwEB..." } } } }
我的lambda将POST发送到“ https://api.amazon.com/auth/o2/token ”,以接收访问和刷新令牌。然后,它将存储这些令牌。接下来,我的Lamdba会回应以下内容:
{ "event": { "header": { "namespace": "Alexa.Authorization", "name": "AcceptGrant.Response", "messageId": "b2862179-bc56-4bb2-ac05-ce55c7a3e977", "payloadVersion": "3" }, "payload": {} } }
然后,我得到一个消息网页,我已成功链接了我的技能-一切都很好。
接下来,我尝试使用Postman应用将事件发送到Amazon的Alexa事件网关。我将Access令牌(我也尝试过Refresh令牌)放在标头中,作为“ BearerToken”类型,并将其放在“端点”对象的“ 作用域 ”中。
POST https://api.amazonalexa.com/v3/events?Content-Type=application/json&charset=UTF-8 ,其标头指定了Bearer令牌(之前收到的访问令牌),并且正文包含以下内容:
{ "event": { "header": { "messageId": "abc-123-def-456", "namespace": "Alexa", "name": "ChangeReport", "payloadVersion": "3" }, "endpoint": { "scope": { "type": "BearerToken", "token": "<access token>" }, "endpointId": "MySmartSwitch-001" }, "payload": { "change": { "cause": { "type": "RULE_TRIGGER" }, "properties": [ { "namespace": "Alexa.ModeController", "name": "mode", "value": "Backup", "timeOfSample": "2020-01-02T09:30:00ZZ", "uncertaintyInMilliseconds": 50 } ] } } }, "context": { "properties": [ { "namespace": "Alexa.PowerController", "name": "powerState", "value": "ON", "timeOfSample": "2020-01-02T09:30:00Z", "uncertaintyInMilliseconds": 60000 }, { "namespace": "Alexa.EndpointHealth", "name": "connectivity", "value": { "value": "OK" }, "timeOfSample": "2020-01-02T09:30:00Z", "uncertaintyInMilliseconds": 0 } ] } }
收到的响应为“ 401未经授权”
{ "header": { "namespace": "System", "name": "Exception", "messageId": "95bd23c3-76e6-472b-9c6d-74d436e1eb61" }, "payload": { "code": "INVALID_ACCESS_TOKEN_EXCEPTION", "description": "Access token is not valid." } }