Commit d993842325d80fc14724c6fbaa3fef26b0436e58
1 parent
f84bee2aff
Exists in
master
debug
Showing 1 changed file with 21 additions and 1 deletions Inline Diff
index.js
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 |