2017-07-27 12 views
0

Microsoft Bot Frameworkを使用して、着信および発信ボットメッセージの間でAPIをプロキシする方法はありますか?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? 
    }) 
}) 

更新:エセキエル・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) 
    }) 
}) 
+0

使用session.message.textまたはsession.messageの代わりreq.body:参考

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

、あなたはここでミドルウェアの機能を実証作業例ボットを見つけることができます.text –

答えて

1

まず、私はこの質問は、SDKの基礎に関連すると思わとしてあなたがdocumentation for Node.jsて行くべきだと思います。

次に、間違った場所でエンドポイントに電話していると思います。ポストではなく、ユニバーサルボットの機能で行うべきです。ユニバーサルボットは基本的にユーザーメッセージを受信する場所です。あなたはボットビルダーのNode.js SDKのミドルウェアの機能を使用してメッセージを傍受することができます

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"); 
    }) 
}); 
+0

再度、ユーザーがメッセージを送信した後にリクエストを開始する必要があるため、これは質問には答えません。 'new builder.UniversalBot ... 'の外側に' server.post'を登録し、リクエストの内容を含むメッセージを送信できるようにする必要があります。 –

+0

そこでは、 "function(session)"が発生しています:基本的には、ユーザーが送信したメッセージを受け取ります。実際に、もしあなたがsession.send( "あなたが言ったのは:%s"、session.message.text)です。ユーザーメッセージをエコーし​​ます。 –

+0

あなたのソリューションがうまくいかないと思う理由を示すためのコードを追加しました。これが私の質問の本質です。 –

1

あなたのような何かを試すことができます。

記事Develop with Node.js > Messages > Intercept Messagesから:

ボットビルダーSDKのミドルウェア機能は、ユーザーとボットの間で交換されるすべてのメッセージを傍受するために、あなたのボットを可能にします。インターセプトされたメッセージごとに、指定したデータストアにメッセージを保存する、会話ログを作成する、メッセージを何らかの方法で検査し、コードで指定された操作を実行するなどの操作を行うことができます。

bot.use()メソッドを設定することで、インターセプトされたメッセージを処理するミドルウェア機能を定義できます。

例: https://github.com/Microsoft/BotBuilder-Samples/tree/master/Node/capability-middlewareLogging

関連する問題