wa_strapi
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

121 wiersze
3.3 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. taskClientLoading = true;
  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. session_key.forEach(async (i, indx) => {
  29. if (!Object.keys(clients).includes(`${i["id"]}`)) {
  30. clients[i["id"]] = null;
  31. await messageModel.loadClient(
  32. i["session_data"],
  33. async (data) => {
  34. if (
  35. data["STATUS"] == 1 &&
  36. data["TYPE"] == "READY"
  37. ) {
  38. if (indx + 1 == session_key.length)
  39. taskClientLoading = false;
  40. clients[i["id"]] = data["DATA"];
  41. return;
  42. } else if (
  43. data["STATUS"] == 0 &&
  44. data["AUTH_FAILURE"]
  45. ) {
  46. let id = i["id"];
  47. await strapi.api["session-data"].services[
  48. "session-data"
  49. ].delete({ id });
  50. if (indx + 1 == session_key.length)
  51. taskClientLoading = false;
  52. return;
  53. } else if (data["STATUS"] == 0) {
  54. if (indx + 1 == session_key.length)
  55. taskClientLoading = false;
  56. return;
  57. }
  58. }
  59. );
  60. }
  61. });
  62. }
  63. }
  64. },
  65. "*/3 * * * * *": async () => {
  66. if (!taskSendingMessage) {
  67. console.log("auto send", clients);
  68. taskSendingMessage = true;
  69. if (Object.keys(clients).length == 0) taskSendingMessage = false;
  70. else {
  71. Object.keys(clients).forEach(async (i, indx) => {
  72. const sessions = await strapi.api["session-data"].services[
  73. "session-data"
  74. ].getId({
  75. _sort: "phonenumber:desc",
  76. });
  77. if (!sessions.includes(i)) {
  78. delete clients[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: i,
  85. }
  86. );
  87. messages.forEach(async (message) => {
  88. console.log(clients[i] != null, i, clients);
  89. if (clients[i] != null) {
  90. await strapi.api.message.services.message.update(
  91. { id: message.id },
  92. { state: "SENDING" }
  93. );
  94. let send = await messageModel.sendMessage(
  95. clients[i],
  96. message["send_to"],
  97. message["raw_text"]
  98. );
  99. if (send["STATUS"] == 1) {
  100. await strapi.api.message.services.message.update(
  101. { id: message.id },
  102. { state: "SENT" }
  103. );
  104. } else {
  105. await strapi.api.message.services.message.update(
  106. { id: message.id },
  107. { state: "ERROR" }
  108. );
  109. }
  110. } else taskSendingMessage = false;
  111. });
  112. }
  113. if (indx + 1 == Object.keys(clients).length)
  114. taskSendingMessage = false;
  115. });
  116. }
  117. }
  118. },
  119. };