2016-01-06 59 views
2

我试图建立一个ASK(Alexa的技术工具包)的应用程序,因为他们进来,基本读出的消息。你怎么能在Alexa的技能套件流反应(ASK)

我已经尝试的代码测试这个到目前为止是:

function handleObserveFlowIntentRequest(intent, session, response) { 
    var callback = function (message) { 
     response.tell({ 
      speech: message, 
      type: AlexaSkill.speechOutputType.PLAIN_TEXT 
     }); 
    }; 
    callback("One Observe Flow"); 
    callback("Two Observe Flow"); 
} 

我只能够得到第一回调输出"One Observe Flow"

最终我想要的回应基本上做这样的事情:

function handleObserveFlowIntentRequest(intent, session, response) { 
    var callback = function (message) { 
     response.tell({ 
      speech: message, 
      type: AlexaSkill.speechOutputType.PLAIN_TEXT 
     }); 
    }; 
    var jsonStream = new EventSource(::myApiUrl::); 
    jsonStream.onmessage = function (e) { 
     callback(e.data.message); 
    } 
} 
+1

使用[event-source-stream](https://www.npmjs.com/package/event-source-stream)。 –

+0

事件源与事件源流之间的区别是什么,以及ASK中的不同之处如何? –

+0

我不知道ASK,但''''''''''''''''只有在浏览器中'''node.js''中不可用。所以'''''''''EventSource''和'''''''''''''''''''npm'''填充将''第一个换成流api,这样你就可以'''''' '''.on('data',...'''为它。 –

回答

4

你现在想在ASK平台上做什么是不可能的。

如果没有第一次被提示,就不可能让Alexa说些什么。 Alexa是会话式的,不能中断用户。

虽然它看起来像是基于node.js的异步特性在代码中执行的,但您的技能正在由Amazon基于给定的Intent同步调用,而您只是简单地提供响应。 ASK没有提供一种机制让你向Alexa推送一些东西。

这意味着你必须在Alexa实际说出任何内容之前形成你的整个回应。重申一下,这是因为亚马逊以一种意图来称呼你的技能并期望得到回应。在您使用response.tell返回该响应之后,您不能让Alexa说出其他任何内容,直到您收到来自Amazon的另一个Intent请求。

+0

你知道他们流音乐吗?他们如何以这种方式将多个响应绑定在一起 –

+0

如果我不得不猜测,Alexa上的音乐流媒体应用程序不是建立在ASK之上的,就像未建立连接的家庭功能一样在ASK之上。 – JaredHatfield

-1

这样晚了,但也许会对其他人有用。虽然你不能用ASK来做,但你可以用AVS。这意味着用树莓派或类似的东西来构建自己的Echo,但它会做你正在寻找的东西。它不是一个常开的流,而是为每个发生的事件触发一个离散的响应。您可以查看this hackster project I did,它做了类似的事情。就我而言,运行在RPI上的代码等待一个事件。当按下IOT按钮时,Alexa会说出相应的回应。