【发布时间】:2017-12-16 20:41:02
【问题描述】:
我在使用服务模拟器测试我的 Alexa 技能时遇到了困难。如果我设置了appId,该技能将不起作用。以下是相关代码:
'use strict';
const Alexa = require('alexa-sdk');
var APP_ID = "amzn1.ask.skill.[my skill ID]";
exports.handler = function(event, context, callback) {
var alexa = Alexa.handler(event, context);
alexa.appId = APP_ID;
alexa.registerHandlers(handlers);
alexa.execute();
}
当我在服务模拟器中运行此代码时,我得到响应“无法调用远程端点,或者它返回的响应无效。” CloudWatch 日志中的错误消息:
The applicationIds don't match: applicationId and amzn1.ask.skill.[my skill id]
"errorMessage": "Invalid ApplicationId: amzn1.ask.skill.[my skill id]"
如果我注释掉设置 appId
//alexa.appId = APP_ID
模拟器似乎返回了一个有效的响应,但我在日志中看到了这个警告:
"Warning: Application ID is not set."
这是模拟器发送的 Lambda 请求:
{
"session": {
"sessionId": "SessionId.bb263d3e-2018-4aab-a0df-f945b3a25bf9",
"application": {
"applicationId": "amzn1.ask.skill.[my skill ID]"
},
"attributes": {},
"user": {
"userId": "amzn1.ask.account.[accountID]"
},
"new": true
},
"request": {
"type": "LaunchRequest",
"requestId": "EdwRequestId.d8b56c7f-63ea-48e8-8816-9b7c036d5816",
"locale": "en-US",
"timestamp": "2017-07-12T12:06:11Z"
},
"version": "1.0"
}
网上一些例子提示appId属性应该是APP_ID:
alexa.APP_ID = APP_ID;
但这似乎不正确。根据alexa-sdk源代码(无论如何都在尝试),该属性需要它是我实现的appId。
看起来问题与亚马逊模拟器创建的 json lambda 请求更相关。需要明确的是,这是 Amazon Alexa 开发者门户上的模拟器,而不是 AWS lambda 测试事件接口上的测试函数。
奇怪的是,如果我从 Amazon 模拟器剪切并粘贴 lambda 请求并从 AWS 测试界面运行它,它工作正常。
【问题讨论】: