Commit d4f3507916effc29602a5d8665e6dc4c380672b0
1 parent
e8ec03a69f
Exists in
master
retry sending message if failed
Showing 1 changed file with 15 additions and 2 deletions Inline Diff
index.js
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 |