"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; module.exports = { "*/10 * * * * *": async () => { if (!taskClientLoading) { console.log("refresh cients"); taskClientLoading = true; const session_key = await strapi.api["session-data"].services[ "session-data" ].find({ _sort: "phonenumber:desc", }); if (session_key.length == 0) taskClientLoading = false; else { session_key.forEach(async (i, indx) => { if (!Object.keys(clients).includes(`${i["id"]}`)) { clients[i["id"]] = null; await messageModel.loadClient( i["session_data"], async (data) => { if ( data["STATUS"] == 1 && data["TYPE"] == "READY" ) { if (indx + 1 == session_key.length) taskClientLoading = false; clients[i["id"]] = data["DATA"]; return; } else if ( data["STATUS"] == 0 && data["AUTH_FAILURE"] ) { let id = i["id"]; await strapi.api["session-data"].services[ "session-data" ].delete({ id }); if (indx + 1 == session_key.length) taskClientLoading = false; return; } else if (data["STATUS"] == 0) { if (indx + 1 == session_key.length) taskClientLoading = false; return; } } ); } }); } } }, "*/3 * * * * *": async () => { if (!taskSendingMessage) { console.log("auto send", clients); taskSendingMessage = true; if (Object.keys(clients).length == 0) taskSendingMessage = false; else { Object.keys(clients).forEach(async (i, indx) => { const sessions = await strapi.api["session-data"].services[ "session-data" ].getId({ _sort: "phonenumber:desc", }); if (!sessions.includes(i)) { delete clients[i]; } else { const messages = await strapi.api.message.services.message.find( { _sort: "session_datum_key:desc", state: "QUEUE", session_datum_key: i, } ); messages.forEach(async (message) => { console.log(clients[i] != null, i, clients); 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" } ); } } else taskSendingMessage = false; }); } if (indx + 1 == Object.keys(clients).length) taskSendingMessage = false; }); } } }, };