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 Sequelize = require('sequelize')
const config = require("./config"); 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, { const sequelize = new Sequelize(config.DB_DATABASE, config.DB_USERNAME, config.DB_PASSWORD, {
host: config.DB_HOST, host: config.DB_HOST,
dialect: 'mysql', dialect: 'mysql',
...@@ -15,7 +15,7 @@ const sequelize = new Sequelize(config.DB_DATABASE, config.DB_USERNAME, config.D ...@@ -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 }) // sequelize.sync({ force: true })
// .then(() => { // .then(() => {
...@@ -23,5 +23,5 @@ const WebhookResponses = WebhookResponseModel(sequelize, Sequelize); ...@@ -23,5 +23,5 @@ const WebhookResponses = WebhookResponseModel(sequelize, Sequelize);
// }) // })
module.exports = { 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'); var request = require('request');
...@@ -7,7 +7,7 @@ async function createConnection(req, res) { ...@@ -7,7 +7,7 @@ async function createConnection(req, res) {
if (req.params.mobile_number) { if (req.params.mobile_number) {
let mobile_number = req.params.mobile_number; let mobile_number = req.params.mobile_number;
let random_num = Math.floor(Math.random() * 90000) + 10000; 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 dataString = '{"uri":"whatsappsandbox://'+mobile_number+'@whatsapp.com","name":"'+identifier+'"}';
let options = { let options = {
url: 'https://apiv2.unificationengine.com/v2/connection/add', url: 'https://apiv2.unificationengine.com/v2/connection/add',
...@@ -21,7 +21,7 @@ async function createConnection(req, res) { ...@@ -21,7 +21,7 @@ async function createConnection(req, res) {
request(options, function (error, response, body) { request(options, function (error, response, body) {
let respo = JSON.parse(body); let respo = JSON.parse(body);
if (respo.status && respo.status == 200) { 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})) .then(user => res.json({status: 200,info: 'OK', identifier: identifier}))
.catch(function (err) { .catch(function (err) {
console.log(err); console.log(err);
......
const { WebhookResponses } = require('../config/db.config'); const { ApiLogs } = require('../config/db.config');
var request = require('request'); var request = require('request');
async function sentMessage(req, res) { async function sentMessage(req, res) {
try { try {
if (req.body.mobile_number) { if (req.body.mobile_number) {
let mobile_number = req.body.mobile_number; let mobile_number = req.body.mobile_number;
let identifier = req.body.identifier; let identifier = req.body.identifier;
let message = req.body.message; 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 = { let options = {
url: 'https://apiv2.unificationengine.com/v2/message/send', url: 'https://apiv2.unificationengine.com/v2/message/send',
method: 'POST', method: 'POST',
...@@ -18,20 +17,16 @@ async function sentMessage(req, res) { ...@@ -18,20 +17,16 @@ async function sentMessage(req, res) {
'pass': '025fd444-62b4-4c44-b097-28ef2bde4f6e' '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) { request(options, function (error, response, body) {
let respo = JSON.parse(body); let respo = JSON.parse(body);
if (respo.Status) { if (respo.Status) {
WebhookResponses.update( ApiLogs.create({identifier: identifier, request: JSON.parse(dataString), response: respo, mobile_number: mobile_number, type:"sent_message", status:"sent"})
{ sent_response: respo, status: "sent" },{ where: {identifier: identifier} } .then(user => res.send({error: false, message:respo}) )
).then(count => { .catch(function (err) {
console.log(count); 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 res.status(500).send({error: true, message:respo});
}); });
} else throw "bad request"; } 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) { async function saveResponse(req, res) {
try { try {
let response = req.body; let response = req.body;
console.log(response); console.log(response);
if (response.data && response.data.connectionname) { if (response.data && response.data.connectionname && response.data.receiveraddress) {
WebhookResponses.update( ApiLogs.create({response: response.data, type: "webhook", identifier:response.data.connectionname,
{ response: response, status: "success" },{ where: {identifier: response.data.connectionname} } mobile_number: response.data.receiveraddress })
).then(count => { .then(user => res.send({status: 200,info: 'OK'}) )
res.send({status: 200,info: 'OK'}); .catch(function (err) {
console.log(err);
res.status(500).send({msg:"something went wrong!"});
}); });
} }
} catch (err) { } 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) => { module.exports = (sequelize, type) => {
return sequelize.define('webhook_responses', { return sequelize.define('api_logs', {
id: { id: {
type: type.INTEGER, type: type.INTEGER,
primaryKey: true, primaryKey: true,
autoIncrement: true autoIncrement: true
}, },
message: type.STRING, request: type.JSON,
response: type.JSON, response: type.JSON,
sent_response: type.JSON,
mobile_number: type.STRING, mobile_number: type.STRING,
type: type.STRING,
status: type.STRING, status: type.STRING,
identifier: type.STRING, identifier: type.STRING,
created_at: { created_at: {
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
"dotenv": "^8.2.0", "dotenv": "^8.2.0",
"express": "^4.16.4", "express": "^4.16.4",
"http-errors": "~1.6.3", "http-errors": "~1.6.3",
"multer": "^1.4.2",
"mysql2": "^2.1.0", "mysql2": "^2.1.0",
"nodemon": "^2.0.3", "nodemon": "^2.0.3",
"precache": "0.0.0", "precache": "0.0.0",
......
...@@ -2,7 +2,21 @@ var express = require('express'); ...@@ -2,7 +2,21 @@ var express = require('express');
const webhookCtrl = require("../controllers/webhook.controller"); const webhookCtrl = require("../controllers/webhook.controller");
const connectionCtrl = require("../controllers/connection.controller"); const connectionCtrl = require("../controllers/connection.controller");
const messageCtrl = require("../controllers/message.controller"); const messageCtrl = require("../controllers/message.controller");
const sentFileCtrl = require("../controllers/sentfile.controller");
var router = express.Router(); 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) => { router.get("/check", (req, res) => {
res.send("OK"); res.send("OK");
...@@ -12,6 +26,6 @@ router.get("/check", (req, res) => { ...@@ -12,6 +26,6 @@ router.get("/check", (req, res) => {
router.post('/webhook', webhookCtrl.saveResponse); router.post('/webhook', webhookCtrl.saveResponse);
router.get('/create-connection/:mobile_number', connectionCtrl.createConnection); router.get('/create-connection/:mobile_number', connectionCtrl.createConnection);
router.post('/sent-message', messageCtrl.sentMessage); router.post('/sent-message', messageCtrl.sentMessage);
router.post('/sent-files', upload.single('file'), sentFileCtrl.sentFiles);
module.exports = router; 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