Commit fe33db663fd084a7e937972ea8a46531134985ef
1 parent
9e294fcee1
Exists in
master
hapus ping
Showing 2 changed files with 0 additions and 34 deletions Inline Diff
config.sample.json
1 | { | 1 | { |
2 | "webhook_port": 28232, | 2 | "webhook_port": 28232, |
3 | "webhook_prefix": "", | 3 | "webhook_prefix": "", |
4 | "token": "", | 4 | "token": "", |
5 | "listen_port": 23232, | 5 | "listen_port": 23232, |
6 | "msisdn_suffix": "@telegram.org", | 6 | "msisdn_suffix": "@telegram.org", |
7 | "message_max_age": 120, | 7 | "message_max_age": 120, |
8 | "greeting_prefix": "", | 8 | "greeting_prefix": "", |
9 | "evo_url": "", | 9 | "evo_url": "", |
10 | "smsc": "", | 10 | "smsc": "", |
11 | "send_ping_to_evo": 0, | ||
12 | "ping_pin": "", | ||
13 | "ping_from": "", | ||
14 | |||
15 | } | 11 | } |
16 | 12 |
evo-im.js
1 | var strftime = require('strftime'); | 1 | var strftime = require('strftime'); |
2 | var request = require('request'); | 2 | var request = require('request'); |
3 | var xmlparser = require('xml2js').parseString; | 3 | var xmlparser = require('xml2js').parseString; |
4 | var http = require('http'); | 4 | var http = require('http'); |
5 | var url = require('url'); | 5 | var url = require('url'); |
6 | 6 | ||
7 | var config; | 7 | var config; |
8 | var logger; | 8 | var logger; |
9 | 9 | ||
10 | function start(options) { | 10 | function start(options) { |
11 | if (options && options.config) { | 11 | if (options && options.config) { |
12 | config = options.config; | 12 | config = options.config; |
13 | } | 13 | } |
14 | 14 | ||
15 | if (options && options.logger) { | 15 | if (options && options.logger) { |
16 | logger = options.logger; | 16 | logger = options.logger; |
17 | } | 17 | } |
18 | 18 | ||
19 | createHttpServer(); | 19 | createHttpServer(); |
20 | } | 20 | } |
21 | 21 | ||
22 | function formatTimestamp(ms) { | 22 | function formatTimestamp(ms) { |
23 | return strftime('%F %T', new Date(ms)); | 23 | return strftime('%F %T', new Date(ms)); |
24 | } | 24 | } |
25 | 25 | ||
26 | function onMessage(sender, message, ts, sendMessage) { | 26 | function onMessage(sender, message, ts, sendMessage) { |
27 | var opts = { | 27 | var opts = { |
28 | url: config.evo_url, | 28 | url: config.evo_url, |
29 | qs: { | 29 | qs: { |
30 | msg: message, | 30 | msg: message, |
31 | msisdn: sender, | 31 | msisdn: sender, |
32 | smsc: config.smsc, | 32 | smsc: config.smsc, |
33 | ts: formatTimestamp(ts) | 33 | ts: formatTimestamp(ts) |
34 | } | 34 | } |
35 | }; | 35 | }; |
36 | 36 | ||
37 | logger.verbose("Forwarding message to evo", {request_opts: opts}); | 37 | logger.verbose("Forwarding message to evo", {request_opts: opts}); |
38 | request(opts, function(err, response, body) { | 38 | request(opts, function(err, response, body) { |
39 | if (err) { | 39 | if (err) { |
40 | logger.warn('Error forwarding to evo: ' + err); | 40 | logger.warn('Error forwarding to evo: ' + err); |
41 | return; | 41 | return; |
42 | } | 42 | } |
43 | 43 | ||
44 | if (response.statusCode != 200) { | 44 | if (response.statusCode != 200) { |
45 | logger.warn('HTTP Status from evo: ' + response.statusCode, {status: response.statusCode, body: body}); | 45 | logger.warn('HTTP Status from evo: ' + response.statusCode, {status: response.statusCode, body: body}); |
46 | return; | 46 | return; |
47 | } | 47 | } |
48 | 48 | ||
49 | logger.verbose('Got response from evo', {body: body}); | 49 | logger.verbose('Got response from evo', {body: body}); |
50 | 50 | ||
51 | xmlparser(body, function(xmlerr, parsedResponse) { | 51 | xmlparser(body, function(xmlerr, parsedResponse) { |
52 | if (xmlerr) { | 52 | if (xmlerr) { |
53 | logger.verbose('Evo response not in xml format'); | 53 | logger.verbose('Evo response not in xml format'); |
54 | return; | 54 | return; |
55 | } | 55 | } |
56 | 56 | ||
57 | return; | 57 | return; |
58 | 58 | ||
59 | logger.info('Evo response in xml format', {response: parsedResponse}); | 59 | logger.info('Evo response in xml format', {response: parsedResponse}); |
60 | if (parsedResponse.response.text) { | 60 | if (parsedResponse.response.text) { |
61 | sendMessage(sender, parsedResponse.response.text[0].trim()); | 61 | sendMessage(sender, parsedResponse.response.text[0].trim()); |
62 | } | 62 | } |
63 | }); | 63 | }); |
64 | }); | 64 | }); |
65 | |||
66 | // kirim ping 1 detik setelah pesan agar segera diproses | ||
67 | if (config.send_ping_to_evo == '1') { | ||
68 | setTimeout(function() { | ||
69 | |||
70 | var pingOpts = { | ||
71 | url: config.evo_url, | ||
72 | qs: { | ||
73 | msg: 'S.' + config.ping_pin, | ||
74 | msisdn: config.ping_from + config.msisdn_suffix, | ||
75 | smsc: config.smsc, | ||
76 | ts: strftime('%F %T') | ||
77 | } | ||
78 | }; | ||
79 | |||
80 | logger.verbose('Sending ping message', {opts: pingOpts}); | ||
81 | |||
82 | request(pingOpts, function(err, response, body) { | ||
83 | if (err) { | ||
84 | logger.warn('Error send PING to evo: ' + err); | ||
85 | return; | ||
86 | } | ||
87 | }); | ||
88 | }, 1000); | ||
89 | } | ||
90 | } | 65 | } |
91 | 66 | ||
92 | function onHttpIncomingMessage(request, response) { | 67 | function onHttpIncomingMessage(request, response) { |
93 | var qs = url.parse(request.url, true).query; | 68 | var qs = url.parse(request.url, true).query; |
94 | logger.verbose("onHttpIncomingMessage()", {qs: qs}); | 69 | logger.verbose("onHttpIncomingMessage()", {qs: qs}); |
95 | 70 | ||
96 | // abaikan balikan ping | ||
97 | if (qs.to == config.ping_from) { | ||
98 | return; | ||
99 | } | ||
100 | |||
101 | var destination = qs.to.replace(config.msisdn_suffix, ''); | 71 | var destination = qs.to.replace(config.msisdn_suffix, ''); |
102 | logger.info('Sending message to ' + destination + ': ' + qs.msg); | 72 | logger.info('Sending message to ' + destination + ': ' + qs.msg); |
103 | sendMessage(destination, qs.msg); | 73 | sendMessage(destination, qs.msg); |
104 | response.end('OK'); | 74 | response.end('OK'); |
105 | } | 75 | } |
106 | 76 | ||
107 | function createHttpServer() { | 77 | function createHttpServer() { |
108 | logger.verbose('createHttpServer()'); | 78 | logger.verbose('createHttpServer()'); |
109 | 79 | ||
110 | var httpServer = http.createServer(onHttpIncomingMessage); | 80 | var httpServer = http.createServer(onHttpIncomingMessage); |
111 | httpServer.listen(config.listen_port, function(){ | 81 | httpServer.listen(config.listen_port, function(){ |
112 | logger.info("HTTP server listening on " + config.listen_port); | 82 | logger.info("HTTP server listening on " + config.listen_port); |
113 | }); | 83 | }); |
114 | } | 84 | } |
115 | 85 | ||
116 | exports.start = start; | 86 | exports.start = start; |
117 | exports.formatTimestamp = formatTimestamp; | 87 | exports.formatTimestamp = formatTimestamp; |
118 | exports.onMessage = onMessage; | 88 | exports.onMessage = onMessage; |
119 | 89 |