Commit 31d387e33357e98642b9db3bce6a705876c47526

Authored by Adhidarma Hadiwinoto
1 parent 01581b765e
Exists in master

ready to test

Showing 1 changed file with 132 additions and 0 deletions Side-by-side Diff

... ... @@ -0,0 +1,132 @@
  1 +var request = require('request');
  2 +var http = require('http');
  3 +var url = require('url');
  4 +var fs = require('fs');
  5 +var ini = require('ini');
  6 +var strftime = require('strftime');
  7 +var xmpp = require('simple-xmpp');
  8 +var winston = require('winston');
  9 +
  10 +var config = ini.parse(fs.readFileSync(__dirname + '/config.ini', 'utf-8'));
  11 +
  12 +var warming_up = true;
  13 +
  14 +var log_level = 'info';
  15 +if (config.globals.log_level) {
  16 + log_level = config.globals.log_level;
  17 +}
  18 +
  19 +var logger = new (winston.Logger)({
  20 + transports: [
  21 + new (winston.transports.Console)({
  22 + timestamp: function() {
  23 + return strftime('%F %T', new Date());
  24 + },
  25 + level: log_level
  26 + }),
  27 + new (winston.transports.DailyRotateFile)({
  28 + filename: __dirname + '/logs/log',
  29 + timestamp: function() {
  30 + return strftime('%F %T', new Date());
  31 + },
  32 + level: log_level
  33 + })
  34 + ]
  35 +});
  36 +
  37 +function onHttpIncomingMessage(request, response) {
  38 + var qs = url.parse(request.url, true).query;
  39 + logger.info("onHttpIncomingMessage()", {qs: qs});
  40 +
  41 + logger.info('Sending message to ' + qs.to + ': ' + qs.msg);
  42 + ym.sendPM(qs.to, qs.msg);
  43 + response.end('OK');
  44 +}
  45 +
  46 +
  47 +function createHttpListener() {
  48 +
  49 + var httpServer = http.createServer(function(request,response){
  50 +
  51 + var qs = url.parse(request.url, true).query;
  52 + logger.verbose('Incoming message from EVO', {qs: qs});
  53 + response.end('OK');
  54 +
  55 + sendMessage(qs.PhoneNumber, qs.text);
  56 + });
  57 +
  58 + httpServer.listen(config.globals.listen_port, function(){
  59 + logger.info("HTTP server listening on " + config.globals.listen_port);
  60 + })
  61 +}
  62 +
  63 +function sendMessage(destination, message) {
  64 + logger.info('Sending xmpp message', {destination: destination, message: message});
  65 + xmpp.send(destination, message);
  66 +}
  67 +
  68 +function reportToEvo(from, message) {
  69 + var opts = {
  70 + url: config.globals.evo_url,
  71 + qs: {
  72 + msg: message,
  73 + msisdn: from,
  74 + smsc: config.globals.smsc,
  75 + ts: strftime('%F %T'),
  76 + }
  77 + };
  78 +
  79 + logger.info("Forwarding message to evo", {request_opts: opts});
  80 + request(opts, function(err, response, body) {
  81 + if (err) {
  82 + logger.warn('Error forwarding to evo: ' + err);
  83 + return;
  84 + }
  85 + });
  86 +
  87 +}
  88 +
  89 +xmpp.on('online', function(data) {
  90 + logger.info('XMPP online', {data: data});
  91 + logger.info('Connected with JID: ' + data.jid.user);
  92 +
  93 + setTimeout(function() {
  94 + warming_up = false;
  95 + logger.info('BOT selesai warming up, pesan-pesan selanjutnya akan diproses');
  96 + }, config.globals.warming_up);
  97 +});
  98 +
  99 +xmpp.on('chat', function(from, message) {
  100 + logger.info('Incoming message via XMPP ', {from: from, message: message});
  101 +
  102 + if (warming_up) {
  103 + logger.info('BOT masih dalam tahap warming up, abaikan pesan');
  104 + var response_message = 'Pesan diabaikan. Silahkan diulang kembali: ' + message;
  105 + sendMessage(from, response_message);
  106 + return;
  107 + }
  108 +
  109 + var response_message = 'Pesan anda telah diterima dan akan segera diproses: ' + message;
  110 + sendMessage(from, response_message);
  111 +
  112 + reportToEvo(from, message);
  113 +});
  114 +
  115 +xmpp.on('error', function(err) {
  116 + logger.warn('XMPP error', {err: err});
  117 +});
  118 +
  119 +xmpp.on('subscribe', function(from) {
  120 + logger.warn('XMPP subscribe request from ' + from);
  121 + xmpp.acceptSubscription(from);
  122 +});
  123 +
  124 +xmpp.connect({
  125 + jid: config.globals.jid,
  126 + password: config.globals.password,
  127 +});
  128 +
  129 +// check for incoming subscription requests
  130 +xmpp.getRoster();
  131 +
  132 +createHttpListener();