2022-01-06 01:26:15 +00:00
|
|
|
import { Message as WbotMessage } from "whatsapp-web.js";
|
|
|
|
import AppError from "../../errors/AppError";
|
|
|
|
import GetTicketWbot from "../../helpers/GetTicketWbot";
|
|
|
|
import GetWbotMessage from "../../helpers/GetWbotMessage";
|
|
|
|
import SerializeWbotMsgId from "../../helpers/SerializeWbotMsgId";
|
|
|
|
import Message from "../../models/Message";
|
|
|
|
import Ticket from "../../models/Ticket";
|
2022-11-14 14:21:58 +00:00
|
|
|
import Whatsapp from "../../models/Whatsapp";
|
2022-01-06 01:26:15 +00:00
|
|
|
|
2022-04-23 15:18:02 +00:00
|
|
|
import ShowWhatsAppService from "../WhatsappService/ShowWhatsAppService";
|
|
|
|
import wbotByUserQueue from '../../helpers/GetWbotByUserQueue'
|
2022-06-27 06:21:04 +00:00
|
|
|
|
|
|
|
import { WhatsIndex } from "../../helpers/LoadBalanceWhatsSameQueue";
|
|
|
|
|
2022-11-14 14:21:58 +00:00
|
|
|
import { deleteTicketsByContactsCache, updateTicketCacheByTicketId } from '../../helpers/TicketCache'
|
|
|
|
|
|
|
|
import ListWhatsAppsNumber from "../WhatsappService/ListWhatsAppsNumber";
|
|
|
|
import { getWbot } from "../../libs/wbot";
|
2022-11-16 13:23:14 +00:00
|
|
|
import { json } from "sequelize/types";
|
|
|
|
|
|
|
|
import sendMessageMultiSession from "../../helpers/TrySendMessageMultiSession";
|
|
|
|
import { restartWhatsSession } from "../../helpers/RestartWhatsSession";
|
2022-11-17 14:40:37 +00:00
|
|
|
import { insertOrUpeateWhatsCache, searchWhatsappCache } from "../../helpers/WhatsCache";
|
2022-12-11 07:47:32 +00:00
|
|
|
import GetDefaultWhatsApp from "../../helpers/GetDefaultWhatsApp";
|
2022-12-14 12:29:42 +00:00
|
|
|
import autoRestore from "../../helpers/AutoRestore";
|
2022-11-16 13:23:14 +00:00
|
|
|
|
|
|
|
|
2022-04-23 15:18:02 +00:00
|
|
|
|
2022-01-06 01:26:15 +00:00
|
|
|
interface Request {
|
|
|
|
body: string;
|
|
|
|
ticket: Ticket;
|
|
|
|
quotedMsg?: Message;
|
|
|
|
}
|
|
|
|
|
|
|
|
const SendWhatsAppMessage = async ({
|
|
|
|
body,
|
|
|
|
ticket,
|
|
|
|
quotedMsg
|
|
|
|
}: Request): Promise<WbotMessage> => {
|
|
|
|
|
2022-12-21 00:28:41 +00:00
|
|
|
var timetaken = `######################################## TicketId: ${ticket.id} => Time taken to send the message`;
|
2022-11-16 13:23:14 +00:00
|
|
|
|
2022-11-14 14:21:58 +00:00
|
|
|
|
2022-11-17 14:40:37 +00:00
|
|
|
console.time(timetaken)
|
2022-11-14 14:21:58 +00:00
|
|
|
|
2022-11-16 13:23:14 +00:00
|
|
|
|
2022-11-17 14:40:37 +00:00
|
|
|
let quotedMsgSerializedId: string | undefined;
|
|
|
|
if (quotedMsg) {
|
|
|
|
await GetWbotMessage(ticket, quotedMsg.id);
|
|
|
|
quotedMsgSerializedId = SerializeWbotMsgId(ticket, quotedMsg);
|
|
|
|
}
|
2022-11-14 14:21:58 +00:00
|
|
|
|
2022-11-16 13:23:14 +00:00
|
|
|
|
|
|
|
let whatsapps: any
|
2022-12-14 12:29:42 +00:00
|
|
|
|
2022-12-11 07:47:32 +00:00
|
|
|
//TEST DEL
|
2022-11-14 14:21:58 +00:00
|
|
|
|
2022-12-11 07:47:32 +00:00
|
|
|
// const defaultWhatsapp = await GetDefaultWhatsApp();
|
|
|
|
// console.log('DEFAULT WHATSAPP: ', JSON.parse(JSON.stringify(defaultWhatsapp)))
|
2022-06-27 06:21:04 +00:00
|
|
|
|
2022-12-11 07:47:32 +00:00
|
|
|
let listWhatsapp = null
|
2022-12-14 12:29:42 +00:00
|
|
|
|
2022-12-11 07:47:32 +00:00
|
|
|
listWhatsapp = await searchWhatsappCache(`${ticket.whatsappId}`, 'CONNECTED')
|
2022-11-14 14:21:58 +00:00
|
|
|
|
2022-12-14 12:29:42 +00:00
|
|
|
if (!listWhatsapp) {
|
2022-12-11 07:47:32 +00:00
|
|
|
listWhatsapp = await ListWhatsAppsNumber(ticket.whatsappId, 'CONNECTED')
|
2022-11-14 14:21:58 +00:00
|
|
|
}
|
|
|
|
|
2022-12-11 07:47:32 +00:00
|
|
|
// console.log('---')
|
|
|
|
// console.log('listWhatsapp search: ', listWhatsapp)
|
|
|
|
// console.log('---')
|
2022-11-14 14:21:58 +00:00
|
|
|
|
2022-12-11 07:47:32 +00:00
|
|
|
if (listWhatsapp.length > 1) {
|
2022-11-14 14:21:58 +00:00
|
|
|
|
2022-12-11 07:47:32 +00:00
|
|
|
console.log('entrou --------------------->')
|
2022-11-16 13:23:14 +00:00
|
|
|
|
2022-12-14 12:29:42 +00:00
|
|
|
const _whatsapp = listWhatsapp[Math.floor(Math.random() * listWhatsapp.length)];
|
2022-11-16 13:23:14 +00:00
|
|
|
|
2022-12-11 07:47:32 +00:00
|
|
|
await ticket.update({ whatsappId: +_whatsapp.id });
|
2022-11-16 13:23:14 +00:00
|
|
|
|
2022-12-14 12:29:42 +00:00
|
|
|
}
|
2022-11-16 13:23:14 +00:00
|
|
|
|
2022-12-14 12:29:42 +00:00
|
|
|
console.log('1 --------> ticket.whatsappId: ', ticket.whatsappId)
|
2022-11-16 13:23:14 +00:00
|
|
|
|
2022-12-14 12:29:42 +00:00
|
|
|
if (listWhatsapp.length == 0) {
|
2022-11-14 14:21:58 +00:00
|
|
|
|
|
|
|
whatsapps = await wbotByUserQueue(ticket.userId)
|
2022-06-27 06:21:04 +00:00
|
|
|
|
|
|
|
if (whatsapps.length > 0) {
|
|
|
|
|
|
|
|
if (whatsapps.length > 1) {
|
2022-04-23 15:18:02 +00:00
|
|
|
|
2022-06-27 06:21:04 +00:00
|
|
|
await ticket.update({ whatsappId: whatsapps[+WhatsIndex(whatsapps)].id });
|
2022-04-23 15:18:02 +00:00
|
|
|
|
2022-06-27 06:21:04 +00:00
|
|
|
}
|
|
|
|
else {
|
|
|
|
|
|
|
|
await ticket.update({ whatsappId: whatsapps[0].id });
|
2022-04-23 15:18:02 +00:00
|
|
|
|
2022-06-27 06:21:04 +00:00
|
|
|
}
|
2022-04-23 15:18:02 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
|
2022-06-27 06:21:04 +00:00
|
|
|
}
|
|
|
|
|
2022-12-14 12:29:42 +00:00
|
|
|
|
|
|
|
//
|
|
|
|
|
2022-12-11 07:47:32 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// const listWhatsapp = await ListWhatsAppsNumber(ticket.whatsappId, 'CONNECTED')
|
|
|
|
|
|
|
|
// if (listWhatsapp.length > 1) {
|
|
|
|
|
|
|
|
// const _whatsapp = listWhatsapp[Math.floor(Math.random() * listWhatsapp.length)];
|
|
|
|
|
|
|
|
// await ticket.update({ whatsappId: _whatsapp.id });
|
|
|
|
|
|
|
|
// }
|
|
|
|
// else {
|
|
|
|
|
|
|
|
// whatsapps = await Whatsapp.findOne({
|
|
|
|
// where: { id: ticket.whatsappId },
|
|
|
|
// attributes: ['status']
|
|
|
|
// })
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
// console.log('1 --------> ticket.whatsappId: ', ticket.whatsappId)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// if (listWhatsapp.length == 0 || (whatsapps && whatsapps.status != 'CONNECTED')) {
|
|
|
|
|
|
|
|
// whatsapps = await wbotByUserQueue(ticket.userId)
|
|
|
|
|
|
|
|
// if (whatsapps.length > 0) {
|
|
|
|
|
|
|
|
// if (whatsapps.length > 1) {
|
|
|
|
|
|
|
|
// await ticket.update({ whatsappId: whatsapps[+WhatsIndex(whatsapps)].id });
|
|
|
|
|
|
|
|
// }
|
|
|
|
// else {
|
|
|
|
|
|
|
|
// await ticket.update({ whatsappId: whatsapps[0].id });
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
2022-01-06 01:26:15 +00:00
|
|
|
const wbot = await GetTicketWbot(ticket);
|
|
|
|
|
2022-11-16 18:29:20 +00:00
|
|
|
console.log('2 --------> send from whatsapp ticket.whatsappId: ', ticket.whatsappId)
|
2022-11-16 13:23:14 +00:00
|
|
|
|
|
|
|
|
2022-01-06 01:26:15 +00:00
|
|
|
try {
|
2022-11-17 14:40:37 +00:00
|
|
|
console.time
|
|
|
|
|
2022-10-02 06:22:44 +00:00
|
|
|
const sentMessage = await wbot.sendMessage(`${ticket.contact.number}@${ticket.isGroup ? "g" : "c"}.us`, body, { quotedMessageId: quotedMsgSerializedId, linkPreview: false });
|
2022-10-25 14:16:36 +00:00
|
|
|
|
2022-11-14 14:21:58 +00:00
|
|
|
await ticket.update({ lastMessage: body });
|
2022-10-25 14:16:36 +00:00
|
|
|
|
|
|
|
await updateTicketCacheByTicketId(ticket.id, { lastMessage: body, updatedAt: new Date(ticket.updatedAt).toISOString() })
|
|
|
|
|
2022-11-17 14:40:37 +00:00
|
|
|
console.timeEnd(timetaken)
|
|
|
|
|
2022-01-06 01:26:15 +00:00
|
|
|
return sentMessage;
|
|
|
|
} catch (err) {
|
2022-11-16 13:23:14 +00:00
|
|
|
|
|
|
|
const whatsapp = await ShowWhatsAppService(ticket.whatsappId);
|
|
|
|
|
|
|
|
if (whatsapp.status != 'RESTORING') {
|
|
|
|
|
|
|
|
console.log('THE WHATSAAP ID: ', whatsapp.id, ' WILL BE RESTORED SOON!')
|
|
|
|
|
|
|
|
await whatsapp.update({
|
|
|
|
status: "RESTORING",
|
|
|
|
});
|
2022-11-17 14:40:37 +00:00
|
|
|
|
|
|
|
await insertOrUpeateWhatsCache(`whatsapp:${whatsapp.id}`, {
|
|
|
|
status: "RESTORING",
|
|
|
|
})
|
|
|
|
|
2022-12-14 12:29:42 +00:00
|
|
|
// setTimeout(() => restartWhatsSession(whatsapp, true), 90000);
|
|
|
|
setTimeout(async () => await autoRestore(whatsapp.id, 'auto_send_message'), 95000);
|
2022-11-16 13:23:14 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
const sentMessage = await sendMessageMultiSession(ticket, body, quotedMsgSerializedId)
|
|
|
|
|
|
|
|
if (sentMessage.length > 0) {
|
|
|
|
|
|
|
|
await ticket.update({ lastMessage: body });
|
|
|
|
await updateTicketCacheByTicketId(ticket.id, { lastMessage: body, updatedAt: new Date(ticket.updatedAt).toISOString() })
|
|
|
|
return sentMessage;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2022-01-06 01:26:15 +00:00
|
|
|
throw new AppError("ERR_SENDING_WAPP_MSG");
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
export default SendWhatsAppMessage;
|