Browse Source

done ajax send recieve

master
jefry 4 years ago
parent
commit
131caa5f97
9 changed files with 133 additions and 118 deletions
  1. +4
    -0
      api/message-template/models/message-template.settings.json
  2. +2
    -2
      api/message/models/message.settings.json
  3. +23
    -7
      api/message/services/message.js
  4. +0
    -4
      api/session-data/models/session-data.settings.json
  5. +4
    -68
      config/functions/cron.js
  6. +12
    -4
      model/messageModel.js
  7. +6
    -33
      util/refreshChat.js
  8. +27
    -0
      util/refreshMessage.js
  9. +55
    -0
      util/sendQueueMessage.js

+ 4
- 0
api/message-template/models/message-template.settings.json View File

@@ -23,6 +23,10 @@
},
"body_vars": {
"type": "string"
},
"message": {
"via": "template_key",
"model": "message"
}
}
}

+ 2
- 2
api/message/models/message.settings.json View File

@@ -53,8 +53,8 @@
"timestamp": {
"type": "datetime"
},
"session_datum_key": {
"model": "session-data",
"template_key": {
"model": "message-template",
"via": "message"
}
}


+ 23
- 7
api/message/services/message.js View File

@@ -1,4 +1,4 @@
'use strict';
"use strict";

/**
* Read the documentation (https://strapi.io/documentation/developer-docs/latest/concepts/services.html#core-services)
@@ -6,12 +6,28 @@
*/

module.exports = {
distinctbyKey: async (params) =>{
const results = await strapi.query('message').find(params);
distinctbyKey: async (params) => {
const results = await strapi.query("message").find(params);
let arrKeys = [];
results.forEach((i)=>{
if(!arrKeys.includes(i["session_datum_key"])) arrKeys.push(i["session_datum_key"]);
results.forEach((i) => {
if (!arrKeys.includes(i["session_datum_key"]))
arrKeys.push(i["session_datum_key"]);
});
return arrKeys
}
return arrKeys;
},
getQueueMessage: async (sessionId) => {
var chat = await strapi.api["chats"].services["chats"].find({
session_key: sessionId,
});
var arrayChat = chat.map((i) => i.id);
var messageList = [];
if (chat && chat.length != 0) {
messageList = await strapi.api.message.services.message.find({
_sort: "chat_key:desc",
state: "QUEUE",
chat_key_in: arrayChat,
});
}
return messageList;
},
};

+ 0
- 4
api/session-data/models/session-data.settings.json View File

@@ -32,10 +32,6 @@
"phonenumber": {
"type": "string",
"required": true
},
"message": {
"via": "session_datum_key",
"model": "message"
}
}
}

+ 4
- 68
config/functions/cron.js View File

