wa_strapi
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

132 rindas
3.7 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. module.exports = {
  17. "*/10 * * * * *": async () => {
  18. if (!taskClientLoading) {
  19. // console.log("refresh cients");
  20. const session_key = await strapi.api["session-data"].services[
  21. "session-data"
  22. ].find({
  23. _sort: "phonenumber:desc",
  24. });
  25. if (session_key.length == 0) taskClientLoading = false;
  26. else {
  27. for (const i of session_key) {
  28. if (!Object.keys(clients).includes(`${i["id"]}`)) {
  29. taskClientLoading = true;
  30. clients[i["id"]] = null;
  31. var data = await messageModel
  32. .asyncLoadClient(i)
  33. .catch((message) => {
  34. console.log(`error loading clients ${message}`);
  35. });
  36. if (data["TYPE"] == "READY") {
  37. clients[i["id"]] = data["DATA"];
  38. } else if (data["TYPE"] == "AUTH_FAILURE") {
  39. let id = i["id"];
  40. await strapi.api["session-data"].services[
  41. "session-data"
  42. ].delete({ id });
  43. const messages = await strapi.api.message.services.message.find(
  44. {
  45. _sort: "session_datum_key:desc",
  46. state: "QUEUE",
  47. session_datum_key: i["id"],
  48. }
  49. );
  50. for (const message of messages) {
  51. await strapi.api.message.services.message.update(
  52. { id: message.id },
  53. {
  54. state: "ERROR",
  55. keterangan: "sessions no longer valid",
  56. }
  57. );
  58. }
  59. }
  60. }
  61. }
  62. taskClientLoading = false;
  63. }
  64. }
  65. },
  66. "*/3 * * * * *": async () => {
  67. if (!taskSendingMessage && Object.keys(clients).length != 0) {
  68. // console.log("auto send");
  69. taskSendingMessage = true;
  70. if (Object.keys(clients).length == 0) taskSendingMessage = false;
  71. else {
  72. for (const i of Object.keys(clients)) {
  73. const sessions = await strapi.api["session-data"].services[
  74. "session-data"
  75. ].getId({
  76. _sort: "phonenumber:desc",
  77. });
  78. if (!sessions.includes(parseInt(i))) {
  79. delete clients[parseInt(i)];
  80. } else {
  81. const messages = await strapi.api.message.services.message.find(
  82. {
  83. _sort: "session_datum_key:desc",
  84. state: "QUEUE",
  85. session_datum_key: i,
  86. }
  87. );
  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["send_to"],
  99. message["raw_text"]
  100. );
  101. // console.log(send);
  102. if (send["STATUS"] == 1) {
  103. await strapi.api.message.services.message.update(
  104. { id: message.id },
  105. { state: "SENT" }
  106. );
  107. } else {
  108. await strapi.api.message.services.message.update(
  109. { id: message.id },
  110. {
  111. state: "ERROR",
  112. keterangan: send["DATA"],
  113. }
  114. );
  115. }
  116. }
  117. } catch (e) {
  118. await strapi.api.message.services.message.update(
  119. { id: message.id },
  120. { state: "ERROR", keterangan: e.message }
  121. );
  122. }
  123. }
  124. }
  125. }
  126. taskSendingMessage = false;
  127. }
  128. }
  129. },
  130. };