2017-05-18 11 views
1

私は長すぎるためにこれについて私の頭を叩いてきました。自己ホストカスタムMicrosoftチームからメッセージを受け取る方法は?

私はNode.jsので

  • 私のセットアップは、コード
  • 私が言及しているから、私はに対応できるチャネルでカスタムボットへのローカルサーバ
  • キャッチ応答を実行したいです私は

      に管理している

    私は私が管理していない私のNode.jsの実装

に送信された要求を得ることができたNode.jsので

  • コード
  • を実行し、ローカルサーバ(いずれかrestifyまたはhttpsを使用)
    • キャッチボットは、私がSを持って

    言及されている実際のメッセージ文字列または他の有用な情報へ多くの運を必要とせずに複数のリソースを枯渇させた。カスタムボットからの着信要求を待ち受けている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形式のコンソール出力を(与えを取得します。しかし、がありますコード

    ---- 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()); 
    
    の次のスイッチを行う場合、ここでhttps://msdn.microsoft.com/en-us/microsoft-teams/custombot

    を述べた「例の着信メッセージ」で見つかった例と同様のメッセージに対応したデータでは何もありません、

    結果は、私はこれは私がオフィス通販のために作られていますコネクタを持つカスタムボットの要求を解析しようとしているものとは何かを持っている疑いがある

    ERROR: ChatConnector: receive - no security token sent.

    です。私はどんな店にもこのボットを公開することには興味がありません。メッセージに反応して応答することができる自己ホストボットが必要です。

    私は間違った場所を探しているのですが、この権利を搾取していませんか?カスタムボットについての話はほとんどないので、最後に動作するものがあれば、このシナリオに対処する方法を説明するサンプルコードを実行することを約束します。

  • 答えて

    1

    最終的に私は最終的に私を得たStackOverflowのhttps://stackoverflow.com/a/8640308/975641を見つけました!

    これはあなたで動作するようにJSON形式の文字列を与える

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

    を処理するためのメッセージを取得するための最終的な結果!ヤス!

    関連する問題