2

我正在尝试构建一个 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);
    }
}
4

2 回答 2

4

目前,在 ASK 平台上,您尝试做的事情是不可能的。

在没有事先提示的情况下,不可能让 Alexa 说些什么。Alexa 是对话式的,无法打断用户。

尽管基于 node.js 的异步特性,您可能希望在代码中执行此操作,但亚马逊会根据给定的 Intent 同步调用您的技能,而您只是提供响应。ASK 没有提供一种机制让您将某些内容推送到 Alexa 以供其说出。

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

于 2016-03-06T13:56:20.250 回答
-1

这已经很晚了,但可能对其他人有用。虽然你不能用 ASK 做到这一点,但你可以用 AVS。这意味着用树莓派或类似的东西构建你自己的 Echo,但它会做你想要的。它不是一个恒定的开放流,而是为每个发生的事件触发一个离散的响应。你可以看看我做的这个黑客项目,它做了类似的事情。在我的例子中,在 RPI 上运行的代码等待一个事件。当按下 IOT 按钮时,Alexa 会发出相应的响应。

于 2017-01-22T06:29:48.680 回答