mirror of
https://github.com/cheveguerra/whaticket-community.git
synced 2026-04-17 19:37:02 +00:00
Merge pull request #282 from w3nder/FarewellMessage
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 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);
|
||||
};
|
||||
|
||||
|
||||
@@ -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)
|
||||
greetingMessage: string;
|
||||
|
||||
@Column(DataType.TEXT)
|
||||
farewellMessage: string;
|
||||
|
||||
@Default(false)
|
||||
@AllowNull
|
||||
@Column
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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}`);
|
||||
|
||||
@@ -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<Response> => {
|
||||
const schema = Yup.object().shape({
|
||||
@@ -72,6 +74,7 @@ const CreateWhatsAppService = async ({
|
||||
name,
|
||||
status,
|
||||
greetingMessage,
|
||||
farewellMessage,
|
||||
isDefault
|
||||
},
|
||||
{ include: ["queues"] }
|
||||
|
||||
@@ -12,6 +12,7 @@ interface WhatsappData {
|
||||
session?: string;
|
||||
isDefault?: boolean;
|
||||
greetingMessage?: string;
|
||||
farewellMessage?: string;
|
||||
queueIds?: number[];
|
||||
}
|
||||
|
||||
@@ -41,6 +42,7 @@ const UpdateWhatsAppService = async ({
|
||||
isDefault,
|
||||
session,
|
||||
greetingMessage,
|
||||
farewellMessage,
|
||||
queueIds = []
|
||||
} = whatsappData;
|
||||
|
||||
@@ -72,6 +74,7 @@ const UpdateWhatsAppService = async ({
|
||||
status,
|
||||
session,
|
||||
greetingMessage,
|
||||
farewellMessage,
|
||||
isDefault
|
||||
});
|
||||
|
||||
|
||||
@@ -62,6 +62,7 @@ const WhatsAppModal = ({ open, onClose, whatsAppId }) => {
|
||||
const initialState = {
|
||||
name: "",
|
||||
greetingMessage: "",
|
||||
farewellMessage: "",
|
||||
isDefault: false,
|
||||
};
|
||||
const [whatsApp, setWhatsApp] = useState(initialState);
|
||||
@@ -176,6 +177,25 @@ const WhatsAppModal = ({ open, onClose, whatsAppId }) => {
|
||||
margin="dense"
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<Field
|
||||
as={TextField}
|
||||
label={i18n.t("whatsappModal.form.farewellMessage")}
|
||||
type="farewellMessage"
|
||||
multiline
|
||||
rows={5}
|
||||
fullWidth
|
||||
name="farewellMessage"
|
||||
error={
|
||||
touched.farewellMessage && Boolean(errors.farewellMessage)
|
||||
}
|
||||
helperText={
|
||||
touched.farewellMessage && errors.farewellMessage
|
||||
}
|
||||
variant="outlined"
|
||||
margin="dense"
|
||||
/>
|
||||
</div>
|
||||
<QueueSelect
|
||||
selectedQueueIds={selectedQueueIds}
|
||||
onChange={selectedIds => setSelectedQueueIds(selectedIds)}
|
||||
|
||||
@@ -97,6 +97,7 @@ const messages = {
|
||||
form: {
|
||||
name: "Nome",
|
||||
default: "Padrão",
|
||||
farewellMessage: "Mensagem de despedida"
|
||||
},
|
||||
buttons: {
|
||||
okAdd: "Adicionar",
|
||||
|
||||
Reference in New Issue
Block a user