Commit fe33db663fd084a7e937972ea8a46531134985ef

Authored by Adhidarma Hadiwinoto
1 parent 9e294fcee1
Exists in master

hapus ping

Showing 2 changed files with 0 additions and 34 deletions Inline Diff

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
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