Commit 31d387e33357e98642b9db3bce6a705876c47526
1 parent
01581b765e
Exists in
master
ready to test
Showing 1 changed file with 132 additions and 0 deletions Inline Diff
index.js
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(); | ||
133 |