Usando Microsoft Bot Framework, ¿cómo se puede hacer proxy de una API entre los mensajes bot entrantes y salientes?

He reemplazado:

server.post('/api/messages', connector.listen());

Con mi propia implementación que toma req.body.text y lo envía a un punto final separado.

¿Cómo puedo enviar esa respuesta de endpoints al chat?

server.post('/api/messages', (req, res, next) => {
  request.post('endpoint', {
    json: {"text": req.body.text},
  }, (error, response, body) => {
    // how to send body as an outgoing chat message?
  })
})

Actualizar:

Para señalar por qué la respuesta de Ezequiel Jadib no funciona, agregué el código completo. req no está definido dentro de la función de devolución de llamada del bot.

const restify = require('restify')
const builder = require('botbuilder')
const request = require('request')

// Setup Restify Server
const server = restify.createServer()
server.use(restify.plugins.bodyParser())
server.listen(process.env.port || process.env.PORT || 3978, function () {
   console.log('%s listening to %s', server.name, server.url) 
})

// Create chat connector for communicating with the Bot Framework Service
const connector = new builder.ChatConnector({
    appId: process.env.MICROSOFT_APP_ID,
    appPassword: process.env.MICROSOFT_APP_PASSWORD
})

server.post('/api/messages', connector.listen())

const bot = new builder.UniversalBot(connector, function (session) {
  request.post('endpoint', {
    json: {"text": req.body.text}
  }, (error, response, body) => {
    session.send(body)
  })
})
0
Raphael Rafatpanah 27 jul. 2017 a las 23:46

2 respuestas

La mejor respuesta

Primero, creo que deberías revisar la documentación para Node.js, ya que esta pregunta parece estar relacionada con los fundamentos del SDK.

Entonces, creo que está llamando a su terminal en el lugar equivocado. En lugar de hacerlo en la publicación, debes hacerlo en la función del UniversalBot que es básicamente donde se recibirán los mensajes de los usuarios.

Puedes probar algo como:

var bot = new builder.UniversalBot(connector, function (session) {
    request.post('endpoint', {
      json: {"text": session.message.text},
    }, (error, response, body) => {
        session.send("You said: %s", "your endpoint response");
   })
});
1
Ezequiel Jadib 27 jul. 2017 a las 21:54

Puede interceptar mensajes utilizando la funcionalidad de middleware del SDK de Node.js.

Del artículo Desarrollar con Node.js > Mensajes> Interceptar mensajes:

La funcionalidad de middleware en Bot Builder SDK permite que su bot intercepte todos los mensajes que se intercambian entre el usuario y el bot. Para cada mensaje que se intercepta, puede optar por hacer cosas como guardar el mensaje en un almacén de datos que especifique, que crea un registro de conversación, o inspeccionar el mensaje de alguna manera y tomar cualquier acción que especifique su código.

Puede definir la función de middleware que maneja el mensaje interceptado configurando el método bot.use().

Ejemplo:

bot.use({
    botbuilder: function (session, next) {
        // this function handles incoming messages sent to your bot
        next();
    },
    send: function (event, next) {
        // this function handles outgoing messages to your user(s)
        next();
    }
});

Como referencia, puede encontrar un bot de ejemplo funcional que demuestre la funcionalidad del middleware aquí: https://github.com/Microsoft/BotBuilder-Samples/ árbol / maestro / nodo / capacidad-middlewareLogging

1
nilsw 28 jul. 2017 a las 00:39