Node.js Alexa Skill在lambda、MQTT异步通信中开发

Node.js Alexa Skill在lambda、MQTT异步通信中开发,node.js,aws-lambda,mqtt,alexa-skills-kit,alexa-app,Node.js,Aws Lambda,Mqtt,Alexa Skills Kit,Alexa App,我正在使用AWS lambda和ask sdk开发Alexa技能。 在这项技能中,我需要使用mqtt进行通信,我将mqtt库添加到项目中。 要进行这种类型的通信,我们需要异步通信。 我遵循下一个亚马逊指南: 该指南解释了HTTP通信,但我没有让它与MQTT一起工作 我的项目结构如下: const Alexa = require('ask-sdk'); const BienvenidaHandler = { canHandle(handlerInput) { cons

我正在使用AWS lambda和ask sdk开发Alexa技能。 在这项技能中,我需要使用mqtt进行通信,我将mqtt库添加到项目中。 要进行这种类型的通信,我们需要异步通信。 我遵循下一个亚马逊指南:

该指南解释了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数据说话,但对于read,我们需要一个异步函数,当Alexa说话时,我们没有MQTT数据

您知道如何使用Alexa Skill读取MQTT数据吗

谢谢