@@ -23,6 +23,10 @@ | |||
}, | |||
"body_vars": { | |||
"type": "string" | |||
}, | |||
"message": { | |||
"via": "template_key", | |||
"model": "message" | |||
} | |||
} | |||
} |
@@ -53,8 +53,8 @@ | |||
"timestamp": { | |||
"type": "datetime" | |||
}, | |||
"session_datum_key": { | |||
"model": "session-data", | |||
"template_key": { | |||
"model": "message-template", | |||
"via": "message" | |||
} | |||
} | |||
@@ -1,4 +1,4 @@ | |||
'use strict'; | |||
"use strict"; | |||
/** | |||
* Read the documentation (https://strapi.io/documentation/developer-docs/latest/concepts/services.html#core-services) | |||
@@ -6,12 +6,28 @@ | |||
*/ | |||
module.exports = { | |||
distinctbyKey: async (params) =>{ | |||
const results = await strapi.query('message').find(params); | |||
distinctbyKey: async (params) => { | |||
const results = await strapi.query("message").find(params); | |||
let arrKeys = []; | |||
results.forEach((i)=>{ | |||
if(!arrKeys.includes(i["session_datum_key"])) arrKeys.push(i["session_datum_key"]); | |||
results.forEach((i) => { | |||
if (!arrKeys.includes(i["session_datum_key"])) | |||
arrKeys.push(i["session_datum_key"]); | |||
}); | |||
return arrKeys | |||
} | |||
return arrKeys; | |||
}, | |||
getQueueMessage: async (sessionId) => { | |||
var chat = await strapi.api["chats"].services["chats"].find({ | |||
session_key: sessionId, | |||
}); | |||
var arrayChat = chat.map((i) => i.id); | |||
var messageList = []; | |||
if (chat && chat.length != 0) { | |||
messageList = await strapi.api.message.services.message.find({ | |||
_sort: "chat_key:desc", | |||
state: "QUEUE", | |||
chat_key_in: arrayChat, | |||
}); | |||
} | |||
return messageList; | |||
}, | |||
}; |
@@ -32,10 +32,6 @@ | |||
"phonenumber": { | |||
"type": "string", | |||
"required": true | |||
}, | |||
"message": { | |||
"via": "session_datum_key", | |||
"model": "message" | |||
} | |||
} | |||
} |
@@ -1,6 +1,7 @@ | |||
"use strict"; | |||
const messageModel = require("../../model/messageModel"); | |||
const utils = require("../../util/util"); | |||
const refreshChat = require("../../util/refreshChat"); | |||
const sendQueueMessage = require("../../util/sendQueueMessage"); | |||
const { parseMultipartData, sanitizeEntity } = require("strapi-utils"); | |||
/** | |||
* Cron config that gives you an opportunity | |||
@@ -78,73 +79,8 @@ module.exports = { | |||
if (!sessionsValid) { | |||
delete clients[parseInt(i)]; | |||
} else { | |||
const messages = await strapi.api.message.services.message.find( | |||
{ | |||
_sort: "session_datum_key:desc", | |||
state: "QUEUE", | |||
session_datum_key: parseInt(i), | |||
} | |||
); | |||
// console.log(messages); | |||
for (const message of messages) { | |||
// console.log(clients[i] != null, i, clients); | |||
try { | |||
if (clients[i] != null) { | |||
await strapi.api.message.services.message.update( | |||
{ id: message.id }, | |||
{ state: "SENDING" } | |||
); | |||
let send = await messageModel.sendMessage( | |||
clients[i], | |||
message["chat_key"]["chatId"] | |||
._serialized, | |||
message["body"] | |||
); | |||
if (send["STATUS"] == 1) { | |||
// console.log(send["DATA"]); | |||
await strapi.api.message.services.message.update( | |||
{ id: message.id }, | |||
{ | |||
state: "SENT", | |||
messageId: | |||
send["DATA"]["id"]["id"], | |||
from: send["DATA"]["from"], | |||
isForwarded: | |||
send["DATA"][ | |||
"isForwarded" | |||
] == undefined | |||
? false | |||
: send["DATA"][ | |||
"isForwarded" | |||
], | |||
timestamp: moment | |||
.unix( | |||
send["DATA"][ | |||
"timestamp" | |||
] | |||
) | |||
.toDate(), | |||
} | |||
); | |||
} else { | |||
await strapi.api.message.services.message.update( | |||
{ id: message.id }, | |||
{ | |||
state: "ERROR", | |||
keterangan: send["DATA"], | |||
} | |||
); | |||
} | |||
} | |||
} catch (e) { | |||
// console.log("err", e); | |||
await strapi.api.message.services.message.update( | |||
{ id: message.id }, | |||
{ state: "ERROR", keterangan: e.message } | |||
); | |||
} | |||
} | |||
await utils.refreshChat(clients[i], parseInt(i)); | |||
await sendQueueMessage(clients[i], parseInt(i)); | |||
await refreshChat(clients[i], parseInt(i)); | |||
} | |||
} | |||
taskSendingMessage = false; | |||
@@ -1,6 +1,6 @@ | |||
const qrcode = require("qrcode-terminal"); | |||
const fs = require("fs"); | |||
const refreshMessage = require("../util/refreshMessage"); | |||
// const path = require("path"); | |||
const { Client, Chat, Message } = require("whatsapp-web.js"); | |||
// const SESSION_FOLDER = path.join(__dirname, "../data/"); | |||
@@ -27,11 +27,11 @@ function callbacks(client, callback, type = "create") { | |||
if (session == "UNPAIRED" || session == "CONFLICT") { | |||
try { | |||
if (type == "load" && client && client.info) { | |||
console.log(getID); | |||
// console.log(getID); | |||
getID = await strapi | |||
.query("session-data") | |||
.findOne({ phonenumber: client.info.wid.user }); | |||
console.log(getID); | |||
// console.log(getID); | |||
if (getID) { | |||
let id = getID["id"]; | |||
await strapi.api["session-data"].services[ | |||
@@ -56,8 +56,16 @@ function callbacks(client, callback, type = "create") { | |||
}); | |||
}); | |||
client.on("message", async (msg) => { | |||
// console.log("MESSAGE RECEIVED", msg.body); | |||
var phoneNumber = msg.from; | |||
// console.log(phoneNumber); | |||
var chat = await strapi.api["chats"].services["chats"].findOne({ | |||
phoneNumber: phoneNumber.split("@")[0], | |||
}); | |||
await refreshMessage(msg, chat); | |||
}); | |||
// client.on("message_create", async (msg) => { | |||
// }); | |||
client.on("qr", (qr) => { | |||
return callback({ STATUS: 1, TYPE: "QR_AUTH", DATA: qr }); | |||
}); | |||
@@ -1,7 +1,7 @@ | |||
"use strict"; | |||
const messageModel = require("../model/messageModel"); | |||
const { parseMultipartData, sanitizeEntity } = require("strapi-utils"); | |||
const moment = require("moment"); | |||
const refreshMessage = require("./refreshMessage"); | |||
const refreshChat = async function (client, sessionsId) { | |||
try { | |||
@@ -34,41 +34,16 @@ const refreshChat = async function (client, sessionsId) { | |||
phoneNumber: result["DATA"][i]["id"].user, | |||
}); | |||
} | |||
chatId = chatsExist.id; | |||
var messages = await messageModel.getMessagebyId( | |||
client, | |||
result["DATA"][i]["id"] | |||
); | |||
if (messages["STATUS"] == 1) { | |||
for (var j = 0; j < messages["DATA"].length; j++) { | |||
var Exist = await strapi.api["message"].services[ | |||
"message" | |||
].findOne({ | |||
messageId: messages["DATA"][j]["id"].id, | |||
}); | |||
if (!Exist) { | |||
// console.log(chatId); | |||
await strapi.query("message").create({ | |||
messageId: messages["DATA"][j]["id"].id, | |||
to: messages["DATA"][j]["to"], | |||
from: messages["DATA"][j]["from"], | |||
body: messages["DATA"][j]["body"], | |||
state: messages["DATA"][j]["fromMe"] | |||
? "SENT" | |||
: "RECIEVED", | |||
isForwarded: | |||
messages["DATA"][j]["isForwarded"] == | |||
undefined | |||
? false | |||
: messages["DATA"][j][ | |||
"isForwarded" | |||
], | |||
chat_key: chatId, | |||
timestamp: moment | |||
.unix(messages["DATA"][j]["timestamp"]) | |||
.toDate(), | |||
}); | |||
} | |||
await refreshMessage( | |||
messages["DATA"][j], | |||
chatsExist | |||
); | |||
} | |||
} | |||
} | |||
@@ -84,6 +59,4 @@ const refreshChat = async function (client, sessionsId) { | |||
} | |||
}; | |||
module.exports = { | |||
refreshChat: refreshChat, | |||
}; | |||
module.exports = refreshChat; |
@@ -0,0 +1,27 @@ | |||
"use strict"; | |||
const moment = require("moment"); | |||
const refreshMessage = async function (message, chat) { | |||
var Exist = await strapi.api["message"].services["message"].findOne({ | |||
messageId: message["id"].id, | |||
}); | |||
if (!Exist) { | |||
// console.log(chatId); | |||
await strapi.query("message").create({ | |||
messageId: message["id"].id, | |||
to: message["to"], | |||
from: message["from"], | |||
body: message["body"], | |||
state: message["fromMe"] ? "SENT" : "RECIEVED", | |||
isForwarded: | |||
message["isForwarded"] == undefined | |||
? false | |||
: message["isForwarded"], | |||
chat_key: chat.id, | |||
timestamp: moment.unix(message["timestamp"]).toDate(), | |||
}); | |||
// console.log("message added"); | |||
} | |||
}; | |||
module.exports = refreshMessage; |
@@ -0,0 +1,55 @@ | |||
const messageModel = require("../model/messageModel"); | |||
const moment = require("moment"); | |||
module.exports = async function (client, sessionId) { | |||
const messages = await strapi.api.message.services.message.getQueueMessage( | |||
sessionId | |||
); | |||
for (const message of messages) { | |||
try { | |||
if (client != null) { | |||
await strapi.api.message.services.message.update( | |||
{ id: message.id }, | |||
{ state: "SENDING" } | |||
); | |||
let send = await messageModel.sendMessage( | |||
client, | |||
message["chat_key"]["chatId"]._serialized, | |||
message["body"] | |||
); | |||
if (send["STATUS"] == 1) { | |||
// console.log(send["DATA"]); | |||
await strapi.api.message.services.message.update( | |||
{ id: message.id }, | |||
{ | |||
state: "SENT", | |||
messageId: send["DATA"]["id"]["id"], | |||
from: send["DATA"]["from"], | |||
isForwarded: | |||
send["DATA"]["isForwarded"] == undefined | |||
? false | |||
: send["DATA"]["isForwarded"], | |||
timestamp: moment | |||
.unix(send["DATA"]["timestamp"]) | |||
.toDate(), | |||
} | |||
); | |||
} else { | |||
await strapi.api.message.services.message.update( | |||
{ id: message.id }, | |||
{ | |||
state: "ERROR", | |||
keterangan: send["DATA"], | |||
} | |||
); | |||
} | |||
} | |||
} catch (e) { | |||
// console.log("err", e); | |||
await strapi.api.message.services.message.update( | |||
{ id: message.id }, | |||
{ state: "ERROR", keterangan: e.message } | |||
); | |||
} | |||
} | |||
}; |