@@ -1,6 +1,7 @@
"use strict";
const messageModel = require("../../model/messageModel");
const utils = require("../../util/util");
const refreshChat = require("../../util/refreshChat");
const sendQueueMessage = require("../../util/sendQueueMessage");
const { parseMultipartData, sanitizeEntity } = require("strapi-utils");
/**
* Cron config that gives you an opportunity
@@ -78,73 +79,8 @@ module.exports = {
if (!sessionsValid) {
delete clients[parseInt(i)];
} else {
const messages = await strapi.api.message.services.message.find(
{
_sort: "session_datum_key:desc",
state: "QUEUE",
session_datum_key: parseInt(i),
}
);
// console.log(messages);
for (const message of messages) {
// console.log(clients[i] != null, i, clients);
try {
if (clients[i] != null) {
await strapi.api.message.services.message.update(
{ id: message.id },
{ state: "SENDING" }
);
let send = await messageModel.sendMessage(
clients[i],
message["chat_key"]["chatId"]
._serialized,
message["body"]
);
if (send["STATUS"] == 1) {
// console.log(send["DATA"]);
await strapi.api.message.services.message.update(
{ id: message.id },
{
state: "SENT",
messageId:
send["DATA"]["id"]["id"],
from: send["DATA"]["from"],
isForwarded:
send["DATA"][
"isForwarded"
] == undefined
? false
: send["DATA"][
"isForwarded"
],
timestamp: moment
.unix(
send["DATA"][
"timestamp"
]
)
.toDate(),
}
);
} else {
await strapi.api.message.services.message.update(
{ id: message.id },
{
state: "ERROR",
keterangan: send["DATA"],
}
);
}
}
} catch (e) {
// console.log("err", e);
await strapi.api.message.services.message.update(
{ id: message.id },
{ state: "ERROR", keterangan: e.message }
);
}
}
await utils.refreshChat(clients[i], parseInt(i));
await sendQueueMessage(clients[i], parseInt(i));
await refreshChat(clients[i], parseInt(i));
}
}
taskSendingMessage = false;


+ 12
- 4
model/messageModel.js View File

@@ -1,6 +1,6 @@
const qrcode = require("qrcode-terminal");
const fs = require("fs");
const refreshMessage = require("../util/refreshMessage");
// const path = require("path");
const { Client, Chat, Message } = require("whatsapp-web.js");
// const SESSION_FOLDER = path.join(__dirname, "../data/");
@@ -27,11 +27,11 @@ function callbacks(client, callback, type = "create") {
if (session == "UNPAIRED" || session == "CONFLICT") {
try {
if (type == "load" && client && client.info) {
console.log(getID);
// console.log(getID);
getID = await strapi
.query("session-data")
.findOne({ phonenumber: client.info.wid.user });
console.log(getID);
// console.log(getID);
if (getID) {
let id = getID["id"];
await strapi.api["session-data"].services[
@@ -56,8 +56,16 @@ function callbacks(client, callback, type = "create") {
});
});
client.on("message", async (msg) => {
// console.log("MESSAGE RECEIVED", msg.body);
var phoneNumber = msg.from;
// console.log(phoneNumber);
var chat = await strapi.api["chats"].services["chats"].findOne({
phoneNumber: phoneNumber.split("@")[0],
});
await refreshMessage(msg, chat);
});
// client.on("message_create", async (msg) => {

// });
client.on("qr", (qr) => {
return callback({ STATUS: 1, TYPE: "QR_AUTH", DATA: qr });
});


util/util.js → util/refreshChat.js View File

@@ -1,7 +1,7 @@
"use strict";
const messageModel = require("../model/messageModel");
const { parseMultipartData, sanitizeEntity } = require("strapi-utils");
const moment = require("moment");
const refreshMessage = require("./refreshMessage");

const refreshChat = async function (client, sessionsId) {
try {
@@ -34,41 +34,16 @@ const refreshChat = async function (client, sessionsId) {
phoneNumber: result["DATA"][i]["id"].user,
});
}
chatId = chatsExist.id;
var messages = await messageModel.getMessagebyId(
client,
result["DATA"][i]["id"]
);
if (messages["STATUS"] == 1) {
for (var j = 0; j < messages["DATA"].length; j++) {
var Exist = await strapi.api["message"].services[
"message"
].findOne({
messageId: messages["DATA"][j]["id"].id,
});
if (!Exist) {
// console.log(chatId);
await strapi.query("message").create({
messageId: messages["DATA"][j]["id"].id,
to: messages["DATA"][j]["to"],
from: messages["DATA"][j]["from"],
body: messages["DATA"][j]["body"],
state: messages["DATA"][j]["fromMe"]
? "SENT"
: "RECIEVED",
isForwarded:
messages["DATA"][j]["isForwarded"] ==
undefined
? false
: messages["DATA"][j][
"isForwarded"
],
chat_key: chatId,
timestamp: moment
.unix(messages["DATA"][j]["timestamp"])
.toDate(),
});
}
await refreshMessage(
messages["DATA"][j],
chatsExist
);
}
}
}
@@ -84,6 +59,4 @@ const refreshChat = async function (client, sessionsId) {
}
};

module.exports = {
refreshChat: refreshChat,
};
module.exports = refreshChat;

+ 27
- 0
util/refreshMessage.js View File

@@ -0,0 +1,27 @@
"use strict";
const moment = require("moment");

const refreshMessage = async function (message, chat) {
var Exist = await strapi.api["message"].services["message"].findOne({
messageId: message["id"].id,
});
if (!Exist) {
// console.log(chatId);
await strapi.query("message").create({
messageId: message["id"].id,
to: message["to"],
from: message["from"],
body: message["body"],
state: message["fromMe"] ? "SENT" : "RECIEVED",
isForwarded:
message["isForwarded"] == undefined
? false
: message["isForwarded"],
chat_key: chat.id,
timestamp: moment.unix(message["timestamp"]).toDate(),
});
// console.log("message added");
}
};

module.exports = refreshMessage;

+ 55
- 0
util/sendQueueMessage.js View File

@@ -0,0 +1,55 @@
const messageModel = require("../model/messageModel");
const moment = require("moment");

module.exports = async function (client, sessionId) {
const messages = await strapi.api.message.services.message.getQueueMessage(
sessionId
);
for (const message of messages) {
try {
if (client != null) {
await strapi.api.message.services.message.update(
{ id: message.id },
{ state: "SENDING" }
);
let send = await messageModel.sendMessage(
client,
message["chat_key"]["chatId"]._serialized,
message["body"]
);
if (send["STATUS"] == 1) {
// console.log(send["DATA"]);
await strapi.api.message.services.message.update(
{ id: message.id },
{
state: "SENT",
messageId: send["DATA"]["id"]["id"],
from: send["DATA"]["from"],
isForwarded:
send["DATA"]["isForwarded"] == undefined
? false
: send["DATA"]["isForwarded"],
timestamp: moment
.unix(send["DATA"]["timestamp"])
.toDate(),
}
);
} else {
await strapi.api.message.services.message.update(
{ id: message.id },
{
state: "ERROR",
keterangan: send["DATA"],
}
);
}
}
} catch (e) {
// console.log("err", e);
await strapi.api.message.services.message.update(
{ id: message.id },
{ state: "ERROR", keterangan: e.message }
);
}
}
};

Loading…
Cancel
Save