Commit d4f3507916effc29602a5d8665e6dc4c380672b0

Authored by Adhidarma Hadiwinoto
1 parent e8ec03a69f
Exists in master

retry sending message if failed

Showing 1 changed file with 15 additions and 2 deletions Inline Diff

1 var telegram = require('node-telegram-bot-api'); 1 var telegram = require('node-telegram-bot-api');
2 var logger = require('./logger.js').start(); 2 var logger = require('./logger.js').start();
3 var http = require('http'); 3 var http = require('http');
4 var evo = require('./evo-im.js'); 4 var evo = require('./evo-im.js');
5 5
6 var config = require('./config.json'); 6 var config = require('./config.json');
7 7
8 evo.start({ 8 evo.start({
9 config: config, 9 config: config,
10 logger: logger 10 logger: logger
11 }); 11 });
12 12
13 var chat_ids = {}; 13 var chat_ids = {};
14 14
15 var options = { 15 var options = {
16 webHook: { 16 webHook: {
17 port: config.webhook_port, 17 port: config.webhook_port,
18 key: __dirname+'/key.pem', 18 key: __dirname+'/key.pem',
19 cert: __dirname+'/crt.pem' 19 cert: __dirname+'/crt.pem'
20 } 20 }
21 }; 21 };
22 22
23 var bot = new telegram(config.token, options); 23 var bot = new telegram(config.token, options);
24 bot.setWebHook(config.webhook_prefix + config.token, __dirname+'/crt.pem'); 24 bot.setWebHook(config.webhook_prefix + config.token, __dirname+'/crt.pem');
25 25
26 function deleteChatId(from) { 26 function deleteChatId(from) {
27 delete chat_ids[from]; 27 delete chat_ids[from];
28 } 28 }
29 29
30 function updateChatId(from, chat_id) { 30 function updateChatId(from, chat_id) {
31 chat_ids[from.toLowerCase()] = chat_id; 31 chat_ids[from.toLowerCase()] = chat_id;
32 logger.verbose('Chat id ' + chat_id + ' ' + from); 32 logger.verbose('Chat id ' + chat_id + ' ' + from);
33 } 33 }
34 34
35 function getChatId(partner) { 35 function getChatId(partner) {
36 try { 36 try {
37 return chat_ids[partner.toLowerCase()]; 37 return chat_ids[partner.toLowerCase()];
38 } 38 }
39 catch(e) { 39 catch(e) {
40 return; 40 return;
41 } 41 }
42 42
43 } 43 }
44 44
45 function sendMessage(destination, message) { 45 function sendMessage(destination, message, retry) {
46 if (retry === null || retry === undefined) {
47 retry = 10;
48 }
49
46 var chat_id = getChatId(destination); 50 var chat_id = getChatId(destination);
47 51
48 if (!chat_id) { 52 if (!chat_id) {
49 logger.warn('Can not find approriate chat id for ' + destination + '. Abort sending message.'); 53 logger.warn('Can not find approriate chat id for ' + destination + '. Abort sending message.');
50 return; 54 return;
51 } 55 }
52 56
53 logger.info('Sending reply to ' + destination + '(' + chat_id + '): ' + message); 57 logger.info('Sending reply to ' + destination + '(' + chat_id + '): ' + message);
54 58
55 bot.sendMessage(chat_id, message); 59 try {
60 bot.sendMessage(chat_id, message);
61 }
62 catch(e) {
63 logger.warn('Exception on sendMessage ' + e, {destination: destination, message: message, retry: retry, error: e});
64 if (retry) {
65 setTimeout(sendMessage, 10000, destination, message, --retry);
66 }
67 }
68
56 } 69 }
57 70
58 bot.getMe().then(function (me) { 71 bot.getMe().then(function (me) {
59 logger.info('Hi my name is %s!', me.username); 72 logger.info('Hi my name is %s!', me.username);
60 }); 73 });
61 74
62 bot.on('text', function (msg) { 75 bot.on('text', function (msg) {
63 logger.info('Incoming message (' + msg.chat.id + '): ' + msg.text, {message: msg}); 76 logger.info('Incoming message (' + msg.chat.id + '): ' + msg.text, {message: msg});
64 77
65 var from = msg.from.username.toUpperCase() + config.msisdn_suffix; 78 var from = msg.from.username.toUpperCase() + config.msisdn_suffix;
66 updateChatId(from, msg.chat.id); 79 updateChatId(from, msg.chat.id);
67 80
68 var now = Math.floor(new Date().getTime()/1000); 81 var now = Math.floor(new Date().getTime()/1000);
69 var age = now - msg.date; 82 var age = now - msg.date;
70 83
71 if (now - msg.date > config.message_max_age){ 84 if (now - msg.date > config.message_max_age){
72 var message = "Pesan anda diabaikan, silahkan diulang beberapa saat lagi jika diperlukan: " + msg.text; 85 var message = "Pesan anda diabaikan, silahkan diulang beberapa saat lagi jika diperlukan: " + msg.text;
73 logger.info(message, {msg: msg, age: age, max_age: config.message_max_age}); 86 logger.info(message, {msg: msg, age: age, max_age: config.message_max_age});
74 //bot.sendMessage(msg.chat.id, message); 87 //bot.sendMessage(msg.chat.id, message);
75 sendMessage(from, message); 88 sendMessage(from, message);
76 return; 89 return;
77 } 90 }
78 91
79 var greeting_prefix = "Pesan anda telah diterima:"; 92 var greeting_prefix = "Pesan anda telah diterima:";
80 if (config.greeting_prefix) { 93 if (config.greeting_prefix) {
81 greeting_prefix = config.greeting_prefix; 94 greeting_prefix = config.greeting_prefix;
82 } 95 }
83 96
84 bot.sendMessage(msg.chat.id, greeting_prefix + ' ' + msg.text); 97 bot.sendMessage(msg.chat.id, greeting_prefix + ' ' + msg.text);
85 setTimeout( 98 setTimeout(
86 evo.onMessage, 99 evo.onMessage,
87 300, 100 300,
88 from, msg.text, msg.date * 1000, sendMessage 101 from, msg.text, msg.date * 1000, sendMessage
89 ); 102 );
90 }); 103 });
91 104
92 function dumpChatIds() { 105 function dumpChatIds() {
93 var i = 0; 106 var i = 0;
94 for (var key in chat_ids) { 107 for (var key in chat_ids) {
95 logger.verbose('DUMPED CHAT IDS #' + ++i + ' ' + key + ': ' + chat_ids[key]) 108 logger.verbose('DUMPED CHAT IDS #' + ++i + ' ' + key + ': ' + chat_ids[key])
96 } 109 }
97 110
98 logger.verbose('TOTAL ' + i + ' chat ids'); 111 logger.verbose('TOTAL ' + i + ' chat ids');
99 } 112 }
100 113
101 if (config.dump_chat_ids_interval) { 114 if (config.dump_chat_ids_interval) {
102 setInterval(dumpChatIds, config.dump_chat_ids_interval * 1000); 115 setInterval(dumpChatIds, config.dump_chat_ids_interval * 1000);
103 } 116 }
104 117