Я занимаюсь разработкой Alexa Skill, используя AWS lambda и ask-sdk. В этом навыке мне нужно общаться с помощью mqtt, я добавил библиотеку mqtt в проект. Для этого типа связи нам нужна асинхронная связь. Я следую следующему руководству Amazon: https://developer.amazon.com/blogs/alexa/post/4a46da08-d1b8-4d8e-9277-055307a9bf4a/alexa-skill-recipe-update-call-and-get-data-from-external-apisblog
Руководство объясняет HTTP-связь, я не могу работать с MQTT.
Структура моего проекта:
const Alexa = require('ask-sdk');
const BienvenidaHandler = {
canHandle(handlerInput) {
const request = handlerInput.requestEnvelope.request;
return request.type === 'LaunchRequest';
},
handle(handlerInput) {
return handlerInput.responseBuilder
.speak('Hello MQTT ')
.reprompt('wait') //Para que no se cierre la sesión tras la bienvenida.
.withSimpleCard(SKILL_NAME, 'Bienvenido')
.getResponse();
},
};
const ConversorHandler = {
canHandle(handlerInput) {
const request = handlerInput.requestEnvelope.request;
return request.type === 'IntentRequest'
&& request.intent.name === 'Conversor';
},
handle(handlerInput) {
**//HERE WE MUST SUBSCRIBE/PUBLISH to the BROKER.**
var mqtt = require('mqtt')
var client = mqtt.connect('mqtt://test.mosquitto.org')
var texto = 'No data'
client.on('connect', function () {
client.subscribe('presence', function (err) {
if (!err) {
client.publish('presence', 'Hello mqtt')
}
})
})
client.on('message', function (topic, message) {
// message is Buffer
console.log(message.toString())
texto = message.toString()
client.end()
})
**//ALEXA SPEAK WITH MQTT DATA. (DOES NOT WORK)**
return handlerInput.responseBuilder
.speak('test mqtt, '+texto)
.reprompt(HELP_REPROMPT)
.getResponse();
},
};
...
const skillBuilder = Alexa.SkillBuilders.standard();
exports.handler = skillBuilder
.addRequestHandlers(
BienvenidaHandler,
ConversorHandler,
HelpHandler,
ExitHandler,
SessionEndedRequestHandler
)
.addErrorHandlers(ErrorHandler)
.lambda();
Этот способ чтения MQTT не работает. Alexa должна говорить с данными MQTT, но для чтения нам нужна асинхронная функция, когда Alexa говорит, у нас нет данных MQTT.
Знаете ли вы, как я могу читать данные MQTT с помощью Alexa Skill?
Спасибо.