mirror of
https://github.com/cheveguerra/whaticket-community.git
synced 2026-04-19 12:19:16 +00:00
Add Feat. Farewell Message
This commit is contained in:
@@ -6,6 +6,8 @@ import DeleteTicketService from "../services/TicketServices/DeleteTicketService"
|
|||||||
import ListTicketsService from "../services/TicketServices/ListTicketsService";
|
import ListTicketsService from "../services/TicketServices/ListTicketsService";
|
||||||
import ShowTicketService from "../services/TicketServices/ShowTicketService";
|
import ShowTicketService from "../services/TicketServices/ShowTicketService";
|
||||||
import UpdateTicketService from "../services/TicketServices/UpdateTicketService";
|
import UpdateTicketService from "../services/TicketServices/UpdateTicketService";
|
||||||
|
import SendWhatsAppMessage from "../services/WbotServices/SendWhatsAppMessage";
|
||||||
|
import ShowWhatsAppService from "../services/WhatsappService/ShowWhatsAppService";
|
||||||
|
|
||||||
type IndexQuery = {
|
type IndexQuery = {
|
||||||
searchParam: string;
|
searchParam: string;
|
||||||
@@ -91,6 +93,20 @@ export const update = async (
|
|||||||
ticketId
|
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);
|
return res.status(200).json(ticket);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -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");
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -50,6 +50,9 @@ class Whatsapp extends Model<Whatsapp> {
|
|||||||
@Column(DataType.TEXT)
|
@Column(DataType.TEXT)
|
||||||
greetingMessage: string;
|
greetingMessage: string;
|
||||||
|
|
||||||
|
@Column(DataType.TEXT)
|
||||||
|
farewellMessage: string;
|
||||||
|
|
||||||
@Default(false)
|
@Default(false)
|
||||||
@AllowNull
|
@AllowNull
|
||||||
@Column
|
@Column
|
||||||
|
|||||||
@@ -2,6 +2,8 @@ import CheckContactOpenTickets from "../../helpers/CheckContactOpenTickets";
|
|||||||
import SetTicketMessagesAsRead from "../../helpers/SetTicketMessagesAsRead";
|
import SetTicketMessagesAsRead from "../../helpers/SetTicketMessagesAsRead";
|
||||||
import { getIO } from "../../libs/socket";
|
import { getIO } from "../../libs/socket";
|
||||||
import Ticket from "../../models/Ticket";
|
import Ticket from "../../models/Ticket";
|
||||||
|
import SendWhatsAppMessage from "../WbotServices/SendWhatsAppMessage";
|
||||||
|
import ShowWhatsAppService from "../WhatsappService/ShowWhatsAppService";
|
||||||
import ShowTicketService from "./ShowTicketService";
|
import ShowTicketService from "./ShowTicketService";
|
||||||
|
|
||||||
interface TicketData {
|
interface TicketData {
|
||||||
@@ -28,7 +30,6 @@ const UpdateTicketService = async ({
|
|||||||
const { status, userId, queueId } = ticketData;
|
const { status, userId, queueId } = ticketData;
|
||||||
|
|
||||||
const ticket = await ShowTicketService(ticketId);
|
const ticket = await ShowTicketService(ticketId);
|
||||||
|
|
||||||
await SetTicketMessagesAsRead(ticket);
|
await SetTicketMessagesAsRead(ticket);
|
||||||
|
|
||||||
const oldStatus = ticket.status;
|
const oldStatus = ticket.status;
|
||||||
@@ -44,6 +45,8 @@ const UpdateTicketService = async ({
|
|||||||
userId
|
userId
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
await ticket.reload();
|
await ticket.reload();
|
||||||
|
|
||||||
const io = getIO();
|
const io = getIO();
|
||||||
@@ -55,6 +58,8 @@ const UpdateTicketService = async ({
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
io.to(ticket.status)
|
io.to(ticket.status)
|
||||||
.to("notification")
|
.to("notification")
|
||||||
.to(ticketId.toString())
|
.to(ticketId.toString())
|
||||||
|
|||||||
@@ -113,7 +113,6 @@ const verifyMessage = async (
|
|||||||
contact: Contact
|
contact: Contact
|
||||||
) => {
|
) => {
|
||||||
const quotedMsg = await verifyQuotedMessage(msg);
|
const quotedMsg = await verifyQuotedMessage(msg);
|
||||||
|
|
||||||
const messageData = {
|
const messageData = {
|
||||||
id: msg.id.id,
|
id: msg.id.id,
|
||||||
ticketId: ticket.id,
|
ticketId: ticket.id,
|
||||||
@@ -126,6 +125,7 @@ const verifyMessage = async (
|
|||||||
};
|
};
|
||||||
|
|
||||||
await ticket.update({ lastMessage: msg.body });
|
await ticket.update({ lastMessage: msg.body });
|
||||||
|
|
||||||
await CreateMessageService({ messageData });
|
await CreateMessageService({ messageData });
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -231,6 +231,7 @@ const handleMessage = async (
|
|||||||
|
|
||||||
const chat = await msg.getChat();
|
const chat = await msg.getChat();
|
||||||
|
|
||||||
|
|
||||||
if (chat.isGroup) {
|
if (chat.isGroup) {
|
||||||
let msgGroupContact;
|
let msgGroupContact;
|
||||||
|
|
||||||
@@ -242,34 +243,39 @@ const handleMessage = async (
|
|||||||
|
|
||||||
groupContact = await verifyContact(msgGroupContact);
|
groupContact = await verifyContact(msgGroupContact);
|
||||||
}
|
}
|
||||||
|
const whatsapp = await ShowWhatsAppService(wbot.id!);
|
||||||
|
|
||||||
const unreadMessages = msg.fromMe ? 0 : chat.unreadCount;
|
const unreadMessages = msg.fromMe ? 0 : chat.unreadCount;
|
||||||
|
|
||||||
const contact = await verifyContact(msgContact);
|
const contact = await verifyContact(msgContact);
|
||||||
const ticket = await FindOrCreateTicketService(
|
|
||||||
contact,
|
|
||||||
wbot.id!,
|
|
||||||
unreadMessages,
|
|
||||||
groupContact
|
|
||||||
);
|
|
||||||
|
|
||||||
if (msg.hasMedia) {
|
if(unreadMessages === 0 && whatsapp.farewellMessage === msg.body) return;
|
||||||
await verifyMediaMessage(msg, ticket, contact);
|
|
||||||
} else {
|
const ticket = await FindOrCreateTicketService(
|
||||||
await verifyMessage(msg, ticket, contact);
|
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) {
|
} catch (err) {
|
||||||
Sentry.captureException(err);
|
Sentry.captureException(err);
|
||||||
logger.error(`Error handling whatsapp message: Err: ${err}`);
|
logger.error(`Error handling whatsapp message: Err: ${err}`);
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ interface Request {
|
|||||||
name: string;
|
name: string;
|
||||||
queueIds?: number[];
|
queueIds?: number[];
|
||||||
greetingMessage?: string;
|
greetingMessage?: string;
|
||||||
|
farewellMessage?: string;
|
||||||
status?: string;
|
status?: string;
|
||||||
isDefault?: boolean;
|
isDefault?: boolean;
|
||||||
}
|
}
|
||||||
@@ -22,6 +23,7 @@ const CreateWhatsAppService = async ({
|
|||||||
status = "OPENING",
|
status = "OPENING",
|
||||||
queueIds = [],
|
queueIds = [],
|
||||||
greetingMessage,
|
greetingMessage,
|
||||||
|
farewellMessage,
|
||||||
isDefault = false
|
isDefault = false
|
||||||
}: Request): Promise<Response> => {
|
}: Request): Promise<Response> => {
|
||||||
const schema = Yup.object().shape({
|
const schema = Yup.object().shape({
|
||||||
@@ -72,6 +74,7 @@ const CreateWhatsAppService = async ({
|
|||||||
name,
|
name,
|
||||||
status,
|
status,
|
||||||
greetingMessage,
|
greetingMessage,
|
||||||
|
farewellMessage,
|
||||||
isDefault
|
isDefault
|
||||||
},
|
},
|
||||||
{ include: ["queues"] }
|
{ include: ["queues"] }
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ interface WhatsappData {
|
|||||||
session?: string;
|
session?: string;
|
||||||
isDefault?: boolean;
|
isDefault?: boolean;
|
||||||
greetingMessage?: string;
|
greetingMessage?: string;
|
||||||
|
farewellMessage?: string;
|
||||||
queueIds?: number[];
|
queueIds?: number[];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user