wa_strapi
Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.

155 righe
4.3 KiB

  1. "use strict";
  2. const messageModel = require("../../model/messageModel");
  3. const utils = require("../../util/util");
  4. const { parseMultipartData, sanitizeEntity } = require("strapi-utils");
  5. /**
  6. * Cron config that gives you an opportunity
  7. * to run scheduled jobs.
  8. *
  9. * The cron format consists of:
  10. * [SECOND (optional)] [MINUTE] [HOUR] [DAY OF MONTH] [MONTH OF YEAR] [DAY OF WEEK]
  11. *
  12. * See more details here: https://strapi.io/documentation/developer-docs/latest/concepts/configurations.html#cron-tasks
  13. */
  14. let clients = {};
  15. let taskClientLoading = false;
  16. let taskSendingMessage = false;
  17. module.exports = {
  18. "*/10 * * * * *": async () => {
  19. if (!taskClientLoading) {
  20. // console.log("refresh cients");
  21. const session_key = await strapi.api["session-data"].services[
  22. "session-data"
  23. ].find({
  24. _sort: "phonenumber:desc",
  25. });
  26. if (session_key.length == 0) taskClientLoading = false;
  27. else {
  28. for (const i of session_key) {
  29. if (!Object.keys(clients).includes(`${i["id"]}`)) {
  30. taskClientLoading = true;
  31. clients[i["id"]] = null;
  32. var data = await messageModel
  33. .asyncLoadClient(i)
  34. .catch((message) => {
  35. console.log(`error loading clients ${message}`);
  36. });
  37. if (data["TYPE"] == "READY") {
  38. clients[i["id"]] = data["DATA"];
  39. } else if (data["TYPE"] == "AUTH_FAILURE") {
  40. let id = i["id"];
  41. await strapi.api["session-data"].services[
  42. "session-data"
  43. ].delete({ id });
  44. const messages = await strapi.api.message.services.message.find(
  45. {
  46. _sort: "session_datum_key:desc",
  47. state: "QUEUE",
  48. session_datum_key: i["id"],
  49. }
  50. );
  51. for (const message of messages) {
  52. await strapi.api.message.services.message.update(
  53. { id: message.id },
  54. {
  55. state: "ERROR",
  56. keterangan: "sessions no longer valid",
  57. }
  58. );
  59. }
  60. }
  61. }
  62. }
  63. taskClientLoading = false;
  64. }
  65. }
  66. },
  67. "*/3 * * * * *": async () => {
  68. if (!taskSendingMessage && Object.keys(clients).length != 0) {
  69. // console.log("auto send");
  70. taskSendingMessage = true;
  71. if (Object.keys(clients).length == 0) taskSendingMessage = false;
  72. else {
  73. for (const i of Object.keys(clients)) {
  74. var sessionsValid = await strapi.api[
  75. "session-data"
  76. ].services["session-data"].sessionCheck(parseInt(i));
  77. if (!sessionsValid) {
  78. delete clients[parseInt(i)];
  79. } else {
  80. const messages = await strapi.api.message.services.message.find(
  81. {
  82. _sort: "session_datum_key:desc",
  83. state: "QUEUE",
  84. session_datum_key: parseInt(i),
  85. }
  86. );
  87. // console.log(messages);
  88. for (const message of messages) {
  89. // console.log(clients[i] != null, i, clients);
  90. try {
  91. if (clients[i] != null) {
  92. await strapi.api.message.services.message.update(
  93. { id: message.id },
  94. { state: "SENDING" }
  95. );
  96. let send = await messageModel.sendMessage(
  97. clients[i],
  98. message["chat_key"]["chatId"]
  99. ._serialized,
  100. message["body"]
  101. );
  102. if (send["STATUS"] == 1) {
  103. // console.log(send["DATA"]);
  104. await strapi.api.message.services.message.update(
  105. { id: message.id },
  106. {
  107. state: "SENT",
  108. messageId:
  109. send["DATA"]["id"]["id"],
  110. from: send["DATA"]["from"],
  111. isForwarded:
  112. send["DATA"][
  113. "isForwarded"
  114. ] == undefined
  115. ? false
  116. : send["DATA"][
  117. "isForwarded"
  118. ],
  119. timestamp: moment
  120. .unix(
  121. send["DATA"][
  122. "timestamp"
  123. ]
  124. )
  125. .toDate(),
  126. }
  127. );
  128. } else {
  129. await strapi.api.message.services.message.update(
  130. { id: message.id },
  131. {
  132. state: "ERROR",
  133. keterangan: send["DATA"],
  134. }
  135. );
  136. }
  137. }
  138. } catch (e) {
  139. // console.log("err", e);
  140. await strapi.api.message.services.message.update(
  141. { id: message.id },
  142. { state: "ERROR", keterangan: e.message }
  143. );
  144. }
  145. }
  146. await utils.refreshChat(clients[i], parseInt(i));
  147. }
  148. }
  149. taskSendingMessage = false;
  150. }
  151. }
  152. },
  153. };