Node.js 如何从自托管自定义Microsoft团队bot获取消息?

Node.js 如何从自托管自定义Microsoft团队bot获取消息?,node.js,botframework,Node.js,Botframework,我在这上面撞了很久了 我想要一个安装在哪里 我在Node.js中编写代码 我运行本地服务器 在一个我可以回复的频道中捕捉来自对自定义机器人的提及的回复 我设法做到了 Node.js中的代码 运行本地服务器(使用restify或https) 我已设法将请求发送到Node.js实现 我还没想好 当提到bot时,捕获实际的消息字符串或其他有用的信息 我已经搜索了很多资源,但运气不好,这可以用最简单的形式解释你是如何做到的;启动Node.js应用程序,该应用程序侦听来自自定义bot的传入请求

我在这上面撞了很久了

我想要一个安装在哪里

  • 我在Node.js中编写代码
  • 我运行本地服务器
  • 在一个我可以回复的频道中捕捉来自对自定义机器人的提及的回复
我设法做到了

  • Node.js中的代码
  • 运行本地服务器(使用restify或https)
  • 我已设法将请求发送到Node.js实现
我还没想好

  • 当提到bot时,捕获实际的消息字符串或其他有用的信息
我已经搜索了很多资源,但运气不好,这可以用最简单的形式解释你是如何做到的;启动Node.js应用程序,该应用程序侦听来自自定义bot的传入请求,对其进行解析以获取消息字符串,然后将其发送回频道

这里有一些代码可以转储我得到的响应

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至少正在捕获请求。但是与消息对应的数据中没有任何内容,类似于这里提到的“示例入站消息”中的示例

执行以下代码切换时

---- 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:接收-未发送安全令牌

我怀疑这与我正在尝试使用为Office应用商店制作的连接器解析自定义bot的请求有关。我对将此bot发布到任何应用商店不感兴趣。我只需要一个能够响应消息的自托管bot

我是找错地方了还是没找准?关于定制机器人的讨论很少,我保证,如果最终有什么东西能起作用,我会编写示例代码来描述如何处理这种情况。

最后,我在StackOverflow上找到了最终让我走上正轨的东西

获取要处理的消息的最终结果

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格式的字符串来使用!Yass