|
- "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 });
- const messages = await strapi.api.message.services.message.find(
- {
- _sort: "session_datum_key:desc",
- state: "QUEUE",
- session_datum_key: i["id"],
- }
- );
- for (const message of messages) {
- await strapi.api.message.services.message.update(
- { id: message.id },
- {
- state: "ERROR",
- keterangan: "sessions no longer valid",
- }
- );
- }
- }
- }
- }
- 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",
- keterangan: send["DATA"],
- }
- );
- }
- }
- } catch (e) {
- await strapi.api.message.services.message.update(
- { id: message.id },
- { state: "ERROR", keterangan: e.message }
- );
- }
- }
- }
- }
- taskSendingMessage = false;
- }
- }
- },
- };
|