我正在研究一种有时需要一段时间才能响应的 Alexa 技能。有时它会在后台运行脚本、打开电视、连接蓝牙设备等。一旦所有自动化完成,成功的响应可能需要 20 多秒。
在网络上,当有一个长时间运行的请求时,我们习惯于看到一个进度条,或者至少是一个动画微调器,上面有一条消息告诉请稍候,或者进程正在进行中。我需要 Alexa 类似的东西。
我希望 Alexa 对 SINGLE 意图做出两次响应,一次是在触发 HTTP 请求之前,一次是在收到响应后。一个示例对话是:
[用户]:Alexa,告诉[应用名称]切换到剧院模式。
[Alexa]:(立即)我在上面!挂紧。
(……20 秒后……)
[Alexa]:完成!剧院模式已成功激活。享受!
我在这里有一些在 lambda 上运行的代码:http: //jsfiddle.net/9gmszmku/embedded/js/
摘抄:
// ================
// [TODO] RESPONSE HERE: Alexa says: "I'm on it" or "hang on one second..." before getting the response from the http request
// ================
// this request may take many seconds!!!! Ain't nobody got time for staring at Echo for a response!!!
var req = http.request(options, (res) => {
console.log(`STATUS: ${res.statusCode}`);
console.log(`HEADERS: ${JSON.stringify(res.headers)}`);
res.setEncoding('utf8');
var rawData = '';
res.on('data', (chunk) => rawData += chunk);
res.on('end', () => {
try {
var parsedData = JSON.parse(rawData);
console.log(parsedData);
context.succeed(generateResponse(buildSpeechletResponse(parsedData.message, true), {}));
} catch (e) {
context.succeed(generateResponse(buildSpeechletResponse("Error Parsing", true), {}));
}
});
基本上,我想让 Alexa 在不关闭会话的情况下提前响应,并在功能完成后再次响应。