Commit ab9f15bf1574f6545f4d82fff135c34d290feaa9

Authored by Adhidarma Hadiwinoto
1 parent d4f3507916
Exists in master

sendMessage start

Showing 1 changed file with 26 additions and 24 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({
9 config: config,
10 logger: logger
11 });
12
13 var chat_ids = {}; 8 var chat_ids = {};
14 9
15 var options = { 10 var options = {
16 webHook: { 11 webHook: {
17 port: config.webhook_port, 12 port: config.webhook_port,
18 key: __dirname+'/key.pem', 13 key: __dirname+'/key.pem',
19 cert: __dirname+'/crt.pem' 14 cert: __dirname+'/crt.pem'
20 } 15 }
21 }; 16 };
22 17
23 var bot = new telegram(config.token, options); 18 var bot = new telegram(config.token, options);
24 bot.setWebHook(config.webhook_prefix + config.token, __dirname+'/crt.pem'); 19 bot.setWebHook(config.webhook_prefix + config.token, __dirname+'/crt.pem');
25 20
26 function deleteChatId(from) {
27 delete chat_ids[from];
28 }
29
30 function updateChatId(from, chat_id) {
31 chat_ids[from.toLowerCase()] = chat_id;
32 logger.verbose('Chat id ' + chat_id + ' ' + from);
33 }
34
35 function getChatId(partner) {
36 try {
37 return chat_ids[partner.toLowerCase()];
38 }
39 catch(e) {
40 return;
41 }
42
43 }
44
45 function sendMessage(destination, message, retry) { 21 function sendMessage(destination, message, retry) {
46 if (retry === null || retry === undefined) { 22 if (retry === null || retry === undefined) {
47 retry = 10; 23 retry = 10;
48 } 24 }
49 25
50 var chat_id = getChatId(destination); 26 var chat_id = getChatId(destination);
51 27
52 if (!chat_id) { 28 if (!chat_id) {
53 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.');
54 return; 30 return;
55 } 31 }
56 32
57 logger.info('Sending reply to ' + destination + '(' + chat_id + '): ' + message); 33 logger.info('Sending reply to ' + destination + '(' + chat_id + '): ' + message);
58 34
59 try { 35 try {
60 bot.sendMessage(chat_id, message); 36 bot.sendMessage(chat_id, message);
61 } 37 }
62 catch(e) { 38 catch(e) {
63 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});
64 if (retry) { 40 if (retry) {
65 setTimeout(sendMessage, 10000, destination, message, --retry); 41 setTimeout(sendMessage, 10000, destination, message, --retry);
66 } 42 }
67 } 43 }
44 }
45
46
47 evo.start({
48 config: config,
49 logger: logger,
50 sendMessage: sendMessage
51 });
52
53
54 function deleteChatId(from) {
55 delete chat_ids[from];
56 }
57
58 function updateChatId(from, chat_id) {
59 chat_ids[from.toLowerCase()] = chat_id;
60 logger.verbose('Chat id ' + chat_id + ' ' + from);
61 }
62
63 function getChatId(partner) {
64 try {
65 return chat_ids[partner.toLowerCase()];
66 }
67 catch(e) {
68 return;
69 }
68 70
69 } 71 }
70 72
71 bot.getMe().then(function (me) { 73 bot.getMe().then(function (me) {
72 logger.info('Hi my name is %s!', me.username); 74 logger.info('Hi my name is %s!', me.username);
73 }); 75 });
74 76
75 bot.on('text', function (msg) { 77 bot.on('text', function (msg) {
76 logger.info('Incoming message (' + msg.chat.id + '): ' + msg.text, {message: msg}); 78 logger.info('Incoming message (' + msg.chat.id + '): ' + msg.text, {message: msg});
77 79
78 var from = msg.from.username.toUpperCase() + config.msisdn_suffix; 80 var from = msg.from.username.toUpperCase() + config.msisdn_suffix;
79 updateChatId(from, msg.chat.id); 81 updateChatId(from, msg.chat.id);
80 82
81 var now = Math.floor(new Date().getTime()/1000); 83 var now = Math.floor(new Date().getTime()/1000);
82 var age = now - msg.date; 84 var age = now - msg.date;
83 85
84 if (now - msg.date > config.message_max_age){ 86 if (now - msg.date > config.message_max_age){
85 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;
86 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});
87 //bot.sendMessage(msg.chat.id, message); 89 //bot.sendMessage(msg.chat.id, message);
88 sendMessage(from, message); 90 sendMessage(from, message);
89 return; 91 return;
90 } 92 }
91 93
92 var greeting_prefix = "Pesan anda telah diterima:"; 94 var greeting_prefix = "Pesan anda telah diterima:";
93 if (config.greeting_prefix) { 95 if (config.greeting_prefix) {