【问题标题】:How to get a message from self hosted custom Microsoft Teams bot?如何从自托管的自定义 Microsoft Teams 机器人获取消息?
【发布时间】:2017-05-18 11:58:07
【问题描述】:

我一直在努力解决这个问题太久了;

我想要一个设置在哪里

  • 我在 Node.js 中编码
  • 我运行本地服务器
  • 在我可以回复的频道中接收提及对自定义机器人的回复

我成功了

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

我没办法

  • 在提到机器人时捕获实际的消息字符串或其他有用信息

我已经搜索了多种资源,但运气不佳,这可以用最简单的形式解释你是如何做到的;启动一个 Node.js 应用程序,该应用程序侦听来自自定义机器人的传入请求,对其进行解析以获取消息字符串,然后将其发送回通道。

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

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 格式的控制台输出(这也意味着机器人至少正在捕获请求。但是数据中没有任何内容与消息对应,类似于找到的示例在此处提到的“入站消息示例”中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:接收 - 未发送安全令牌。

我怀疑这与我尝试使用为 Office 商店制作的连接器解析自定义机器人的请求有关。我对将此机器人发布到任何商店都不感兴趣。我只需要一个可以对消息做出反应和响应的自托管机器人。

我是在寻找错误的地方还是没有正确地探索这个?关于自定义机器人的讨论很少,我保证我会做示例代码来描述如何处理这种情况,如果最终有什么可行的话。

【问题讨论】:

    标签: node.js botframework


    【解决方案1】:

    最后我在 StackOverflow 上找到了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 格式的字符串来使用!亚斯!

    【讨论】:

      猜你喜欢
      • 2018-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-12
      • 2018-05-07
      • 1970-01-01
      • 2021-11-02
      • 2018-06-05
      相关资源
      最近更新 更多