我正在研究Alexa技能,有时需要一段时间才能做出回应。有时它会在后台运行脚本,打开电视,连接蓝牙设备等。一旦完成所有自动化,成功的响应可能需要20多秒。
在网络上,当有长时间运行的请求时,我们习惯于看到一个进度条,或者至少是一个带有消息的动画微调器,告诉您等待,或者进程正在进行中。我需要Alexa类似的东西。
我希望Alexa在触发HTTP请求之前将TWICE响应为SINGLE一次,并在收到响应之后响应一次。示例对话将是:
[用户]:Alexa,告诉[app name]切换到影院模式。
[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在没有关闭会话的情况下提前回复,并且在功能完成后再次回复。
答案 0 :(得分:1)
据我所知,你只能有一个语音输出,我不认为你可以注入任何类型的wait up one sec
逻辑。您可以通过将任务分解成更小的部分,将它们链接在一起并让Alexa在每个阶段通知用户来解决这个问题吗?
答案 1 :(得分:0)
在您的任务正常工作时,也许您可以使用audioplayer界面播放一些音乐和/或您可以通过语音输出通知用户长时间运行的任务。