| @@ -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 } | |||
| ); | |||
| } | |||
| } | |||
| }; | |||