Commit f5973c00283687f5e89222c705046750ef88e992

Authored by Adhidarma Hadiwinoto
1 parent 87210e8c08
Exists in master

delay before send config

Showing 2 changed files with 4 additions and 2 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 "delay_on_message": 300,
12 "dump_chat_ids_interval": 60000
11 } 13 }
12 14
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