diff --git a/backend/src/controllers/TicketController.ts b/backend/src/controllers/TicketController.ts index 38b4218..bf63ec2 100644 --- a/backend/src/controllers/TicketController.ts +++ b/backend/src/controllers/TicketController.ts @@ -120,12 +120,21 @@ export const remoteTicketCreation = async ( const { contact_from, contact_to, msg, contact_name }: any = req.body; const validate = ["contact_from", "contact_to", "msg"]; + const validateOnlyNumber = ["contact_from", "contact_to"]; for (let prop of validate) { if (!req.body[prop]) return res .status(400) .json({ error: `Property '${prop}' is undefined.` }); + + if(validateOnlyNumber.includes(prop)){ + if(!(/^\d+$/.test(req.body[prop]))){ + return res + .status(400) + .json({ error: `The property '${prop}' must be a number` }); + } + } } const whatsapp = await Whatsapp.findOne({ diff --git a/backend/src/services/WbotServices/wbotMessageListener.ts b/backend/src/services/WbotServices/wbotMessageListener.ts index d0b1a8f..55f0552 100644 --- a/backend/src/services/WbotServices/wbotMessageListener.ts +++ b/backend/src/services/WbotServices/wbotMessageListener.ts @@ -497,7 +497,12 @@ const queuesOutBot = async (wbot: Session, botId: string | number) => { return { queues, greetingMessage }; }; -const transferTicket = async (queueName: any, wbot: any, ticket: Ticket) => { +const transferTicket = async ( + queueName: any, + wbot: any, + ticket: Ticket, + sendGreetingMessage?: boolean +) => { const botInfo = await BotIsOnQueue("botqueue"); console.log("kkkkkkkkkkkkkkkkkkkkk queueName: ", queueName); @@ -519,16 +524,24 @@ const transferTicket = async (queueName: any, wbot: any, ticket: Ticket) => { queue = queues[queueName]; } - if (queue) await botTransferTicket(queue, ticket); + if (queue) await botTransferTicket(queue, ticket, sendGreetingMessage); }; -const botTransferTicket = async (queues: Queue, ticket: Ticket) => { +const botTransferTicket = async ( + queues: Queue, + ticket: Ticket, + sendGreetingMessage?: boolean +) => { await ticket.update({ userId: null }); await UpdateTicketService({ ticketData: { status: "pending", queueId: queues.id }, ticketId: ticket.id }); + + if (sendGreetingMessage && queues?.greetingMessage?.length > 0) { + botSendMessage(ticket, queues.greetingMessage); + } }; const botTransferTicketToUser = async ( @@ -759,12 +772,28 @@ const handleMessage = async ( await verifyQueue(wbot, msg, ticket, contact); } + const botInfo = await BotIsOnQueue("botqueue"); + // Transfer to agent - if (!msg.fromMe) { - const filteredUsers = await findByContain("user:*", "name", msg?.body); - + // O bot interage com o cliente e encaminha o atendimento para fila de atendende quando o usuário escolhe a opção falar com atendente + if ( + !msg.fromMe && + ((ticket.status == "open" && + botInfo && + ticket.userId == +botInfo.userIdBot) || + ticket.status == "pending" || + ticket.status == "queueChoice") + ) { + const filteredUsers = await findByContain("user:*", "name", msg?.body); + + console.log("######## filteredUsers: ", filteredUsers); if (filteredUsers && filteredUsers.length > 0) { + if (botInfo.isOnQueue) { + transferTicket(filteredUsers[0].name, wbot, ticket, true); + return; + } + const whatsappQueues = await ListWhatsappQueuesByUserQueue( +filteredUsers[0].id ); @@ -791,12 +820,6 @@ const handleMessage = async ( } // - // O bot interage com o cliente e encaminha o atendimento para fila de atendende quando o usuário escolhe a opção falar com atendente - - //Habilitar esse caso queira usar o bot - const botInfo = await BotIsOnQueue("botqueue"); - // const botInfo = { isOnQueue: false, botQueueId: 0, userIdBot: 0 }; - if ( botInfo.isOnQueue && !msg.fromMe && @@ -844,11 +867,6 @@ const handleMessage = async ( menuMsg?.transferToQueue && menuMsg.transferToQueue.trim().length > 0 ) { - console.log( - "YYYYYYYYYYYYYYYYYYYY menuMsg.transferToQueue: ", - menuMsg.transferToQueue - ); - transferTicket(menuMsg.transferToQueue.trim(), wbot, ticket); } }