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.

116 wiersze
3.2 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) => {
  18. messageModel.loadClient(i["session_data"], async (data) => {
  19. return resolve(data);
  20. });
  21. });
  22. }
  23. module.exports = {
  24. "*/10 * * * * *": async () => {
  25. if (!taskClientLoading) {
  26. // console.log("refresh cients");
  27. const session_key = await strapi.api["session-data"].services[
  28. "session-data"
  29. ].find({
  30. _sort: "phonenumber:desc",
  31. });
  32. if (session_key.length == 0) taskClientLoading = false;
  33. else {
  34. for (const i of session_key) {
  35. if (!Object.keys(clients).includes(`${i["id"]}`)) {
  36. taskClientLoading = true;
  37. clients[i["id"]] = null;
  38. var data = await loadClient(i);
  39. if (data["TYPE"] == "READY") {
  40. clients[i["id"]] = data["DATA"];
  41. } else if (data["TYPE"] == "AUTH_FAILURE") {
  42. let id = i["id"];
  43. await strapi.api["session-data"].services[
  44. "session-data"
  45. ].delete({ id });
  46. }
  47. }
  48. }
  49. taskClientLoading = false;
  50. }
  51. }
  52. },
  53. "*/3 * * * * *": async () => {
  54. if (!taskSendingMessage && Object.keys(clients).length != 0) {
  55. // console.log("auto send");
  56. taskSendingMessage = true;
  57. if (Object.keys(clients).length == 0) taskSendingMessage = false;
  58. else {
  59. for (const i of Object.keys(clients)) {
  60. const sessions = await strapi.api["session-data"].services[
  61. "session-data"
  62. ].getId({
  63. _sort: "phonenumber:desc",
  64. });
  65. if (!sessions.includes(parseInt(i))) {
  66. delete clients[parseInt(i)];
  67. } else {
  68. const messages = await strapi.api.message.services.message.find(
  69. {
  70. _sort: "session_datum_key:desc",
  71. state: "QUEUE",
  72. session_datum_key: i,
  73. }
  74. );
  75. for (const message of messages) {
  76. // console.log(clients[i] != null, i, clients);
  77. try {
  78. if (clients[i] != null) {
  79. await strapi.api.message.services.message.update(
  80. { id: message.id },
  81. { state: "SENDING" }
  82. );
  83. let send = await messageModel.sendMessage(
  84. clients[i],
  85. message["send_to"],
  86. message["raw_text"]
  87. );
  88. if (send["STATUS"] == 1) {
  89. await strapi.api.message.services.message.update(
  90. { id: message.id },
  91. { state: "SENT" }
  92. );
  93. } else {
  94. await strapi.api.message.services.message.update(
  95. { id: message.id },
  96. { state: "ERROR" }
  97. );
  98. }
  99. }
  100. } catch (e) {
  101. await strapi.api.message.services.message.update(
  102. { id: message.id },
  103. { state: "ERROR" }
  104. );
  105. }
  106. }
  107. }
  108. }
  109. taskSendingMessage = false;
  110. }
  111. }
  112. },
  113. };