如何从自我托pipe的自定义Microsoft团队机器人获取消息?

我一直在这个头上撞了太久,

我想要一个设置在哪里

  • 我在Node.js中编码
  • 我运行本地服务器
  • 在提到的渠道中,我们可以回复提到的自定义机器人

我已经设法

  • 在Node.js中的代码
  • 运行本地服务器(使用restify或https)
  • 我设法得到一个请求发送到我的Node.js实现

我没有设法

  • 抓住机器人提到的实际消息string或其他有用的信息

我已经淘汰了多个资源,没有太多的运气,这将解释你最简单的forms; 启动一个Node.js应用程序,它监听来自自定义bot的传入请求,parsing它以获取消息string,然后将其发送回通道。

以下是一些转储我得到的响应的代码

const fs = require('fs'); var restify = require('restify'); var builder = require('botbuilder'); const https_options = { key: fs.readFileSync('[redacted].key'), cert: fs.readFileSync('[redacted].pem') }; // Setup Restify Server var server = restify.createServer(https_options); server.listen(process.env.port || process.env.PORT || 8080, function () { console.log('%s listening to %s', server.name, server.url); }); // Create chat connector for communicating with the Bot Framework Service var connector = new builder.ChatConnector({ appId: process.env.MICROSOFT_APP_ID, appPassword: process.env.MICROSOFT_APP_PASSWORD }); // Listen for messages from users server.post('/api/messages', function (request, response, next) { console.log(request); }); // Receive messages from the user and respond by echoing each message back (prefixed with 'You said:') var bot = new builder.UniversalBot(connector, function (session) { session.send("You said: %s", session.message.text); }); 

当端点被击中时,这给了我一个1850行的JSON格式的控制台输出(这也意味着bot至less捕获请求,但是数据中没有任何与消息相对应的东西,类似于“Example入站消息“在这里提到https://msdn.microsoft.com/en-us/microsoft-teams/custombot

进行下面的代码切换时

 ---- replacing this ---- // Listen for messages from users server.post('/api/messages', function (request, response, next) { logger.debug(request); }); ---- with this ---- // Listen for messages from users server.post('/api/messages', connector.listen()); 

结果是

错误:ChatConnector:接收 – 没有发送安全令牌。

我怀疑这有什么关系,我试图parsing一个自定义机器人的请求与Office商店的连接器。 我不对任何商店发布这个机器人感兴趣。 我只需要一个自己托pipe的机器人,可以对消息作出反应和回应。

我是在错误的地方看还是不看这个权利? 关于自定义机器人的讨论太less了,我保证我会做示例代码来描述如何处理这种情况,如果最终有效的话。

最后,我在StackOverflow上find了https://stackoverflow.com/a/8640308/975641 ,终于让我走上了正轨!

获取消息进行处理的最终结果

 const fs = require('fs'); var restify = require('restify'); const https_options = { key: fs.readFileSync('[redacted].key'), cert: fs.readFileSync('[redacted].pem') }; var handler = function (request, res) { if (request.method === 'POST') { var body = ''; request.on('data', function (data) { body += data; // 1e6 === 1 * Math.pow(10, 6) === 1 * 1000000 ~~~ 1MB if (body.length > 1e6) { // FLOOD ATTACK OR FAULTY CLIENT, NUKE REQUEST request.connection.destroy(); } }); request.on('end', function () { console.log(body) // use POST }); } res.writeHead(200, {'Content-Type': 'application/json'}); //res.end(parseCommands(req)); res.end(`{ "type": "message", "text": "This is a reply!" }`); }; // Setup Restify Server var server = restify.createServer(https_options); server.listen(process.env.port || process.env.PORT || 8080, function () { console.log('%s listening to %s', server.name, server.url); }); // Listen for messages from users server.post('/api/messages', handler); 

这会给你一个JSON格式的string来处理! 亚斯!