wa_strapi
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

142 строки
3.9 KiB

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