Как вы можете транслировать ответы в Alexa Skill Kit (ASK)

Я пытаюсь создать приложение 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);
    }
}

person Seth McClaine    schedule 06.01.2016    source источник
comment
Используйте event-source-stream.   -  person edin-m    schedule 07.01.2016
comment
В чем разница между источником события и потоком источника события, и чем это отличается в ASK?   -  person Seth McClaine    schedule 07.01.2016
comment
Не знаю насчет ASK, но EventSource недоступен в node.js только в браузере. Таким образом, существует npm polyfill для EventSource и EventSourceStream, который оборачивает первый в потоковый API, чтобы вы могли .pipe() его или просмотреть .on('data', ... для него.   -  person edin-m    schedule 07.01.2016
comment
Ok. Но у меня есть EventSource, работающий в моем примере node.js. Мои проблемы в том, что я не могу получить более одного речаутпуттипе за взаимодействие   -  person Seth McClaine    schedule 07.01.2016


Ответы (2)


То, что вы пытаетесь сделать, в настоящее время невозможно на платформе ASK.

Невозможно заставить Алексу что-то сказать без предварительного запроса. Alexa поддерживает диалог и не может прервать пользователя.

Хотя может показаться, что то, что вы хотите сделать, возможно в коде, основанном на асинхронной природе node.js, ваш навык вызывается синхронно Amazon на основе заданного намерения, и вы просто предоставляете ответ. ASK не предоставляет механизм, с помощью которого вы можете передать что-либо Alexa, чтобы она сказала.

Это означает, что вы должны сформировать свой полный ответ, прежде чем Алекса действительно что-то скажет. Повторюсь, это потому, что Amazon вызывает ваш навык с намерением и ожидает ответа. После того, как вы вернете этот ответ с помощью response.tell, вы не сможете заставить Alexa сказать что-либо еще, пока не получите еще один запрос Intent от Amazon.

person JaredHatfield    schedule 06.03.2016
comment
Вы знаете, что они транслируют музыку? Как они связывают несколько ответов таким образом? - person Seth McClaine; 07.03.2016
comment
Если бы мне пришлось догадываться, приложения для потоковой передачи музыки на Alexa не построены поверх ASK так же, как функции подключенного дома не построены поверх ASK. - person JaredHatfield; 07.03.2016

Это поздно, но, возможно, будет полезно другим. Хотя вы не можете сделать это с ASK, вы можете с AVS. Это означало бы создание собственного Echo с помощью Raspberry Pi или чего-то подобного, но это будет делать то, что вы ищете. Вместо того, чтобы быть постоянным открытым потоком, вы бы запускали дискретный ответ для каждого происходящего события. Вы можете проверить этот хакстерский проект, который делает что-то подобное. В моем случае код, работающий на RPI, ожидает события. При нажатии кнопки IOT Alexa произносит соответствующий ответ.

person Dana    schedule 22.01.2017