Commit 2609c935 by Dhamodharan S

feat:other api integ

parent 755bcdbf
Pipeline #35146 passed with stages
in 2 minutes 42 seconds
const Sequelize = require('sequelize')
const config = require("./config");
const WebhookResponseModel = require('../models/webhook_response')
const ApiLogsModel = require('../models/api_logs')
const sequelize = new Sequelize(config.DB_DATABASE, config.DB_USERNAME, config.DB_PASSWORD, {
host: config.DB_HOST,
dialect: 'mysql',
......@@ -15,7 +15,7 @@ const sequelize = new Sequelize(config.DB_DATABASE, config.DB_USERNAME, config.D
}
})
const WebhookResponses = WebhookResponseModel(sequelize, Sequelize);
const ApiLogs = ApiLogsModel(sequelize, Sequelize);
// sequelize.sync({ force: true })
// .then(() => {
......@@ -23,5 +23,5 @@ const WebhookResponses = WebhookResponseModel(sequelize, Sequelize);
// })
module.exports = {
WebhookResponses
ApiLogs
}
\ No newline at end of file
const { WebhookResponses } = require('../config/db.config');
const { ApiLogs } = require('../config/db.config');
var request = require('request');
......@@ -7,7 +7,7 @@ async function createConnection(req, res) {
if (req.params.mobile_number) {
let mobile_number = req.params.mobile_number;
let random_num = Math.floor(Math.random() * 90000) + 10000;
let identifier = `${mobile_number}-${random_num}`;
let identifier = `${mobile_number}${random_num}`;
let dataString = '{"uri":"whatsappsandbox://'+mobile_number+'@whatsapp.com","name":"'+identifier+'"}';
let options = {
url: 'https://apiv2.unificationengine.com/v2/connection/add',
......@@ -21,7 +21,7 @@ async function createConnection(req, res) {
request(options, function (error, response, body) {
let respo = JSON.parse(body);
if (respo.status && respo.status == 200) {
WebhookResponses.create({identifier: identifier, mobile_number: mobile_number, status:"created"})
ApiLogs.create({identifier: identifier, request: JSON.parse(dataString), response: respo, mobile_number: mobile_number, type:"create_connection"})
.then(user => res.json({status: 200,info: 'OK', identifier: identifier}))
.catch(function (err) {
console.log(err);
......
const { WebhookResponses } = require('../config/db.config');
const { ApiLogs } = require('../config/db.config');
var request = require('request');
async function sentMessage(req, res) {
try {
if (req.body.mobile_number) {
let mobile_number = req.body.mobile_number;
let identifier = req.body.identifier;
let message = req.body.message;
var dataString = '{"message": {"receivers": [{"name":"name","address":"'+mobile_number+'" ,"Connector":"'+identifier+'", "type":"individual"}],"parts": [{"id":"1","contentType":"text/plain","data":"'+message+'" ,"size": 5,"type":"body","sort":0}]}}';
var dataString = '{"message": {"receivers": [{"name":"name","address":"'+mobile_number+'" ,"Connector":"'+identifier+'", "type":"individual"}],"parts": [{"id":"1","contentType":"text/plain","data":"'+message+'" ,"size": '+message.length+',"type":"body","sort":0}]}}';
let options = {
url: 'https://apiv2.unificationengine.com/v2/message/send',
method: 'POST',
......@@ -18,20 +17,16 @@ async function sentMessage(req, res) {
'pass': '025fd444-62b4-4c44-b097-28ef2bde4f6e'
}
};
WebhookResponses.update(
{ message: message, status: "pending" },{ where: {identifier: identifier} }
).then(count => {
console.log(count);
});
request(options, function (error, response, body) {
let respo = JSON.parse(body);
if (respo.Status) {
WebhookResponses.update(
{ sent_response: respo, status: "sent" },{ where: {identifier: identifier} }
).then(count => {
console.log(count);
ApiLogs.create({identifier: identifier, request: JSON.parse(dataString), response: respo, mobile_number: mobile_number, type:"sent_message", status:"sent"})
.then(user => res.send({error: false, message:respo}) )
.catch(function (err) {
console.log(err);
res.status(500).send({msg:"something went wrong!"});
});
res.send({error: false, message:respo});
} else res.status(500).send({error: true, message:respo});
});
} else throw "bad request";
......
const { ApiLogs } = require('../config/db.config');
var request = require('request');
const S3Upload = require("../helpers/s3-upload.helper");
const fs = require('fs');
async function sentFiles(req, res) {
try {
let mobile_number = req.body.mobile_number;
let identifier = req.body.identifier;
let link;
let location_name;
req.body.link ? (link = req.body.link): (req.body.location_name ? (location_name = req.body.location_name) : "");
let img = ['image/jpeg', 'image/png'];
let doc = ['application/pdf', 'application/msword', 'application/vnd.ms-powerpoint','application/vnd.ms-excel', 'text/plain'];
let audio = ['audio/aac', 'audio/mp4', 'audio/amr', 'audio/mpeg', 'audio/ogg', 'codecs=opus'];
let video = ['video/mp4'];
let dataString;
let type;
if (link) {
dataString = '{"message": {"receivers":[{"name":"name","address":"​'+mobile_number+'","Connector":"​'+identifier+'", "type":"individual"}],"parts":[{"id":"1","contentType":"text/plain","data":"​'+link+'" ,"size": '+link.length+' ,"type":"link","sort":0}]}}';
type = 'link';
} else if(location_name) {
dataString = '{"message": {"receivers":[{"name":"name","address":"​'+mobile_number+'","Connector":"​'+identifier+'", "type":"individual"}],"parts":[{"id":"1","contentType":"application/json","data":{ \"longitude\":'+req.body.longitude+', \"latitude\":'+req.body.latitude+', \"name\": \"​'+req.body.location_name+'\", \"address\": \"​'+req.body.address+' \"} ,"size":"'+req.body.address.length+'" ,"type":"location","sort":0}]}}'
type = 'location';
} else {
let mimetype = req.file.mimetype;
console.log(mimetype);
console.log(audio.includes(mimetype));
let base_path = `local/whatsapp_api/files/${req.file.filename}.${ mimetype.split("/")[1] }`;
const fileContent = fs.readFileSync(req.file.path);
let result = await S3Upload.s3Upload(fileContent, base_path, req.file.path);
img.includes(mimetype) ? (type = 'image_link') : (doc.includes(mimetype) ? (type = 'file') :
(audio.includes(mimetype) ? (type = 'audio_link') : (video.includes(mimetype) ? (type = 'video_link') : "")));
let img_caption;
req.body.img_caption ? (img_caption = req.body.img_caption) : "";
if (img_caption) {
dataString = '{"message": {"receivers":[{"name":"name","address":"​'+mobile_number+'","Connector":"'+identifier+'", "type":"individual"}],"parts":[{"id":"1","contentType":"text/plain","data":"​'+img_caption+'" ,"size":'+img_caption.length+',"type":"body","sort":0},{"id": "0", "contentType": "​'+mimetype+'" ,"size":'+result.path.length+',"type": "image_link","name":"​'+req.file.filename+'.'+mimetype.split("/")[1]+'","data":"​'+result.path+'","sort":1}]}}';
} else {
dataString = '{"message": {"receivers":[{"name":"name","address":"'+mobile_number+'","Connector":"'+identifier+'", "type":"individual"}],"parts": [{"id": "0","contentType": "'+mimetype+'" ,"size":'+result.path.length+',"type": "'+type+'","name":"'+req.file.filename+'.'+mimetype.split("/")[1]+'","data":"'+result.path+'","sort":1}]}}';
}
}
let options = {
url: 'https://apiv2.unificationengine.com/v2/message/send',
method: 'POST',
body: dataString,
auth: {
'user': 'a913b40f-aa55-49ef-ae23-bbd4d1baec94',
'pass': '025fd444-62b4-4c44-b097-28ef2bde4f6e'
}
};
console.log(options)
await request(options, function (error, response, body) {
let respo = JSON.parse(body);
console.log(respo);
if (!error) {
if (respo.Status) {
ApiLogs.create({identifier: identifier, request: JSON.parse(dataString), response: respo, mobile_number: mobile_number, type:type, status:"sent"})
.then(user => res.send({error: false, message:respo}) )
.catch(function (err) {
console.log(err);
res.status(500).send({msg:"something went wrong!"});
});
} else res.status(500).send({error: true, message:respo});
} else res.status(500).send({error: true, message:error});
});
} catch (err) {
console.log(err);
res.status(500).send({error: true, message:err});
}
}
module.exports = {
sentFiles
};
\ No newline at end of file
const { WebhookResponses } = require('../config/db.config');
const { ApiLogs } = require('../config/db.config');
async function saveResponse(req, res) {
try {
let response = req.body;
console.log(response);
if (response.data && response.data.connectionname) {
WebhookResponses.update(
{ response: response, status: "success" },{ where: {identifier: response.data.connectionname} }
).then(count => {
res.send({status: 200,info: 'OK'});
if (response.data && response.data.connectionname && response.data.receiveraddress) {
ApiLogs.create({response: response.data, type: "webhook", identifier:response.data.connectionname,
mobile_number: response.data.receiveraddress })
.then(user => res.send({status: 200,info: 'OK'}) )
.catch(function (err) {
console.log(err);
res.status(500).send({msg:"something went wrong!"});
});
}
} catch (err) {
......
const S3 = require('aws-sdk/clients/s3')
const fs = require('fs');
function s3Upload(fileContent, basePath, localFilepath) {
try {
let config = {
accessKeyId: "AKIAJTR67I2RHYWTT44Q",
secretAccessKey: "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",
region: "ap-southeast-1",
bucket: "static.unity.krds.com"
}
let s3 = new S3(config)
let params = {
Bucket: "static.unity.krds.com",
Key: basePath,
Body: fileContent,
ACL: 'public-read'
}
console.log(`Uploading to ${basePath}`)
return new Promise(resolve => {
s3.upload(params, (err, data) => {
if (err) {
console.log(`Upload failed to ${basePath}`, err)
resolve({status:false})
} else {
fs.unlinkSync(localFilepath);
console.log(`Uploaded to ${data.Location}`)
resolve({status:true, path: data.Location});
}
})
})
} catch (e) {
console.log("s3 catch block")
console.log(e)
return {status:false}
}
}
module.exports = {
s3Upload
}
\ No newline at end of file
module.exports = (sequelize, type) => {
return sequelize.define('webhook_responses', {
return sequelize.define('api_logs', {
id: {
type: type.INTEGER,
primaryKey: true,
autoIncrement: true
},
message: type.STRING,
request: type.JSON,
response: type.JSON,
sent_response: type.JSON,
mobile_number: type.STRING,
type: type.STRING,
status: type.STRING,
identifier: type.STRING,
created_at: {
......
......@@ -14,6 +14,7 @@
"dotenv": "^8.2.0",
"express": "^4.16.4",
"http-errors": "~1.6.3",
"multer": "^1.4.2",
"mysql2": "^2.1.0",
"nodemon": "^2.0.3",
"precache": "0.0.0",
......
......@@ -2,7 +2,21 @@ var express = require('express');
const webhookCtrl = require("../controllers/webhook.controller");
const connectionCtrl = require("../controllers/connection.controller");
const messageCtrl = require("../controllers/message.controller");
const sentFileCtrl = require("../controllers/sentfile.controller");
var router = express.Router();
var multer = require('multer');
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'public/uploads')
},
filename: function (req, file, cb) {
cb(null, file.fieldname + '-' + Date.now())
}
});
var upload = multer({storage: storage});
router.get("/check", (req, res) => {
res.send("OK");
......@@ -12,6 +26,6 @@ router.get("/check", (req, res) => {
router.post('/webhook', webhookCtrl.saveResponse);
router.get('/create-connection/:mobile_number', connectionCtrl.createConnection);
router.post('/sent-message', messageCtrl.sentMessage);
router.post('/sent-files', upload.single('file'), sentFileCtrl.sentFiles);
module.exports = router;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment