如何在Alexa技能套件(ASK)中传输响应

时间:2016-01-06 19:37:18

标签: node.js alexa-skills-kit

我正在尝试构建一个ASK(Alexa Skill Kit)应用程序,以便在消息进入时基本上读取消息。

到目前为止,我试图测试的代码是:

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);
    }
}

2 个答案:

答案 0 :(得分:4)

目前在ASK平台上无法实现您的目标。

如果没有首先被提示,Alexa就不可能说出来。 Alexa是会话式的,无法打断用户。

虽然在基于node.js的异步性质的代码中可能看起来像你想做的事情,但是亚马逊基于给定的Intent同步调用你的技能,而你只是提供响应。 ASK没有提供一种机制让你把东西推到Alexa上去说。

这意味着您必须在Alexa实际说出任何内容之前形成您的整个回复。重申一下,这是因为亚马逊用Intent调用你的技能并期待回应。使用response.tell返回该响应后,除非您收到来自亚马逊的另一个Intent请求,否则您无法让Alexa说出任何其他内容。

答案 1 :(得分:-1)

这是迟到的,但可能会对其他人有用。虽然您无法使用ASK,但您可以使用AVS。这意味着用覆盆子pi等建立你自己的Echo,但它会做你想要的。而不是它是一个恒定的开放流,你会为每个发生的事件触发一个离散的响应。你可以看看this hackster project I did做类似的事情。在我的例子中,RPI上运行的代码等待事件。当按下IOT按钮时,Alexa会说出相应的响应。