"use strict"; const messageModel = require("../../model/messageModel"); const { parseMultipartData, sanitizeEntity } = require("strapi-utils"); /** * Cron config that gives you an opportunity * to run scheduled jobs. * * The cron format consists of: * [SECOND (optional)] [MINUTE] [HOUR] [DAY OF MONTH] [MONTH OF YEAR] [DAY OF WEEK] * * See more details here: https://strapi.io/documentation/developer-docs/latest/concepts/configurations.html#cron-tasks */ let clients = {}; let taskClientLoading = false; let taskSendingMessage = false; function loadClient(i) { return new Promise((resolve) => { messageModel.loadClient(i["session_data"], async (data) => { return resolve(data); }); }); } module.exports = { "*/10 * * * * *": async () => { if (!taskClientLoading) { // console.log("refresh cients"); const session_key = await strapi.api["session-data"].services[ "session-data" ].find({ _sort: "phonenumber:desc", }); if (session_key.length == 0) taskClientLoading = false; else { for (const i of session_key) { if (!Object.keys(clients).includes(`${i["id"]}`)) { taskClientLoading = true; clients[i["id"]] = null; var data = await loadClient(i); if (data["TYPE"] == "READY") { clients[i["id"]] = data["DATA"]; } else if (data["TYPE"] == "AUTH_FAILURE") { let id = i["id"]; await strapi.api["session-data"].services[ "session-data" ].delete({ id }); } } } taskClientLoading = false; } } }, "*/3 * * * * *": async () => { if (!taskSendingMessage && Object.keys(clients).length != 0) { // console.log("auto send"); taskSendingMessage = true; if (Object.keys(clients).length == 0) taskSendingMessage = false; else { for (const i of Object.keys(clients)) { const sessions = await strapi.api["session-data"].services[ "session-data" ].getId({ _sort: "phonenumber:desc", }); if (!sessions.includes(parseInt(i))) { delete clients[parseInt(i)]; } else { const messages = await strapi.api.message.services.message.find( { _sort: "session_datum_key:desc", state: "QUEUE", session_datum_key: i, } ); 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["send_to"], message["raw_text"] ); if (send["STATUS"] == 1) { await strapi.api.message.services.message.update( { id: message.id }, { state: "SENT" } ); } else { await strapi.api.message.services.message.update( { id: message.id }, { state: "ERROR" } ); } } } catch (e) { await strapi.api.message.services.message.update( { id: message.id }, { state: "ERROR" } ); } } } } taskSendingMessage = false; } } }, };