-
Notifications
You must be signed in to change notification settings - Fork 83
/
server.js
141 lines (115 loc) · 3.94 KB
/
server.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
"use strict";
const fs = require('fs');
const restify = require('restify');
const builder = require('botbuilder');
let bot;
let verbose = CONFIG.server.verbose;
const route = (callback, options, server) => {
let opt = options || {};
// Add GET path for debugging
server.get('/api/v1/messages/', (req, res, next) => {
res.send("Hello I'm a Bot !");
return next();
});
// Add ChatBot connector
let mscfg = {};
if (opt.appId){
mscfg.appId = opt.appId
mscfg.appPassword = opt.appPassword
} else if (CONFIG.microsoft){
mscfg.appId = CONFIG.microsoft.bot.appId
mscfg.appPassword = CONFIG.microsoft.bot.appPassword
}
let connector = new builder.ChatConnector(mscfg);
/*
connector.getAccessToken((err, accessToken) => {
console.log('AccessToken',err, accessToken)
})*/
server.post('/api/v1/messages', /*connector.listen()*/ (req, res) => {
connector.listen()(req, res);
});
bot = bindConnector(connector, opt);
callback(undefined, bot);
};
const bindConnector = exports.bindConnector = (connector, options) => {
let bot = new builder.UniversalBot(connector, {
persistUserData: false,
persistConversationData: false,
autoBatchDelay: 0,
storage: new builder.MemoryBotStorage(),
localizerSettings: {
botLocalePath: "./locale",
defaultLocale: options.defaultLocale || "fr_FR"
}
});
// Put bot as a global variable
// global.botbuilder = bot;
// Anytime the major version is incremented any existing conversations will be restarted.
bot.use(builder.Middleware.dialogVersion(
{
version: 1.0,
resetCommand: options.resetCommand || /^reset/i
}
));
// Logging Middleware
if (verbose) {
bot.on('incoming', (msg) => {
if (!msg.address || !msg.address.serviceUrl) return;
info("Message incoming:" + JSON.stringify(msg) );
});
bot.on('send', (msg) => {
if (!msg.address || !msg.address.serviceUrl) return;
info("Message outgoing:" + JSON.stringify(msg));
});
}
bot.on('error', (err) => { console.log("Message error:", err); })
return bot;
}
let server;
const createServer = (callback, options, RED) => {
let opt = options || {};
let srv = opt.port ? opt : CONFIG.server;
if (!srv || !srv.port){
if (verbose) info('Missing server configuration, fallback on Node-RED server')
return callback(undefined, RED.httpNode);
}
// Configure server with credentials if any
let cfg = {};
if (srv.certificate){
cfg.certificate = fs.readFileSync(srv.certificate.crt);
cfg.key = fs.readFileSync(srv.certificate.key);
if (srv.certificate.intermediate)
cfg.ca = [fs.readFileSync(srv.certificate.intermediate)];
}
// Create server
server = restify.createServer(cfg);
// Trap errors
server.on('error', function(err){
error(err.message);
callback(err);
});
// Start listening on port
server.listen(opt.port || CONFIG.server.port, () => {
if (verbose) info('Server "' + server.name + '" listening to ' + server.url);
// Serve static files
let root = process.cwd() + '/webapp/';
if (verbose) info("Serve static files on "+ root);
server.get(/\/static\/?.*/, restify.serveStatic({
directory: root,
default: 'index.html',
charSet: 'utf-8',
}));
callback(undefined, server);
});
}
exports.start = (callback, options, RED) => {
createServer((err, server)=>{
if (err) return callback(err);
route(callback, options, server)
}, options, RED)
}
exports.stop = () => {
if (undefined == server) return;
if (verbose) info('Closing HTTP server');
server.close();
}