diff --git a/package.json b/package.json
index 6be04d4..6e587d2 100644
--- a/package.json
+++ b/package.json
@@ -22,6 +22,7 @@
   },
   "dependencies": {
     "komodo-sdk": "git+http://gitlab.kodesumber.com/komodo/komodo-sdk.git",
+    "lru-cache": "^4.1.1",
     "node-telegram-bot-api": "^0.30.0",
     "request": "^2.83.0"
   }
diff --git a/transport-telegram.js b/transport-telegram.js
index d33d28a..7201a18 100644
--- a/transport-telegram.js
+++ b/transport-telegram.js
@@ -1,19 +1,45 @@
 "use strict";
 
 const TelegramBot = require('node-telegram-bot-api');
+const LRU = require('lru-cache');
 
 const config = require('komodo-sdk/config')
 const logger = require('komodo-sdk/logger');
 
-const bot = new TelegramBot(config.transport.token, {polling: true});
+let bot;
+let _callback;
 
-bot.on('message', (msg) => {
-  const chatId = msg.chat.id;
-
-  // send a message to the chat acknowledging receipt of their message
-  bot.sendMessage(chatId, 'Received your message');
+const chats = LRU({
+    max: config.max_chats || 200,
+    maxAge: 1000 * 3600
 });
 
+function onMessage(msg) {
+    //console.log(msg);
+
+    const now = Math.floor(new Date().getTime()/1000);
+    const age = now - msg.date;
+
+	if (now - msg.date > (config.message_max_age || 120 * 1000)){
+		logger.info('Pesan diabaikan');
+		return;
+	}
+    
+    const partner = ( msg.from.username + ( config.transport.username_suffix || '@telegram.org') ).toLowerCase();
+    const incomingMessage = msg.text.trim();
+
+    chats.set(partner, msg.chat.id);
+    logger.info('Incoming message', {partner: partner, msg: incomingMessage, msgObj: msg, chat_id: chats.get(partner)});
+
+    if (_callback && _callback.onIncomingMessage) {
+        _callback.onIncomingMessage({
+            me: "TELEGRAM",
+            partner: partner,
+            msg: incomingMessage
+        })
+    }
+}
+
 function init(cb) {
     if (!cb) {
         logger.warn('Callback is not defined');
@@ -23,17 +49,31 @@ function init(cb) {
     }
 
     _callback = cb;
+    bot = new TelegramBot(config.transport.token, {polling: true});
 
-    bot.connect({
-        jid: config.username,
-        password: config.password,
-        host: config.xmpp_host
-    });
+    bot.on('message', onMessage);
 }
 
 function send(partner, msg) {
-    logger.verbose('Sending message via transport', {transport: 'telegram', partner: partner, msg: msg});
-    //bot.send(partner, msg);
+    if (!partner) {
+        logger.warn('Invalid partner');
+        return;
+    }
+
+    if (!msg) {
+        logger.warn('Invalid message');
+        return;
+    }
+
+    const chat_id = chats.get(partner.toLowerCase());
+    if (!chat_id) {
+        logger.warn('Unknown chat id for partner:' + partner.toLowerCase());
+        return;
+    }
+
+    logger.verbose('Sending message via transport', {transport: 'telegram', chat_id: chat_id, partner: partner, msg: msg});
+
+    bot.sendMessage(chat_id, msg);
 }
 
 exports.init = init;