diff --git a/backend/src/controllers/TicketController.ts b/backend/src/controllers/TicketController.ts index fe2c47f..a6af5ef 100644 --- a/backend/src/controllers/TicketController.ts +++ b/backend/src/controllers/TicketController.ts @@ -6,6 +6,8 @@ import DeleteTicketService from "../services/TicketServices/DeleteTicketService" import ListTicketsService from "../services/TicketServices/ListTicketsService"; import ShowTicketService from "../services/TicketServices/ShowTicketService"; import UpdateTicketService from "../services/TicketServices/UpdateTicketService"; +import SendWhatsAppMessage from "../services/WbotServices/SendWhatsAppMessage"; +import ShowWhatsAppService from "../services/WhatsappService/ShowWhatsAppService"; type IndexQuery = { searchParam: string; @@ -91,6 +93,20 @@ export const update = async ( ticketId }); + if (ticket.status === "closed") { + const whatsapp = await ShowWhatsAppService(ticket.whatsappId); + + const { farewellMessage } = whatsapp; + + if (farewellMessage) { + await SendWhatsAppMessage({ + body: farewellMessage, + ticket + }); + } + } + + return res.status(200).json(ticket); }; diff --git a/backend/src/database/migrations/20211016014719-add-farewellMessage-to-whatsapp.ts b/backend/src/database/migrations/20211016014719-add-farewellMessage-to-whatsapp.ts new file mode 100644 index 0000000..40120bf --- /dev/null +++ b/backend/src/database/migrations/20211016014719-add-farewellMessage-to-whatsapp.ts @@ -0,0 +1,13 @@ +import { QueryInterface, DataTypes } from "sequelize"; + +module.exports = { + up: (queryInterface: QueryInterface) => { + return queryInterface.addColumn("Whatsapps", "farewellMessage", { + type: DataTypes.TEXT + }); + }, + + down: (queryInterface: QueryInterface) => { + return queryInterface.removeColumn("Whatsapps", "farewellMessage"); + } +}; diff --git a/backend/src/models/Whatsapp.ts b/backend/src/models/Whatsapp.ts index 3c76a0c..8442faa 100644 --- a/backend/src/models/Whatsapp.ts +++ b/backend/src/models/Whatsapp.ts @@ -50,6 +50,9 @@ class Whatsapp extends Model { @Column(DataType.TEXT) greetingMessage: string; + @Column(DataType.TEXT) + farewellMessage: string; + @Default(false) @AllowNull @Column diff --git a/backend/src/services/TicketServices/UpdateTicketService.ts b/backend/src/services/TicketServices/UpdateTicketService.ts index 4c36fe9..3efc5db 100644 --- a/backend/src/services/TicketServices/UpdateTicketService.ts +++ b/backend/src/services/TicketServices/UpdateTicketService.ts @@ -2,6 +2,8 @@ import CheckContactOpenTickets from "../../helpers/CheckContactOpenTickets"; import SetTicketMessagesAsRead from "../../helpers/SetTicketMessagesAsRead"; import { getIO } from "../../libs/socket"; import Ticket from "../../models/Ticket"; +import SendWhatsAppMessage from "../WbotServices/SendWhatsAppMessage"; +import ShowWhatsAppService from "../WhatsappService/ShowWhatsAppService"; import ShowTicketService from "./ShowTicketService"; interface TicketData { @@ -28,7 +30,6 @@ const UpdateTicketService = async ({ const { status, userId, queueId } = ticketData; const ticket = await ShowTicketService(ticketId); - await SetTicketMessagesAsRead(ticket); const oldStatus = ticket.status; @@ -44,6 +45,8 @@ const UpdateTicketService = async ({ userId }); + + await ticket.reload(); const io = getIO(); @@ -55,6 +58,8 @@ const UpdateTicketService = async ({ }); } + + io.to(ticket.status) .to("notification") .to(ticketId.toString()) diff --git a/backend/src/services/WbotServices/wbotMessageListener.ts b/backend/src/services/WbotServices/wbotMessageListener.ts index 1cff4c6..cb73d52 100644 --- a/backend/src/services/WbotServices/wbotMessageListener.ts +++ b/backend/src/services/WbotServices/wbotMessageListener.ts @@ -113,7 +113,6 @@ const verifyMessage = async ( contact: Contact ) => { const quotedMsg = await verifyQuotedMessage(msg); - const messageData = { id: msg.id.id, ticketId: ticket.id, @@ -126,6 +125,7 @@ const verifyMessage = async ( }; await ticket.update({ lastMessage: msg.body }); + await CreateMessageService({ messageData }); }; @@ -231,6 +231,7 @@ const handleMessage = async ( const chat = await msg.getChat(); + if (chat.isGroup) { let msgGroupContact; @@ -242,34 +243,39 @@ const handleMessage = async ( groupContact = await verifyContact(msgGroupContact); } + const whatsapp = await ShowWhatsAppService(wbot.id!); const unreadMessages = msg.fromMe ? 0 : chat.unreadCount; const contact = await verifyContact(msgContact); - const ticket = await FindOrCreateTicketService( - contact, - wbot.id!, - unreadMessages, - groupContact - ); - if (msg.hasMedia) { - await verifyMediaMessage(msg, ticket, contact); - } else { - await verifyMessage(msg, ticket, contact); - } + if(unreadMessages === 0 && whatsapp.farewellMessage === msg.body) return; + + const ticket = await FindOrCreateTicketService( + contact, + wbot.id!, + unreadMessages, + groupContact + ); + + if (msg.hasMedia) { + await verifyMediaMessage(msg, ticket, contact); + } else { + await verifyMessage(msg, ticket, contact); + } + + if ( + !ticket.queue && + !chat.isGroup && + !msg.fromMe && + !ticket.userId && + whatsapp.queues.length >= 1 + ) { + await verifyQueue(wbot, msg, ticket, contact); + } + - const whatsapp = await ShowWhatsAppService(wbot.id!); - if ( - !ticket.queue && - !chat.isGroup && - !msg.fromMe && - !ticket.userId && - whatsapp.queues.length >= 1 - ) { - await verifyQueue(wbot, msg, ticket, contact); - } } catch (err) { Sentry.captureException(err); logger.error(`Error handling whatsapp message: Err: ${err}`); diff --git a/backend/src/services/WhatsappService/CreateWhatsAppService.ts b/backend/src/services/WhatsappService/CreateWhatsAppService.ts index ce033f3..b9f8d37 100644 --- a/backend/src/services/WhatsappService/CreateWhatsAppService.ts +++ b/backend/src/services/WhatsappService/CreateWhatsAppService.ts @@ -8,6 +8,7 @@ interface Request { name: string; queueIds?: number[]; greetingMessage?: string; + farewellMessage?: string; status?: string; isDefault?: boolean; } @@ -22,6 +23,7 @@ const CreateWhatsAppService = async ({ status = "OPENING", queueIds = [], greetingMessage, + farewellMessage, isDefault = false }: Request): Promise => { const schema = Yup.object().shape({ @@ -72,6 +74,7 @@ const CreateWhatsAppService = async ({ name, status, greetingMessage, + farewellMessage, isDefault }, { include: ["queues"] } diff --git a/backend/src/services/WhatsappService/UpdateWhatsAppService.ts b/backend/src/services/WhatsappService/UpdateWhatsAppService.ts index 03cc5eb..d56247d 100644 --- a/backend/src/services/WhatsappService/UpdateWhatsAppService.ts +++ b/backend/src/services/WhatsappService/UpdateWhatsAppService.ts @@ -12,6 +12,7 @@ interface WhatsappData { session?: string; isDefault?: boolean; greetingMessage?: string; + farewellMessage?: string; queueIds?: number[]; }