为长期运行的Alexa响应添加一个声音“Ajax Spinner”

时间:2017-01-08 11:01:57

标签: asynchronous alexa alexa-skill

我正在研究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在没有关闭会话的情况下提前回复,并且在功能完成后再次回复。

2 个答案:

答案 0 :(得分:1)

据我所知,你只能有一个语音输出,我不认为你可以注入任何类型的wait up one sec逻辑。您可以通过将任务分解成更小的部分,将它们链接在一起并让Alexa在每个阶段通知用户来解决这个问题吗?

答案 1 :(得分:0)

在您的任务正常工作时,也许您可​​以使用audioplayer界面播放一些音乐和/或您可以通过语音输出通知用户长时间运行的任务。