Commit 31d387e33357e98642b9db3bce6a705876c47526
1 parent
01581b765e
Exists in
master
ready to test
Showing 1 changed file with 132 additions and 0 deletions Side-by-side Diff
index.js
... | ... | @@ -0,0 +1,132 @@ |
1 | +var request = require('request'); | |
2 | +var http = require('http'); | |
3 | +var url = require('url'); | |
4 | +var fs = require('fs'); | |
5 | +var ini = require('ini'); | |
6 | +var strftime = require('strftime'); | |
7 | +var xmpp = require('simple-xmpp'); | |
8 | +var winston = require('winston'); | |
9 | + | |
10 | +var config = ini.parse(fs.readFileSync(__dirname + '/config.ini', 'utf-8')); | |
11 | + | |
12 | +var warming_up = true; | |
13 | + | |
14 | +var log_level = 'info'; | |
15 | +if (config.globals.log_level) { | |
16 | + log_level = config.globals.log_level; | |
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 | +}); | |
36 | + | |
37 | +function onHttpIncomingMessage(request, response) { | |
38 | + var qs = url.parse(request.url, true).query; | |
39 | + logger.info("onHttpIncomingMessage()", {qs: qs}); | |
40 | + | |
41 | + logger.info('Sending message to ' + qs.to + ': ' + qs.msg); | |
42 | + ym.sendPM(qs.to, qs.msg); | |
43 | + response.end('OK'); | |
44 | +} | |
45 | + | |
46 | + | |
47 | +function createHttpListener() { | |
48 | + | |
49 | + var httpServer = http.createServer(function(request,response){ | |
50 | + | |
51 | + var qs = url.parse(request.url, true).query; | |
52 | + logger.verbose('Incoming message from EVO', {qs: qs}); | |
53 | + response.end('OK'); | |
54 | + | |
55 | + sendMessage(qs.PhoneNumber, qs.text); | |
56 | + }); | |
57 | + | |
58 | + httpServer.listen(config.globals.listen_port, function(){ | |
59 | + logger.info("HTTP server listening on " + config.globals.listen_port); | |
60 | + }) | |
61 | +} | |
62 | + | |
63 | +function sendMessage(destination, message) { | |
64 | + logger.info('Sending xmpp message', {destination: destination, message: message}); | |
65 | + xmpp.send(destination, message); | |
66 | +} | |
67 | + | |
68 | +function reportToEvo(from, message) { | |
69 | + var opts = { | |
70 | + url: config.globals.evo_url, | |
71 | + qs: { | |
72 | + msg: message, | |
73 | + msisdn: from, | |
74 | + smsc: config.globals.smsc, | |
75 | + ts: strftime('%F %T'), | |
76 | + } | |
77 | + }; | |
78 | + | |
79 | + logger.info("Forwarding message to evo", {request_opts: opts}); | |
80 | + request(opts, function(err, response, body) { | |
81 | + if (err) { | |
82 | + logger.warn('Error forwarding to evo: ' + err); | |
83 | + return; | |
84 | + } | |
85 | + }); | |
86 | + | |
87 | +} | |
88 | + | |
89 | +xmpp.on('online', function(data) { | |
90 | + logger.info('XMPP online', {data: data}); | |
91 | + logger.info('Connected with JID: ' + data.jid.user); | |
92 | + | |
93 | + setTimeout(function() { | |
94 | + warming_up = false; | |
95 | + logger.info('BOT selesai warming up, pesan-pesan selanjutnya akan diproses'); | |
96 | + }, config.globals.warming_up); | |
97 | +}); | |
98 | + | |
99 | +xmpp.on('chat', function(from, message) { | |
100 | + logger.info('Incoming message via XMPP ', {from: from, message: message}); | |
101 | + | |
102 | + if (warming_up) { | |
103 | + logger.info('BOT masih dalam tahap warming up, abaikan pesan'); | |
104 | + var response_message = 'Pesan diabaikan. Silahkan diulang kembali: ' + message; | |
105 | + sendMessage(from, response_message); | |
106 | + return; | |
107 | + } | |
108 | + | |
109 | + var response_message = 'Pesan anda telah diterima dan akan segera diproses: ' + message; | |
110 | + sendMessage(from, response_message); | |
111 | + | |
112 | + reportToEvo(from, message); | |
113 | +}); | |
114 | + | |
115 | +xmpp.on('error', function(err) { | |
116 | + logger.warn('XMPP error', {err: err}); | |
117 | +}); | |
118 | + | |
119 | +xmpp.on('subscribe', function(from) { | |
120 | + logger.warn('XMPP subscribe request from ' + from); | |
121 | + xmpp.acceptSubscription(from); | |
122 | +}); | |
123 | + | |
124 | +xmpp.connect({ | |
125 | + jid: config.globals.jid, | |
126 | + password: config.globals.password, | |
127 | +}); | |
128 | + | |
129 | +// check for incoming subscription requests | |
130 | +xmpp.getRoster(); | |
131 | + | |
132 | +createHttpListener(); |