feat: enable image uploads in URA, auto-include country code, change language in components, fix message deletion bug
parent
6762c8041d
commit
d59d2bf395
|
@ -257,10 +257,10 @@ export const contacsBulkInsertOnQueue = async (
|
||||||
};
|
};
|
||||||
|
|
||||||
function addStartPhoneNumber(phoneNumber: string) {
|
function addStartPhoneNumber(phoneNumber: string) {
|
||||||
const regex = /^55/;
|
const regex = /^57/;
|
||||||
|
|
||||||
if (!regex.test(phoneNumber)) {
|
if (!regex.test(phoneNumber)) {
|
||||||
phoneNumber = "55" + phoneNumber;
|
phoneNumber = "57" + 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, 180000);
|
timer = setInterval(schedule, 299999);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
timer = setInterval(schedule, 180000);
|
timer = setInterval(schedule, 299999);
|
||||||
|
|
||||||
export default schedule;
|
export default schedule;
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
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";
|
||||||
|
@ -14,19 +15,22 @@ 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);
|
||||||
|
@ -41,24 +45,78 @@ const SendWhatsAppMedia = async ({
|
||||||
sendWhatsMediaOfficialAPI(ticket, media, type, mic_audio);
|
sendWhatsMediaOfficialAPI(ticket, media, type, mic_audio);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
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);
|
sendWhatsAppMediaSocket(ticket, newMedia);
|
||||||
|
|
||||||
await ticket.update({ lastMessage: media.filename });
|
const lastMessage = filePath ? path.basename(filePath) : media?.filename;
|
||||||
|
|
||||||
|
await ticket.update({ lastMessage });
|
||||||
|
|
||||||
await updateTicketCacheByTicketId(ticket.id, {
|
await updateTicketCacheByTicketId(ticket.id, {
|
||||||
lastMessage: media.filename,
|
lastMessage,
|
||||||
updatedAt: new Date(ticket.updatedAt).toISOString()
|
updatedAt: new Date(ticket.updatedAt).toISOString()
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log("media.path: ", media.path);
|
if (media) {
|
||||||
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 {
|
||||||
|
@ -478,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 };
|
||||||
}
|
}
|
||||||
|
@ -1257,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,
|
||||||
`Desculpe, nao compreendi!\nTexto acima de 120 caracteres!\n _Digite *0* para voltar ao menu principal._`
|
`¡Disculpa, no comprendí!\n\n¡El mensaje tiene más de 120 caracteres!\n\n_Digite 0 para volver al menú principal._`
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1394,14 +1394,14 @@ const handleMessage = async (
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const menuMsg: any = await menu(msg.body, wbot.id, contact.id);
|
const menuMsg: any = await menu(msg.body, wbot.id, contact.id, ticket);
|
||||||
|
|
||||||
console.log("menuMsg: ", menuMsg);
|
console.log("menuMsg: ", menuMsg);
|
||||||
|
|
||||||
await botSendMessage(
|
await botSendMessage(
|
||||||
ticket,
|
ticket,
|
||||||
menuMsg.value +
|
menuMsg.value +
|
||||||
"\n\nSi desea volver al menú principal, escriba *0* o *#* para volver al menú anterior"
|
"\n\nSi deseas volver al menú principal, escriba *0* o *#* para volver al menú anterior"
|
||||||
);
|
);
|
||||||
|
|
||||||
if (
|
if (
|
||||||
|
@ -1484,7 +1484,7 @@ const handleMessage = async (
|
||||||
},
|
},
|
||||||
ticketId: ticket.id
|
ticketId: ticket.id
|
||||||
});
|
});
|
||||||
const menuMsg: any = await menu(msg.body, wbot.id, contact.id);
|
const menuMsg: any = await menu(msg.body, wbot.id, contact.id, ticket);
|
||||||
await botSendMessage(ticket, menuMsg.value);
|
await botSendMessage(ticket, menuMsg.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1507,7 +1507,7 @@ const handleMessage = async (
|
||||||
ticketId: ticket.id
|
ticketId: ticket.id
|
||||||
});
|
});
|
||||||
|
|
||||||
const menuMsg: any = await menu(msg.body, wbot.id, contact.id);
|
const menuMsg: any = await menu(msg.body, wbot.id, contact.id, ticket);
|
||||||
|
|
||||||
await botSendMessage(ticket, menuMsg.value);
|
await botSendMessage(ticket, menuMsg.value);
|
||||||
|
|
||||||
|
@ -1549,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);
|
const menuMsg: any = await menu("#", wbot.id, contact.id, ticket);
|
||||||
botSendMessage(ticket, menuMsg.value);
|
botSendMessage(ticket, menuMsg.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1602,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) => {
|
const menu = async (userTyped: string, whatsappId: any, contactId: any, ticket: any) => {
|
||||||
let whatsapp = await whatsappCache(whatsappId);
|
let whatsapp = await whatsappCache(whatsappId);
|
||||||
|
|
||||||
let lastId = await findObject(
|
let lastId = await findObject(
|
||||||
|
@ -1624,6 +1624,21 @@ const menu = async (userTyped: string, whatsappId: any, contactId: any) => {
|
||||||
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(
|
||||||
|
@ -1884,10 +1899,13 @@ 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];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 137 KiB |
Binary file not shown.
After 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])
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue