index.js 3.42 KB
var iniparser = require('iniparser');
var config = iniparser.parseSync('./config.ini');
var telegram = require('node-telegram-bot-api');
var request = require('request');
var http = require('http');
var url = require('url');
var strftime = require('strftime');
var winston = require('winston');

var logger = new (winston.Logger)({
  transports: [
    new (winston.transports.Console)({
      timestamp: function() {
        return strftime('%F %T', new Date());
      },
      formatter: function(options) {
        // Return string will be passed to logger.
        return options.timestamp() +' '+ options.level.toUpperCase() +' '+ (undefined !== options.message ? options.message : '') +
          (options.meta && Object.keys(options.meta).length ? '\n\t'+ JSON.stringify(options.meta) : '' );
      }
    }),
    new (winston.transports.DailyRotateFile)({
	  filename: 'log',
      timestamp: function() {
        return strftime('%F %T', new Date());
      },
      formatter: function(options) {
        // Return string will be passed to logger.
        return options.timestamp() +' '+ options.level.toUpperCase() +' '+ (undefined !== options.message ? options.message : '') +
          (options.meta && Object.keys(options.meta).length ? '\n\t'+ JSON.stringify(options.meta) : '' );
      }
    })
  ]
});
 

var chat_ids = {};


var bot;
var options = {
  webHook: {
    port: 443,
    key: __dirname+'/key.pem',
    cert: __dirname+'/crt.pem'
  }
};

bot = new telegram(config.globals.token, options);
bot.setWebHook(config.globals.webhook_prefix + config.globals.token, __dirname+'/crt.pem');

/*
var options = {
  polling: true
};
bot = new telegram(config.globals.token, options);
*/


function deleteChatId(from) {
	delete chat_ids[from];
}

function sendMessage(destination, message) {
	//destination = destination.replace(/@TELEGRAM$/, '');
	logger.info('Sending reply to ' + destination + ': ' + message);
	var chat_id = chat_ids[destination];
	bot.sendMessage(chat_id, message);
}

function createHttpResponseServer(){
	var httpServer = http.createServer(function(request,response){
		var qs = url.parse(request.url, true).query;
		logger.info('Incoming request from SMSIN server:', {qs: qs})
		//logger.info(qs);	
		response.end('OK');
		
		sendMessage(qs.PhoneNumber, qs.text);
	});
	httpServer.listen(config.globals.listen_port, function(){
		logger.info("listening on " + config.globals.listen_port);
	})
}
createHttpResponseServer();

bot.getMe().then(function (me) {
  logger.info('Hi my name is %s!', me.username);
});

bot.on('text', function (msg) {
	logger.info(msg);
	
	var now = Math.floor(new Date().getTime()/1000);
	
	if (now - msg.date > config.globals.message_max_age){
		var message = 'Pesan "' + msg.text + '" diabaikan. Silahkan diulang kembali.';
		logger.info(message)
		bot.sendMessage(msg.chat.id, message);
		return;
	}
	
	var from = msg.from.username.toUpperCase() + config.globals.msisdn_suffix;
	
	chat_ids[from] = msg.chat.id;
	//setTimeout(deleteChatId, 1000 * 3600 * 24 * 2, from)
	
	bot.sendMessage( msg.chat.id,'Pesan anda telah diterima: ' + msg.text);

	var request_opts = {
		url: config.globals.aaa,
		qs: {
			PhoneNumber: from,
			Text: msg.text,
			Res_Port: config.globals.listen_port,
			SMSCID: config.globals.smscid
		}
	};
	
	request(request_opts, function(err, response, body) {
		if (err) {
			logger.info('Request error: ' + err);
			return;
		}
		
		logger.info('Response: ' + response);
		logger.info('Body: ' + body);
		
	});
});