@ionaai/rtnapi
Version:
common api collection for RTN
171 lines (154 loc) • 5.39 kB
JavaScript
;
var lodash=require("lodash-node");
var moment = require('moment');
var path = require('path')
var request = require('request');
var DBModel = require('@ionaai/rtndbmodel');
var User = DBModel.user;
var fs = require('fs');
var mongoose = require("mongoose");
var ejs = require('ejs');
var parseString = require('xml2js').parseString;
var markUserWhitelisted = function(mobile){
User.findOne({mobile: mobile}).exec(function(err, user){
if(!err && user){
user.exotelCallStatus = "active";
user.whitelistingDate = new Date();
user.save(function(sErr, saved){
if(!sErr && saved){
console.log("Updated whitelistingDate and exotelCallStatus for user : " + saved.mobile);
} else {
console.log(sErr);
console.log("Failed to update whitelistingDate and exotelCallStatus for user : " + mobile);
}
})
} else {
console.log(err);
console.log("Could not mark User Whitelisted " + mobile);
}
})
};
var checkDNDStatus = function(user, Env){
if(user.mobile){
var options = {
url: Env.exotelDNDCheckUrl + user.mobile,
headers: {
"MID" : Env.exotelMID,
"Checksumhash" : Env.exotelChecksumhash,
'Accept': 'application/json'
},
method:'GET'
};
request(options, function(err, response, body){
if(!err){
console.log(body);
parseString(body, function (err, result) {
var thisNumer = result.TwilioResponse.Numbers[0];
if (thisNumer && thisNumer.DND) {
console.log(JSON.stringify(thisNumer));
user.isDnd = (thisNumer.DND.length && (thisNumer.DND[0]==="Yes"));
if(user.isDnd){
exotelWhitelister(user.mobile, Env, function(wErr){
if(!wErr){
console.log("Whitelisting Request submitted to exotel.");
} else {
console.log(wErr);
}
});
}
user.save(function (serr, saved) {
if(!serr && saved){
console.log("User DND info saved successfully");
} else {
console.log("Error while saving User");
console.log(serr);
}
})
} else {
console.log("Could not ftech DND info from exotel")
}
});
} else {
console.log(err);
console.log(response, body);
console.log("Error !! while checking DND status")
}
})
} else {
console.log("User does not have mobile to check against DND Status")
}
}
var exotelWrapper = function(postData, Env, next){
console.log("Payload to Exotel: " + JSON.stringify(postData));
var options = {
url: Env.exotelCallUrl,
headers: {
"MID" : Env.exotelMID,
"Checksumhash" : Env.exotelChecksumhash,
'Accept': 'application/json'
},
form: postData,
method:'POST'
};
request(options, function(err, response, body){
if(!err){
console.log(body);
if(next){
next(body);
}
} else {
console.log(response.statusCode, body);
}
})
}
var exotelCallDetails = function(postData, Env, next){
console.log("Payload to Exotel: " + JSON.stringify(postData));
var options = {
url: Env.exotelCallGeneric + postData,
headers: {
"MID" : Env.exotelMID,
"Checksumhash" : Env.exotelChecksumhash,
'Accept': 'application/json'
},
method:'GET'
};
request(options, function(err, response, body){
if(!err){
console.log(body);
if(next){
next(body);
}
} else {
console.log(response, body);
}
})
};
var exotelWhitelister = function(mobile, Env, next){
console.log("Whitelisting " + mobile);
var options = {
url: Env.exotelWhitelistUrl,
headers: {
"MID" : Env.exotelMID,
"Checksumhash" : Env.exotelChecksumhash,
'Accept': 'application/json'
},
form: {Number : mobile, VirtualNumber : '01139589876'},
method:'POST'
};
request(options, function(err, response, body){
if(!err){
markUserWhitelisted(mobile);
console.log(body);
next();
} else {
console.log(err, response?response.statusCode:'', body);
next(err);
}
})
};
module.exports = {
exotelWrapper : exotelWrapper,
exotelCallDetails : exotelCallDetails,
exotelWhitelister : exotelWhitelister,
checkDNDStatus : checkDNDStatus
}