Compare commits
No commits in common. "6450fb6ea74ff2a591367586f7561e46331194d6" and "6762c8041d662d32eaf2889ede9054b6adbf0dad" have entirely different histories.
6450fb6ea7
...
6762c8041d
|
@ -257,10 +257,10 @@ export const contacsBulkInsertOnQueue = async (
|
||||||
};
|
};
|
||||||
|
|
||||||
function addStartPhoneNumber(phoneNumber: string) {
|
function addStartPhoneNumber(phoneNumber: string) {
|
||||||
const regex = /^57/;
|
const regex = /^55/;
|
||||||
|
|
||||||
if (!regex.test(phoneNumber)) {
|
if (!regex.test(phoneNumber)) {
|
||||||
phoneNumber = "57" + phoneNumber;
|
phoneNumber = "55" + phoneNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
return phoneNumber;
|
return phoneNumber;
|
||||||
|
|
|
@ -51,10 +51,10 @@ const schedule = async () => {
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log("error on schedule: ", error);
|
console.log("error on schedule: ", error);
|
||||||
} finally {
|
} finally {
|
||||||
timer = setInterval(schedule, 299999);
|
timer = setInterval(schedule, 180000);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
timer = setInterval(schedule, 299999);
|
timer = setInterval(schedule, 180000);
|
||||||
|
|
||||||
export default schedule;
|
export default schedule;
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
import fs from "fs";
|
import fs from "fs";
|
||||||
import path from "path";
|
|
||||||
import { MessageMedia, Message as WbotMessage } from "whatsapp-web.js";
|
import { MessageMedia, Message as WbotMessage } from "whatsapp-web.js";
|
||||||
import AppError from "../../errors/AppError";
|
import AppError from "../../errors/AppError";
|
||||||
import GetTicketWbot from "../../helpers/GetTicketWbot";
|
import GetTicketWbot from "../../helpers/GetTicketWbot";
|
||||||
|
@ -15,108 +14,51 @@ import { mediaTypeWhatsappOfficial } from "./wbotMessageListener";
|
||||||
import { bytesToMB } from "../../helpers/BytesToMB";
|
import { bytesToMB } from "../../helpers/BytesToMB";
|
||||||
|
|
||||||
interface Request {
|
interface Request {
|
||||||
media?: Express.Multer.File;
|
media: Express.Multer.File;
|
||||||
ticket: Ticket;
|
ticket: Ticket;
|
||||||
mic_audio?: any;
|
mic_audio?: any
|
||||||
filePath?: string;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const SendWhatsAppMedia = async ({
|
const SendWhatsAppMedia = async ({
|
||||||
media,
|
media,
|
||||||
ticket,
|
ticket,
|
||||||
mic_audio,
|
mic_audio
|
||||||
filePath
|
|
||||||
}: Request): Promise<WbotMessage | any> => {
|
}: Request): Promise<WbotMessage | any> => {
|
||||||
const { phoneNumberId } = ticket;
|
const { phoneNumberId } = ticket;
|
||||||
|
|
||||||
if (phoneNumberId) {
|
if (phoneNumberId) {
|
||||||
if (media) {
|
const { type, mbMaxSize }: any = mediaTypeWhatsappOfficial(media.mimetype);
|
||||||
const { type, mbMaxSize }: any = mediaTypeWhatsappOfficial(media.mimetype);
|
|
||||||
|
|
||||||
const filesize: any = bytesToMB(media.size);
|
const filesize: any = bytesToMB(media.size);
|
||||||
|
|
||||||
if (filesize > mbMaxSize) {
|
if (filesize > mbMaxSize) {
|
||||||
throw new AppError("FILE TOO LARGE!");
|
throw new AppError("FILE TOO LARGE!");
|
||||||
}
|
|
||||||
if (!type) {
|
|
||||||
throw new AppError("FILE TYPE NOT SUPPORTED!");
|
|
||||||
}
|
|
||||||
|
|
||||||
sendWhatsMediaOfficialAPI(ticket, media, type, mic_audio);
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
if (!type) {
|
||||||
|
throw new AppError("FILE TYPE NOT SUPPORTED!");
|
||||||
|
}
|
||||||
|
|
||||||
|
sendWhatsMediaOfficialAPI(ticket, media, type, mic_audio);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
let newMedia: MessageMedia;
|
const newMedia = MessageMedia.fromFilePath(media.path);
|
||||||
if (filePath) {
|
|
||||||
newMedia = MessageMedia.fromFilePath(filePath);
|
|
||||||
} else if (media) {
|
|
||||||
newMedia = MessageMedia.fromFilePath(media.path);
|
|
||||||
} else {
|
|
||||||
throw new AppError("No media provided!");
|
|
||||||
}
|
|
||||||
|
|
||||||
sendWhatsAppMediaSocket(ticket, newMedia);
|
sendWhatsAppMediaSocket(ticket, newMedia);
|
||||||
|
|
||||||
const lastMessage = filePath ? path.basename(filePath) : media?.filename;
|
await ticket.update({ lastMessage: media.filename });
|
||||||
|
|
||||||
await ticket.update({ lastMessage });
|
|
||||||
|
|
||||||
await updateTicketCacheByTicketId(ticket.id, {
|
await updateTicketCacheByTicketId(ticket.id, {
|
||||||
lastMessage,
|
lastMessage: media.filename,
|
||||||
updatedAt: new Date(ticket.updatedAt).toISOString()
|
updatedAt: new Date(ticket.updatedAt).toISOString()
|
||||||
});
|
});
|
||||||
|
|
||||||
if (media) {
|
console.log("media.path: ", media.path);
|
||||||
fs.unlinkSync(media.path);
|
fs.unlinkSync(media.path);
|
||||||
}
|
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
throw new AppError("ERR_SENDING_WAPP_MSG");
|
throw new AppError("ERR_SENDING_WAPP_MSG");
|
||||||
}
|
}
|
||||||
// const { phoneNumberId } = ticket;
|
|
||||||
|
|
||||||
// if (phoneNumberId) {
|
|
||||||
// const { type, mbMaxSize }: any = mediaTypeWhatsappOfficial(media.mimetype);
|
|
||||||
|
|
||||||
// const filesize: any = bytesToMB(media.size);
|
|
||||||
|
|
||||||
// if (filesize > mbMaxSize) {
|
|
||||||
// throw new AppError("FILE TOO LARGE!");
|
|
||||||
// }
|
|
||||||
// if (!type) {
|
|
||||||
// throw new AppError("FILE TYPE NOT SUPPORTED!");
|
|
||||||
// }
|
|
||||||
|
|
||||||
// sendWhatsMediaOfficialAPI(ticket, media, type, mic_audio);
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// try {
|
|
||||||
// //const newMedia = MessageMedia.fromFilePath(media.path);
|
|
||||||
// let newMedia: MessageMedia;
|
|
||||||
// if (filePath) {
|
|
||||||
// newMedia = MessageMedia.fromFilePath(filePath);
|
|
||||||
// } else if (media) {
|
|
||||||
// newMedia = MessageMedia.fromFilePath(media.path);
|
|
||||||
// } else {
|
|
||||||
// throw new AppError("No media provided!");
|
|
||||||
// }
|
|
||||||
|
|
||||||
// sendWhatsAppMediaSocket(ticket, newMedia);
|
|
||||||
|
|
||||||
// await ticket.update({ lastMessage: media.filename });
|
|
||||||
|
|
||||||
// await updateTicketCacheByTicketId(ticket.id, {
|
|
||||||
// lastMessage: media.filename,
|
|
||||||
// updatedAt: new Date(ticket.updatedAt).toISOString()
|
|
||||||
// });
|
|
||||||
|
|
||||||
// console.log("media.path: ", media.path);
|
|
||||||
// fs.unlinkSync(media.path);
|
|
||||||
// } catch (err) {
|
|
||||||
// throw new AppError("ERR_SENDING_WAPP_MSG");
|
|
||||||
// }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export default SendWhatsAppMedia;
|
export default SendWhatsAppMedia;
|
||||||
|
|
|
@ -110,7 +110,7 @@ import AssociateContatctQueue from "../ContactServices/AssociateContatctQueue";
|
||||||
import ContactQueue from "../../models/ContactQueues";
|
import ContactQueue from "../../models/ContactQueues";
|
||||||
import { encodeFileToBase64 } from "../../helpers/EncodeFileToBase64";
|
import { encodeFileToBase64 } from "../../helpers/EncodeFileToBase64";
|
||||||
import { Json } from "sequelize/types/lib/utils";
|
import { Json } from "sequelize/types/lib/utils";
|
||||||
import SendWhatsAppMedia from "./SendWhatsAppMedia";
|
|
||||||
var lst: any[] = getWhatsappIds();
|
var lst: any[] = getWhatsappIds();
|
||||||
|
|
||||||
interface Session extends Client {
|
interface Session extends Client {
|
||||||
|
@ -278,7 +278,7 @@ const question = async (
|
||||||
) {
|
) {
|
||||||
await botSendMessage(
|
await botSendMessage(
|
||||||
ticket,
|
ticket,
|
||||||
"Por favor adjuntar evidencias.\n¡Envía uno o más archivos simultáneamente!"
|
"¡Envía uno o más archivos simultáneamente!"
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -327,9 +327,22 @@ const question = async (
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// currentId = await get({ key: `form:${ticket.id}:current` });
|
||||||
|
|
||||||
let index = ask.findIndex((obj: any) => obj.id == currentId);
|
let index = ask.findIndex((obj: any) => obj.id == currentId);
|
||||||
|
|
||||||
if (index != -1) {
|
if (index != -1) {
|
||||||
|
console.log(
|
||||||
|
"msg?.body: ",
|
||||||
|
msg?.body,
|
||||||
|
" | sendFile?.filePath: ",
|
||||||
|
sendFile?.filePath,
|
||||||
|
" | index: ",
|
||||||
|
index,
|
||||||
|
" | ask[index]?.item?.file: ",
|
||||||
|
ask[index]?.item?.file
|
||||||
|
);
|
||||||
|
|
||||||
if (!ask[index]?.item?.file && !sendFile) {
|
if (!ask[index]?.item?.file && !sendFile) {
|
||||||
ask[index].value = msg?.body;
|
ask[index].value = msg?.body;
|
||||||
}
|
}
|
||||||
|
@ -339,22 +352,18 @@ const question = async (
|
||||||
|
|
||||||
if (index + 1 <= ask.length - 1) {
|
if (index + 1 <= ask.length - 1) {
|
||||||
if (ask[index + 1]?.item?.file && !sendFile) {
|
if (ask[index + 1]?.item?.file && !sendFile) {
|
||||||
// await botSendMessage(
|
await botSendMessage(
|
||||||
// ticket,
|
ticket,
|
||||||
// "¿Quieres enviar archivo? Ingrese *Sí* o *No*"
|
"¿Quieres enviar archivo? Ingrese *Sí* o *No*"
|
||||||
// );
|
);
|
||||||
await set(
|
await set(
|
||||||
`form:${ticket.id}:file`,
|
`form:${ticket.id}:file`,
|
||||||
JSON.stringify({ status: "waiting" })
|
JSON.stringify({ status: "waiting" })
|
||||||
);
|
);
|
||||||
set(
|
return;
|
||||||
`form:${ticket.id}:file`,
|
|
||||||
JSON.stringify({ ...sendFile, status: "yes" })
|
|
||||||
);
|
|
||||||
// return;
|
|
||||||
}
|
}
|
||||||
// Next question
|
|
||||||
|
|
||||||
|
// Next question
|
||||||
await botSendMessage(ticket, ask[index + 1].question);
|
await botSendMessage(ticket, ask[index + 1].question);
|
||||||
await set(`form:${ticket.id}:current`, `${ask[index + 1].id}`);
|
await set(`form:${ticket.id}:current`, `${ask[index + 1].id}`);
|
||||||
} else {
|
} else {
|
||||||
|
@ -469,13 +478,13 @@ const verifyMediaMessage = async (
|
||||||
phoneNumberId: msg?.phoneNumberId,
|
phoneNumberId: msg?.phoneNumberId,
|
||||||
fromAgent: false
|
fromAgent: false
|
||||||
};
|
};
|
||||||
// if (
|
if (
|
||||||
// messageData.mediaType === "video" ||
|
messageData.mediaType === "video" ||
|
||||||
// (messageData.mediaType === "audio" &&
|
(messageData.mediaType === "audio" &&
|
||||||
// getSettingValue("blockAudioVideoMedia")?.value === "enabled")
|
getSettingValue("blockAudioVideoMedia")?.value === "enabled")
|
||||||
// ) {
|
) {
|
||||||
// mediaAuthorized = false;
|
mediaAuthorized = false;
|
||||||
// }
|
}
|
||||||
if (msg?.fromMe) {
|
if (msg?.fromMe) {
|
||||||
messageData = { ...messageData, fromAgent: true };
|
messageData = { ...messageData, fromAgent: true };
|
||||||
}
|
}
|
||||||
|
@ -1213,7 +1222,7 @@ const handleMessage = async (
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
||||||
if (
|
if (
|
||||||
|
@ -1248,7 +1257,7 @@ const handleMessage = async (
|
||||||
if (msg.type == "chat" && String(msg.body).length > 120) {
|
if (msg.type == "chat" && String(msg.body).length > 120) {
|
||||||
botSendMessage(
|
botSendMessage(
|
||||||
ticket,
|
ticket,
|
||||||
`¡Disculpa, no comprendí!\n\n¡El mensaje tiene más de 120 caracteres!\n\n_Digite 0 para volver al menú principal._`
|
`Desculpe, nao compreendi!\nTexto acima de 120 caracteres!\n _Digite *0* para voltar ao menu principal._`
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1381,18 +1390,18 @@ const handleMessage = async (
|
||||||
msg?.body?.trim() != "0" &&
|
msg?.body?.trim() != "0" &&
|
||||||
msg?.body?.trim() != "#"
|
msg?.body?.trim() != "#"
|
||||||
) {
|
) {
|
||||||
await question(fillingOutForm, msg, ticket, contact, wbot);
|
await question(fillingOutForm, msg, ticket, contact, wbot);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const menuMsg: any = await menu(msg.body, wbot.id, contact.id, ticket);
|
const menuMsg: any = await menu(msg.body, wbot.id, contact.id);
|
||||||
|
|
||||||
console.log("menuMsg: ", menuMsg);
|
console.log("menuMsg: ", menuMsg);
|
||||||
|
|
||||||
await botSendMessage(
|
await botSendMessage(
|
||||||
ticket,
|
ticket,
|
||||||
menuMsg.value +
|
menuMsg.value +
|
||||||
"\n\nSi deseas volver al menú principal, escriba *0* o *#* para volver al menú anterior"
|
"\n\nSi desea volver al menú principal, escriba *0* o *#* para volver al menú anterior"
|
||||||
);
|
);
|
||||||
|
|
||||||
if (
|
if (
|
||||||
|
@ -1475,7 +1484,7 @@ const handleMessage = async (
|
||||||
},
|
},
|
||||||
ticketId: ticket.id
|
ticketId: ticket.id
|
||||||
});
|
});
|
||||||
const menuMsg: any = await menu(msg.body, wbot.id, contact.id, ticket);
|
const menuMsg: any = await menu(msg.body, wbot.id, contact.id);
|
||||||
await botSendMessage(ticket, menuMsg.value);
|
await botSendMessage(ticket, menuMsg.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1498,7 +1507,7 @@ const handleMessage = async (
|
||||||
ticketId: ticket.id
|
ticketId: ticket.id
|
||||||
});
|
});
|
||||||
|
|
||||||
const menuMsg: any = await menu(msg.body, wbot.id, contact.id, ticket);
|
const menuMsg: any = await menu(msg.body, wbot.id, contact.id);
|
||||||
|
|
||||||
await botSendMessage(ticket, menuMsg.value);
|
await botSendMessage(ticket, menuMsg.value);
|
||||||
|
|
||||||
|
@ -1540,7 +1549,7 @@ const handleMessage = async (
|
||||||
};
|
};
|
||||||
|
|
||||||
async function previousUra(wbot: any, contact: Contact, ticket: any) {
|
async function previousUra(wbot: any, contact: Contact, ticket: any) {
|
||||||
const menuMsg: any = await menu("#", wbot.id, contact.id, ticket);
|
const menuMsg: any = await menu("#", wbot.id, contact.id);
|
||||||
botSendMessage(ticket, menuMsg.value);
|
botSendMessage(ticket, menuMsg.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1593,7 +1602,7 @@ function delForm(ticket: any) {
|
||||||
del(`form:${ticket.id}:confirmation`);
|
del(`form:${ticket.id}:confirmation`);
|
||||||
}
|
}
|
||||||
|
|
||||||
const menu = async (userTyped: string, whatsappId: any, contactId: any, ticket: any) => {
|
const menu = async (userTyped: string, whatsappId: any, contactId: any) => {
|
||||||
let whatsapp = await whatsappCache(whatsappId);
|
let whatsapp = await whatsappCache(whatsappId);
|
||||||
|
|
||||||
let lastId = await findObject(
|
let lastId = await findObject(
|
||||||
|
@ -1605,7 +1614,7 @@ const menu = async (userTyped: string, whatsappId: any, contactId: any, ticket:
|
||||||
const data: any = await get({
|
const data: any = await get({
|
||||||
key: whatsapp?.number ? `ura_${whatsapp?.number}` : "ura",
|
key: whatsapp?.number ? `ura_${whatsapp?.number}` : "ura",
|
||||||
parse: true
|
parse: true
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!lastId[0]) {
|
if (!lastId[0]) {
|
||||||
await createObject({
|
await createObject({
|
||||||
|
@ -1615,21 +1624,6 @@ const menu = async (userTyped: string, whatsappId: any, contactId: any, ticket:
|
||||||
value: data[1].id,
|
value: data[1].id,
|
||||||
history: `|${data[1].id}`
|
history: `|${data[1].id}`
|
||||||
});
|
});
|
||||||
if(whatsapp && whatsapp.number === '573168762241'){
|
|
||||||
const imagePath = path.join(__dirname, '..','..','utils','OET_inicio.jpg');
|
|
||||||
await SendWhatsAppMedia({
|
|
||||||
ticket,
|
|
||||||
filePath: imagePath
|
|
||||||
});
|
|
||||||
console.log('>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Send image init')
|
|
||||||
}else if(whatsapp && whatsapp.number === '573159260397'){
|
|
||||||
const imagePath = path.join(__dirname, '..','..','utils','Faro_inicio.jpeg');
|
|
||||||
await SendWhatsAppMedia({
|
|
||||||
ticket,
|
|
||||||
filePath: imagePath
|
|
||||||
});
|
|
||||||
console.log('>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Send image init')
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
lastId = await findObject(
|
lastId = await findObject(
|
||||||
|
@ -1890,13 +1884,10 @@ async function whatsappCache(whatsappId: any) {
|
||||||
let whatsapp = await get({ key: "whatsapp:*", parse: true });
|
let whatsapp = await get({ key: "whatsapp:*", parse: true });
|
||||||
|
|
||||||
let uraByNumber = await get({ key: "ura_*", parse: true });
|
let uraByNumber = await get({ key: "ura_*", parse: true });
|
||||||
|
// console.log("------------------------> uraByNumber: ", uraByNumber);
|
||||||
|
|
||||||
whatsapp = whatsapp.filter((w: any) => +w?.id == +whatsappId);
|
whatsapp = whatsapp.filter((w: any) => +w?.id == +whatsappId);
|
||||||
|
|
||||||
console.log("------------------------> whatsapp: ", whatsapp);
|
|
||||||
|
|
||||||
|
|
||||||
if (whatsapp && whatsapp.length > 0 && uraByNumber) return whatsapp[0];
|
if (whatsapp && whatsapp.length > 0 && uraByNumber) return whatsapp[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1973,7 +1964,7 @@ async function backUra(whatsappId: any, contactId: any, data: any) {
|
||||||
|
|
||||||
let uraOptionSelected = await findObject(
|
let uraOptionSelected = await findObject(
|
||||||
whatsappId,
|
whatsappId,
|
||||||
contactId,
|
contactId,
|
||||||
_whatsapp?.number ? `ura_${_whatsapp?.number}` : "ura"
|
_whatsapp?.number ? `ura_${_whatsapp?.number}` : "ura"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -2214,13 +2205,6 @@ async function setSoport(ticket: any, wbot: any, contact: any) {
|
||||||
})
|
})
|
||||||
.join("");
|
.join("");
|
||||||
|
|
||||||
let request = await get({
|
|
||||||
key: `form:${ticket.id}:request`,
|
|
||||||
parse: true
|
|
||||||
});
|
|
||||||
|
|
||||||
payload += `<nit_transp>${request.nit}</nit_transp>`;
|
|
||||||
|
|
||||||
let payloadFile = fillingOutForm.ask.find((a: any) => a?.item?.file);
|
let payloadFile = fillingOutForm.ask.find((a: any) => a?.item?.file);
|
||||||
|
|
||||||
let files = "";
|
let files = "";
|
||||||
|
@ -2267,7 +2251,7 @@ async function setSoport(ticket: any, wbot: any, contact: any) {
|
||||||
</soapenv:Body>
|
</soapenv:Body>
|
||||||
</soapenv:Envelope>`;
|
</soapenv:Envelope>`;
|
||||||
|
|
||||||
console.log("DATA REQUEST: ", data);
|
// console.log("DATA: ", data);
|
||||||
|
|
||||||
// return;
|
// return;
|
||||||
var config = {
|
var config = {
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 137 KiB |
Binary file not shown.
Before Width: | Height: | Size: 48 KiB |
|
@ -247,7 +247,7 @@ const MessageInput = ({ ticketStatus, ticketLastMessage, ticketIsRemote }) => {
|
||||||
setInputMessage(ticketLastMessage)
|
setInputMessage(ticketLastMessage)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
//setInputMessage("")
|
setInputMessage("")
|
||||||
}
|
}
|
||||||
}, [countTicketMsg, ticketIsRemote, ticketLastMessage])
|
}, [countTicketMsg, ticketIsRemote, ticketLastMessage])
|
||||||
|
|
||||||
|
|
|
@ -229,7 +229,7 @@ const TicketListItem = ({ ticket, remoteTicketsControll, settings }) => {
|
||||||
variant="body2"
|
variant="body2"
|
||||||
color="textPrimary"
|
color="textPrimary"
|
||||||
>
|
>
|
||||||
{ticket?.contact?.name}
|
{ticket.contact.name}
|
||||||
</Typography>
|
</Typography>
|
||||||
{ticket.status === "closed" && (
|
{ticket.status === "closed" && (
|
||||||
<Badge
|
<Badge
|
||||||
|
|
Loading…
Reference in New Issue