【问题标题】:How to start a conversation from nodejs client to microsoft bot如何开始从 nodejs 客户端到 microsoft bot 的对话
【发布时间】:2018-02-21 07:46:52
【问题描述】:

我正在尝试构建一个应用程序,该应用程序将向基于 Directline lib 的 Microsoft bot 框架上的聊天发送消息,并回复答案。该应用程序是一个 Web 应用程序,应发送一个 POST 请求,该请求应将消息转发到机器人客户端,并回复来自 Microsoft 机器人框架的机器人响应。

HTTP POST 请求示例:

http://host:port/api/message 正文: {消息:“嗨”}

它应该将 “Hi” 作为文本发送到 Microsoft 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)

})

【问题讨论】:

    标签: node.js azure bots botframework chatbot


    【解决方案1】:

    不清楚您遇到的问题,但我建议您查看Node.js Direct Line sample

    【讨论】:

    • 我已经检查过了,但没有解决我想要的问题。让我试着重新解释一下。我希望能够从 http 客户端发送一个 post 请求,其中正文中的文本为 json ,因此它将通过 bot 客户端传递消息,并应以 bot 回复进行响应。
    • 但是使用 DirectLine?或与机器人交谈的 REST API?你没有解释你的问题是什么
    • 我希望公开我自己的 REST API 服务以支持简单的对话,因此当您发送带有消息的简单标准 POST 请求时,将通过机器人客户端传递消息。 bot 客户端应与 Microsoft frameworks bot 与直线 api 对话。这是对话的另一层,我正在尝试构建的更简单的层。
    • 对,还是不清楚是什么问题。 Direct Line 图层已在我发送给您的示例中构建,因此只需在其上添加图层即可
    • 我已经尝试了上面附加的示例,上面有我的 http,但它没有工作......我添加了我使用该方法时遇到的异常
    猜你喜欢
    • 2016-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-18
    相关资源
    最近更新 更多