import { Request, Response } from "express"; import whatsappOfficialAPI from "../helpers/WhatsappOfficialAPI"; import SetTicketMessagesAsRead from "../helpers/SetTicketMessagesAsRead"; import { getIO } from "../libs/socket"; import Message from "../models/Message"; import ListMessagesService from "../services/MessageServices/ListMessagesService"; import ShowTicketService from "../services/TicketServices/ShowTicketService"; import DeleteWhatsAppMessage from "../services/WbotServices/DeleteWhatsAppMessage"; import SendWhatsAppMedia from "../services/WbotServices/SendWhatsAppMedia"; import SendWhatsAppMessage from "../services/WbotServices/SendWhatsAppMessage"; import axios from "axios"; import Contact from "../models/Contact"; import { isValidMsg, verifyMessage } from "../services/WbotServices/wbotMessageListener"; import CreateOrUpdateContactService from "../services/ContactServices/CreateOrUpdateContactService"; import sendWhatsAppMessageOfficialAPI from "../helpers/sendWhatsAppMessageOfficialAPI"; import Whatsapp from "../models/Whatsapp"; import checkLastClientMsg24hs from "../helpers/CheckLastClientMsg24hs"; import AppError from "../errors/AppError"; type IndexQuery = { pageNumber: string; }; type MessageData = { body: string; fromMe: boolean; read: boolean; quotedMsg?: Message; mic_audio?: boolean; params: any; }; export const index = async (req: Request, res: Response): Promise => { const { ticketId } = req.params; const { pageNumber } = req.query as IndexQuery; const { count, messages, ticket, hasMore } = await ListMessagesService({ pageNumber, ticketId }); return res.json({ count, messages, ticket, hasMore }); }; export const store = async (req: Request, res: Response): Promise => { const { ticketId } = req.params; const { body, quotedMsg, mic_audio, params }: MessageData = req.body; const medias = req.files as Express.Multer.File[]; const ticket = await ShowTicketService(ticketId); const { queueId } = ticket; console.log( "-----------> queueId: ", queueId, " | quotedMsg: ", quotedMsg, " | params: ", params ); const { phoneNumberId, whatsappId } = ticket; if (phoneNumberId) { const into24hs = await checkLastClientMsg24hs(ticket); if (into24hs && into24hs.length == 0) { if (params) { console.log("SEND TEMPLATE PARAMS: ", params); // return res.send() let payloadComponents = []; try { for (let i in params) { const { parameters, language, type } = params[i]; if (type == "BODY") { if (parameters && parameters.length > 0) { let components: any = [{ type: "body", parameters: [] }]; for (let x in parameters) { const { type, text, index } = parameters[x]; console.log(text); components[0].parameters.splice(index - 1, 0, { type, text }); } payloadComponents.push(components[0]); } } else if (type == "BUTTONS") { } } const name = params.find((p: any) => p?.template_name); const { language }: any = params?.find((p: any) => p?.language) || 'pt_BR' const { template_name } = name; if (template_name && language) { const template: any = { template: { name: template_name, language: { code: language }, components: payloadComponents } }; console.log("TEMPLATE: ", template); sendWhatsAppMessageOfficialAPI(ticket, body, null, template); return res.send(); } } catch (error: any) { throw new AppError(error.message); } } else { try { const { wabaId }: any = await Whatsapp.findByPk(whatsappId); const { data } = await whatsappOfficialAPI.get( `/${process.env.VERSION}/${wabaId}/message_templates?language=pt_BR` ); return res.status(200).json(data); } catch (error) { return res .status(500) .json({ message: "Não foi possível baixar os templates!" }); } } } } if (medias) { await Promise.all( medias.map(async (media: Express.Multer.File) => { console.log( `\n >>>>>>>>>> SENDING MESSAGE MEDIA Parcial ticket info and media: ticket.id: ${ticket.id} ticket.status: ${ticket.status} ticket.whatsapp.id: ${ticket.whatsappId} ticket.contact.number: ${ticket.contact.number} ticket.contact.name: ${ticket.contact.name} ticket.contact.profilePicUrl: ${ticket.contact.profilePicUrl} ticket.user.id: ${ticket.user.id} ticket.user.name: ${ticket.user.name} media:`, media, "\n" ); await SendWhatsAppMedia({ media, ticket, mic_audio }); }) ); } else { console.log(`\n >>>>>>>>>> SENDING MESSAGE Parcial ticket info: ticket.id: ${ticket.id} ticket.status: ${ticket.status} ticket.whatsapp.id: ${ticket.whatsappId} ticket.contact.number: ${ticket.contact.number} message: ${body} ticket.contact.name: ${ticket.contact.name} ticket.contact.profilePicUrl: ${ticket.contact.profilePicUrl} ticket.user.id: ${ticket.user.id} ticket.user.name: ${ticket.user.name}\n`); await SendWhatsAppMessage({ body, ticket, quotedMsg }); } return res.send(); }; export const remove = async ( req: Request, res: Response ): Promise => { const { messageId } = req.params; const message = await DeleteWhatsAppMessage(messageId); const io = getIO(); io.to(message.ticketId.toString()).emit("appMessage", { action: "update", message }); return res.send(); };