Microsoft Bot Framework - 如何从第三方API发送响应

时间:2017-07-27 20:46:13

标签: javascript node.js botframework

使用Microsoft Bot Framework,如何在传入和传出机器人消息之间代理API?

我已经取代了:

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

使用我自己的实现,该实现需要req.body.text并将其发送到单独的端点。

如何将该端点响应发送回聊天?

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?
  })
})

更新

为了指出为什么Ezequiel Jadib的答案不起作用,我已经添加了完整的代码。 req未在机器人的回调函数中定义。

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)
  })
})

2 个答案:

答案 0 :(得分:1)

首先,我认为您应该浏览documentation for Node.js,因为这个问题似乎与SDK的基础有关。

然后,我认为您在错误的地方呼叫您的终端。您应该在UniversalBot的功能中执行此操作,而不是在帖子上执行此操作,而UniversalBot基本上是接收用户消息的位置。

您可以尝试以下内容:

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 :(得分:1)

您可以使用Bot Builder Node.js SDK的中间件功能拦截消息。

来自文章Develop with Node.js > Messages > Intercept Messages

  

Bot Builder SDK中的中间件功能使您的机器人能够拦截用户和机器人之间交换的所有消息。对于每个被拦截的消息,您可以选择执行诸如将消息保存到您指定的数据存储,创建对话日志或以某种方式检查消息并执行代码指定的任何操作等操作。

您可以通过配置bot.use()方法来定义处理截获消息的中间件功能。

示例:

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();
    }
});

作为参考,您可以在这里找到一个演示中间件功能的工作示例机器人: https://github.com/Microsoft/BotBuilder-Samples/tree/master/Node/capability-middlewareLogging