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