wa_strapi
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

91 linhas
2.7 KiB

  1. "use strict";
  2. const messageModel = require("../../model/messageModel");
  3. const refreshChat = require("../../util/refreshChat");
  4. const sendQueueMessage = require("../../util/sendQueueMessage");
  5. const { parseMultipartData, sanitizeEntity } = require("strapi-utils");
  6. /**
  7. * Cron config that gives you an opportunity
  8. * to run scheduled jobs.
  9. *
  10. * The cron format consists of:
  11. * [SECOND (optional)] [MINUTE] [HOUR] [DAY OF MONTH] [MONTH OF YEAR] [DAY OF WEEK]
  12. *
  13. * See more details here: https://strapi.io/documentation/developer-docs/latest/concepts/configurations.html#cron-tasks
  14. */
  15. let clients = {};
  16. let taskClientLoading = false;
  17. let taskSendingMessage = false;
  18. module.exports = {
  19. "*/10 * * * * *": async () => {
  20. if (!taskClientLoading) {
  21. // console.log("refresh cients");
  22. const session_key = await strapi.api["session-data"].services[
  23. "session-data"
  24. ].find({
  25. _sort: "phonenumber:desc",
  26. });
  27. if (session_key.length == 0) taskClientLoading = false;
  28. else {
  29. for (const i of session_key) {
  30. if (!Object.keys(clients).includes(`${i["id"]}`)) {
  31. taskClientLoading = true;
  32. clients[i["id"]] = null;
  33. var data = await messageModel
  34. .asyncLoadClient(i)
  35. .catch((message) => {
  36. console.log(`error loading clients ${message}`);
  37. });
  38. if (data["TYPE"] == "READY") {
  39. clients[i["id"]] = data["DATA"];
  40. } else if (data["TYPE"] == "AUTH_FAILURE") {
  41. let id = i["id"];
  42. await strapi.api["session-data"].services[
  43. "session-data"
  44. ].delete({ id });
  45. // const messages = await strapi.api.message.services.message.find(
  46. // {
  47. // _sort: "session_datum_key:desc",
  48. // state: "QUEUE",
  49. // session_datum_key: i["id"],
  50. // }
  51. // );
  52. // for (const message of messages) {
  53. // await strapi.api.message.services.message.update(
  54. // { id: message.id },
  55. // {
  56. // state: "ERROR",
  57. // keterangan: "sessions no longer valid",
  58. // }
  59. // );
  60. // }
  61. }
  62. }
  63. }
  64. taskClientLoading = false;
  65. }
  66. }
  67. },
  68. "*/3 * * * * *": async () => {
  69. if (!taskSendingMessage && Object.keys(clients).length != 0) {
  70. // console.log("auto send");
  71. taskSendingMessage = true;
  72. if (Object.keys(clients).length == 0) taskSendingMessage = false;
  73. else {
  74. for (const i of Object.keys(clients)) {
  75. var sessionsValid = await strapi.api[
  76. "session-data"
  77. ].services["session-data"].sessionCheck(parseInt(i));
  78. if (!sessionsValid) {
  79. delete clients[parseInt(i)];
  80. } else {
  81. await sendQueueMessage(clients[i], parseInt(i));
  82. await refreshChat(clients[i], parseInt(i));
  83. }
  84. }
  85. taskSendingMessage = false;
  86. }
  87. }
  88. },
  89. };