Commit d993842325d80fc14724c6fbaa3fef26b0436e58

Authored by Adhidarma Hadiwinoto
1 parent f84bee2aff
Exists in master

debug

Showing 1 changed file with 21 additions and 1 deletions Inline Diff

1 var request = require('request'); 1 var request = require('request');
2 var http = require('http'); 2 var http = require('http');
3 var url = require('url'); 3 var url = require('url');
4 var fs = require('fs'); 4 var fs = require('fs');
5 var ini = require('ini'); 5 var ini = require('ini');
6 var strftime = require('strftime'); 6 var strftime = require('strftime');
7 var xmpp = require('simple-xmpp'); 7 var xmpp = require('simple-xmpp');
8 var winston = require('winston'); 8 var winston = require('winston');
9 9
10 var config = ini.parse(fs.readFileSync(__dirname + '/config.ini', 'utf-8')); 10 var config = ini.parse(fs.readFileSync(__dirname + '/config.ini', 'utf-8'));
11 11
12 var warming_up = true; 12 var warming_up = true;
13 13
14 var log_level = 'info'; 14 var log_level = 'info';
15 if (config.globals.log_level) { 15 if (config.globals.log_level) {
16 log_level = config.globals.log_level; 16 log_level = config.globals.log_level;
17 } 17 };
18
19 var logger = new (winston.Logger)({
20 transports: [
21 new (winston.transports.Console)({
22 timestamp: function() {
23 return strftime('%F %T', new Date());
24 },
25 level: log_level
26 }),
27 new (winston.transports.DailyRotateFile)({
28 filename: __dirname + '/logs/log',
29 timestamp: function() {
30 return strftime('%F %T', new Date());
31 },
32 level: log_level
33 })
34 ]
35 });
18 36
37 /*
19 var logger = new (winston.Logger)({ 38 var logger = new (winston.Logger)({
20 transports: [ 39 transports: [
21 new (winston.transports.Console)({ 40 new (winston.transports.Console)({
22 timestamp: function() { 41 timestamp: function() {
23 return strftime('%F %T', new Date()); 42 return strftime('%F %T', new Date());
24 }, 43 },
25 level: log_level 44 level: log_level
26 }), 45 }),
27 new (winston.transports.DailyRotateFile)({ 46 new (winston.transports.DailyRotateFile)({
28 filename: __dirname + '/logs/log', 47 filename: __dirname + '/logs/log',
29 timestamp: function() { 48 timestamp: function() {
30 return strftime('%F %T', new Date()); 49 return strftime('%F %T', new Date());
31 }, 50 },
32 level: log_level 51 level: log_level
33 }) 52 })
34 ] 53 ]
35 }); 54 });
55 */
36 56
37 function onHttpIncomingMessage(request, response) { 57 function onHttpIncomingMessage(request, response) {
38 var qs = url.parse(request.url, true).query; 58 var qs = url.parse(request.url, true).query;
39 logger.info("onHttpIncomingMessage()", {qs: qs}); 59 logger.info("onHttpIncomingMessage()", {qs: qs});
40 60
41 logger.info('Sending message to ' + qs.to + ': ' + qs.msg); 61 logger.info('Sending message to ' + qs.to + ': ' + qs.msg);
42 ym.sendPM(qs.to, qs.msg); 62 ym.sendPM(qs.to, qs.msg);
43 response.end('OK'); 63 response.end('OK');
44 } 64 }
45 65
46 66
47 function createHttpListener() { 67 function createHttpListener() {
48 68
49 var httpServer = http.createServer(function(request,response){ 69 var httpServer = http.createServer(function(request,response){
50 70
51 var qs = url.parse(request.url, true).query; 71 var qs = url.parse(request.url, true).query;
52 logger.verbose('Incoming message from EVO', {qs: qs}); 72 logger.verbose('Incoming message from EVO', {qs: qs});
53 response.end('OK'); 73 response.end('OK');
54 74
55 sendMessage(qs.PhoneNumber, qs.text); 75 sendMessage(qs.PhoneNumber, qs.text);
56 }); 76 });
57 77
58 httpServer.listen(config.globals.listen_port, function(){ 78 httpServer.listen(config.globals.listen_port, function(){
59 logger.info("HTTP server listening on " + config.globals.listen_port); 79 logger.info("HTTP server listening on " + config.globals.listen_port);
60 }) 80 })
61 } 81 }
62 82
63 function sendMessage(destination, message) { 83 function sendMessage(destination, message) {
64 logger.info('Sending xmpp message', {destination: destination, message: message}); 84 logger.info('Sending xmpp message', {destination: destination, message: message});
65 xmpp.send(destination, message); 85 xmpp.send(destination, message);
66 } 86 }
67 87
68 function reportToEvo(from, message) { 88 function reportToEvo(from, message) {
69 var opts = { 89 var opts = {
70 url: config.globals.evo_url, 90 url: config.globals.evo_url,
71 qs: { 91 qs: {
72 msg: message, 92 msg: message,
73 msisdn: from, 93 msisdn: from,
74 smsc: config.globals.smsc, 94 smsc: config.globals.smsc,
75 ts: strftime('%F %T'), 95 ts: strftime('%F %T'),
76 } 96 }
77 }; 97 };
78 98
79 logger.info("Forwarding message to evo", {request_opts: opts}); 99 logger.info("Forwarding message to evo", {request_opts: opts});
80 request(opts, function(err, response, body) { 100 request(opts, function(err, response, body) {
81 if (err) { 101 if (err) {
82 logger.warn('Error forwarding to evo: ' + err); 102 logger.warn('Error forwarding to evo: ' + err);
83 return; 103 return;
84 } 104 }
85 }); 105 });
86 106
87 } 107 }
88 108
89 xmpp.on('online', function(data) { 109 xmpp.on('online', function(data) {
90 logger.info('XMPP online', {data: data}); 110 logger.info('XMPP online', {data: data});
91 logger.info('Connected with JID: ' + data.jid.user); 111 logger.info('Connected with JID: ' + data.jid.user);
92 112
93 setTimeout(function() { 113 setTimeout(function() {
94 warming_up = false; 114 warming_up = false;
95 logger.info('BOT selesai warming up, pesan-pesan selanjutnya akan diproses'); 115 logger.info('BOT selesai warming up, pesan-pesan selanjutnya akan diproses');
96 }, config.globals.warming_up); 116 }, config.globals.warming_up);
97 }); 117 });
98 118
99 xmpp.on('chat', function(from, message) { 119 xmpp.on('chat', function(from, message) {
100 logger.info('Incoming message via XMPP ', {from: from, message: message}); 120 logger.info('Incoming message via XMPP ', {from: from, message: message});
101 121
102 if (warming_up) { 122 if (warming_up) {
103 logger.info('BOT masih dalam tahap warming up, abaikan pesan'); 123 logger.info('BOT masih dalam tahap warming up, abaikan pesan');
104 var response_message = 'Pesan diabaikan. Silahkan diulang kembali: ' + message; 124 var response_message = 'Pesan diabaikan. Silahkan diulang kembali: ' + message;
105 sendMessage(from, response_message); 125 sendMessage(from, response_message);
106 return; 126 return;
107 } 127 }
108 128
109 var response_message = 'Pesan anda telah diterima dan akan segera diproses: ' + message; 129 var response_message = 'Pesan anda telah diterima dan akan segera diproses: ' + message;
110 sendMessage(from, response_message); 130 sendMessage(from, response_message);
111 131
112 reportToEvo(from, message); 132 reportToEvo(from, message);
113 }); 133 });
114 134
115 xmpp.on('error', function(err) { 135 xmpp.on('error', function(err) {
116 logger.warn('XMPP error', {err: err}); 136 logger.warn('XMPP error', {err: err});
117 }); 137 });
118 138
119 xmpp.on('subscribe', function(from) { 139 xmpp.on('subscribe', function(from) {
120 logger.warn('XMPP subscribe request from ' + from); 140 logger.warn('XMPP subscribe request from ' + from);
121 xmpp.acceptSubscription(from); 141 xmpp.acceptSubscription(from);
122 }); 142 });
123 143
124 xmpp.connect({ 144 xmpp.connect({
125 jid: config.globals.jid, 145 jid: config.globals.jid,
126 password: config.globals.password, 146 password: config.globals.password,
127 }); 147 });
128 148
129 // check for incoming subscription requests 149 // check for incoming subscription requests
130 xmpp.getRoster(); 150 xmpp.getRoster();
131 151
132 createHttpListener(); 152 createHttpListener();
133 153