2017-09-12 15 views
0

我正在尝试构建一个应用程序,该应用程序可以将消息发送到基于Directline lib的Microsoft bot框架上的聊天并回复答案。该应用程序是一个Web应用程序,应该发送一个POST请求,该请求应该将消息转发给机器人客户端,并回复来自Microsoft bot框架的机器人响应。如何启动从nodejs客户端到微软机器人的对话

HTTP POST请求的示例:

http://host:port/api/message BODY: {消息: “您好”}

应该发送“嗨”作为文本到相关聊天机器人在微软Bot框架并回复以往的框架回复。

我已经把秘密和所有我认为我应该完成的工作,但是,我有问题产生一个对话,应该与聊天机器人聊天。

这是我做的:

"use strict"; 

require('dotenv').config(); 

var express = require('express'); 
var app = express(); 
var fs = require("fs"); 
var bodyParser = require("body-parser"); 
var http = require('http'); 
var postLib = require("./lib"); 

var messageFilePath="message.out"; 

var cors = require('cors'); 
var uuid = require('uuid'); 

//new botclient 
var client = require('directline-api'); 

// config items 

var pollInterval = 1000; 
var directLineSecret = 'secret'; 
var directLineClientName = 'DirectLineClient'; 
var directLineSpecUrl = 'https://docs.botframework.com/en-us/restapi/directline3/swagger.json'; 

///bot client end 


var sendmail = require('sendmail')({silent: true}) 

app.use(bodyParser.urlencoded({extended: true})); 
app.use(bodyParser.json()); 

app.options('*', cors()); // include before other routes 
var corsOptions = { 
    origin: '*', 
    optionsSuccessStatus: 200 // some legacy browsers (IE11, various SmartTVs) choke on 204 
}; 

    app.post('/interact/message', cors(corsOptions), function(req, res) { 
       var uuid1 = uuid.v1(); 
       var bodyMessage = JSON.stringify(req.body); 
       var log = uuid1 + ', ' + new Date().getTime() + ", " + bodyMessage; 
       if (req.query.botId == 1) { 
         emailMessage(log); 
         res.send(postLib.reply.reply); 
       } 
       if (req.query.botId == 2) { 
         botMessage(bodyMessage.message); 
         res.send(postLib.reply.reply); 
       } 

}); 




function emailMessage(log){ 

       sendmail({ 
         from: postLib.mail.from, 
         to: postLib.mail.to, 
         subject: postLib.mail.subject, 
         html: 'this is the log: [' + log + ']', 
         }, function(err, reply) { 
         console.log(err && err.stack); 
         console.dir(reply); 
       }); 


       fs.appendFile(messageFilePath, "\n" + log, function(error){ 
         if (error) throw error; 
       }); 
} 


function botMessage(message){ 

var token = client.getToken(directLineSecret); 

// create a conversation 
var conversationId = client.createConversation(token); 

// post a message in a conversation 
client.postMessage(token, conversationId, { 
       text: message 
      }); 
return client.getMessage(token, conversationId, 0); 
} 

var server = app.listen(8082, function() { 

    var host = server.address().address 
    var port = server.address().port 

    console.log("interact post server listening at http://%s:%s", host, port) 

}) 

回答

2

目前还不清楚,您有,但我建议你检查Node.js Direct Line sample问题。

+0

我已经检查过,没有设法解决我想要的。让我试着重新解释一下。我希望能够从http客户端发送发送请求,并在主体中将文本作为json发送,因此它将通过bot客户端传递消息,并且应该使用bot回复进行响应。 – user4860092

+0

但使用DirectLine?或REST API与机器人交谈?你没有解释你的问题 –

+0

我想让我自己的其他API服务支持一个简单的对话,所以当你发送一个简单的标准POST请求时,其中的消息将通过bot客户端传递消息。僵尸客户端应该使用直接api与Microsoft框架僵尸工具进行交流。这是另一种对话层,我试图建立一个更简单的层。 – user4860092

相关问题