UNPKG

@ionaai/rtnapi

Version:

common api collection for RTN

171 lines (154 loc) 5.39 kB
'use strict'; 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 }