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";
|
2023-01-01 23:40:00 +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-12-22 21:49:44 +00:00
|
|
|
import { _restore } from "../../helpers/RestoreControll";
|
2023-02-07 15:47:40 +00:00
|
|
|
import { getIO } from "../../libs/socket";
|
|
|
|
import sendWhatsAppMessageSocket from "../../helpers/SendWhatsappMessageSocket";
|
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;
|
2023-04-18 19:30:19 +00:00
|
|
|
number?: string
|
2022-01-06 01:26:15 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
const SendWhatsAppMessage = async ({
|
|
|
|
body,
|
|
|
|
ticket,
|
2023-04-18 19:30:19 +00:00
|
|
|
quotedMsg,
|
|
|
|
number
|
2023-02-07 15:47:40 +00:00
|
|
|
}: Request): Promise<WbotMessage | any> => {
|
2022-01-06 01:26:15 +00:00
|
|
|
|
2023-04-20 18:48:42 +00:00
|
|
|
try {
|
2022-11-14 14:21:58 +00:00
|
|
|
|
2023-06-29 20:48:24 +00:00
|
|
|
// let timestamp = Math.floor(Date.now() / 1000)
|
2023-07-12 13:35:23 +00:00
|
|
|
let timestamp = Date.now() + String(Math.floor(Math.random() * 1000))
|
2023-04-20 18:48:42 +00:00
|
|
|
var timetaken = `########################################${timestamp}| TicketId: ${ticket.id} => Time taken to send the message`;
|
2022-11-14 14:21:58 +00:00
|
|
|
|
2023-07-13 18:28:40 +00:00
|
|
|
console.time(timetaken)
|
|
|
|
|
2023-02-07 15:47:40 +00:00
|
|
|
|
|
|
|
|
2023-04-20 18:48:42 +00:00
|
|
|
let quotedMsgSerializedId: string | undefined;
|
2023-02-07 15:47:40 +00:00
|
|
|
|
2023-04-20 18:48:42 +00:00
|
|
|
if (quotedMsg) {
|
2023-02-07 15:47:40 +00:00
|
|
|
|
2023-04-20 18:48:42 +00:00
|
|
|
await GetWbotMessage(ticket, quotedMsg.id);
|
2023-02-07 15:47:40 +00:00
|
|
|
|
2023-04-20 18:48:42 +00:00
|
|
|
quotedMsgSerializedId = SerializeWbotMsgId(ticket, quotedMsg);
|
|
|
|
}
|
2023-02-07 15:47:40 +00:00
|
|
|
|
2023-04-20 18:48:42 +00:00
|
|
|
console.log('quotedMsgSerializedId: ', quotedMsgSerializedId)
|
2022-11-14 14:21:58 +00:00
|
|
|
|
|
|
|
|
2023-04-20 18:48:42 +00:00
|
|
|
let whatsapps: any
|
2022-11-16 13:23:14 +00:00
|
|
|
|
2023-04-20 18:48:42 +00:00
|
|
|
let listWhatsapp = null
|
2022-11-16 13:23:14 +00:00
|
|
|
|
2023-07-12 13:35:23 +00:00
|
|
|
// listWhatsapp = await searchWhatsappCache(`${ticket.whatsappId}`, 'CONNECTED')
|
2023-02-07 15:47:40 +00:00
|
|
|
|
2023-07-12 13:35:23 +00:00
|
|
|
if (!ticket.whatsappId) {
|
|
|
|
|
|
|
|
const defaultWhatsapp: any = await GetDefaultWhatsApp(ticket.userId);
|
|
|
|
|
|
|
|
await ticket.update({ whatsappId: +defaultWhatsapp.id });
|
|
|
|
|
|
|
|
}
|
2022-11-16 13:23:14 +00:00
|
|
|
|
2023-04-20 18:48:42 +00:00
|
|
|
if (!listWhatsapp) {
|
|
|
|
listWhatsapp = await ListWhatsAppsNumber(ticket.whatsappId, 'CONNECTED')
|
|
|
|
}
|
2022-11-16 13:23:14 +00:00
|
|
|
|
2023-04-20 18:48:42 +00:00
|
|
|
if (listWhatsapp.whatsapp && listWhatsapp.whatsapp.status != 'CONNECTED' && listWhatsapp.whatsapps.length > 0) {
|
2023-02-07 15:47:40 +00:00
|
|
|
|
2023-04-20 18:48:42 +00:00
|
|
|
await ticket.update({ whatsappId: + listWhatsapp.whatsapps[0].id });
|
2023-02-07 15:47:40 +00:00
|
|
|
|
2023-04-20 18:48:42 +00:00
|
|
|
}
|
2022-06-27 06:21:04 +00:00
|
|
|
|
2023-02-07 15:47:40 +00:00
|
|
|
|
2023-04-20 18:48:42 +00:00
|
|
|
if (listWhatsapp.whatsapps.length > 1) {
|
2023-02-07 15:47:40 +00:00
|
|
|
|
2023-04-20 18:48:42 +00:00
|
|
|
const _whatsapp = listWhatsapp.whatsapps[Math.floor(Math.random() * listWhatsapp.whatsapps.length)];
|
2023-02-07 15:47:40 +00:00
|
|
|
|
2023-04-20 18:48:42 +00:00
|
|
|
await ticket.update({ whatsappId: +_whatsapp.id });
|
2023-02-07 15:47:40 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
|
2023-04-20 18:48:42 +00:00
|
|
|
if (listWhatsapp.whatsapps.length == 0 && listWhatsapp.whatsapp.status != 'CONNECTED') {
|
2023-02-07 15:47:40 +00:00
|
|
|
|
2023-04-20 18:48:42 +00:00
|
|
|
console.log('listWhatsapp.whatsapps == 0')
|
2023-02-07 15:47:40 +00:00
|
|
|
|
2023-04-20 18:48:42 +00:00
|
|
|
whatsapps = await wbotByUserQueue(ticket.userId)
|
2023-02-07 15:47:40 +00:00
|
|
|
|
2023-04-20 18:48:42 +00:00
|
|
|
console.log('============> The whatsapps: ', whatsapps)
|
2023-02-07 15:47:40 +00:00
|
|
|
|
2023-04-20 18:48:42 +00:00
|
|
|
if (whatsapps.length > 0) {
|
2023-02-07 15:47:40 +00:00
|
|
|
|
2023-04-20 18:48:42 +00:00
|
|
|
if (whatsapps.length > 1) {
|
2023-01-01 23:40:00 +00:00
|
|
|
|
2023-04-20 18:48:42 +00:00
|
|
|
await ticket.update({ whatsappId: whatsapps[+WhatsIndex(whatsapps)].id });
|
2023-01-01 23:40:00 +00:00
|
|
|
|
2023-04-20 18:48:42 +00:00
|
|
|
}
|
|
|
|
else {
|
2023-02-07 15:47:40 +00:00
|
|
|
|
2023-04-20 18:48:42 +00:00
|
|
|
await ticket.update({ whatsappId: whatsapps[0].id });
|
2022-06-27 06:21:04 +00:00
|
|
|
|
2023-04-20 18:48:42 +00:00
|
|
|
}
|
2022-04-23 15:18:02 +00:00
|
|
|
|
2022-06-27 06:21:04 +00:00
|
|
|
}
|
2022-04-23 15:18:02 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
|
2023-04-20 18:48:42 +00:00
|
|
|
console.log('1 --------> send from whatsapp ticket.whatsappId: ', ticket.whatsappId)
|
2022-11-16 13:23:14 +00:00
|
|
|
|
2023-04-20 18:48:42 +00:00
|
|
|
try {
|
2022-11-17 14:40:37 +00:00
|
|
|
|
2023-07-12 13:35:23 +00:00
|
|
|
sendWhatsAppMessageSocket(ticket, body, quotedMsgSerializedId, number);
|
2022-10-25 14:16:36 +00:00
|
|
|
|
2023-07-12 13:35:23 +00:00
|
|
|
await ticket.update({ lastMessage: body });
|
2022-11-17 14:40:37 +00:00
|
|
|
|
2023-04-20 18:48:42 +00:00
|
|
|
await updateTicketCacheByTicketId(ticket.id, { lastMessage: body, updatedAt: new Date(ticket.updatedAt).toISOString() })
|
2022-11-16 13:23:14 +00:00
|
|
|
|
2023-04-20 18:48:42 +00:00
|
|
|
console.timeEnd(timetaken)
|
2022-11-16 13:23:14 +00:00
|
|
|
|
2023-04-20 18:48:42 +00:00
|
|
|
} catch (err: any) {
|
2022-11-16 13:23:14 +00:00
|
|
|
|
2023-04-20 18:48:42 +00:00
|
|
|
console.error('0 ===> Error on SendWhatsAppMessage.ts file: \n', err)
|
|
|
|
throw new AppError("ERR_SENDING_WAPP_MSG");
|
2022-11-16 13:23:14 +00:00
|
|
|
|
2022-04-23 15:18:02 +00:00
|
|
|
}
|
2022-11-16 13:23:14 +00:00
|
|
|
|
2023-04-20 18:48:42 +00:00
|
|
|
} catch (error: any) {
|
|
|
|
console.error('===> Error on SendWhatsAppMessage.ts file: \n', error)
|
|
|
|
throw new AppError(error.message);
|
2022-01-06 01:26:15 +00:00
|
|
|
}
|
2022-06-27 06:21:04 +00:00
|
|
|
|
2022-01-06 01:26:15 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
export default SendWhatsAppMessage;
|
2023-02-07 15:47:40 +00:00
|
|
|
|
|
|
|
|