116 lines
2.8 KiB
TypeScript
116 lines
2.8 KiB
TypeScript
import { MessageMedia } from "whatsapp-web.js";
|
|
import { getIO } from "../libs/socket";
|
|
import Contact from "../models/Contact";
|
|
import Ticket from "../models/Ticket";
|
|
import {
|
|
isValidMsg,
|
|
mediaTypeWhatsappOfficial,
|
|
verifyMediaMessage,
|
|
verifyMessage
|
|
} from "../services/WbotServices/wbotMessageListener";
|
|
|
|
import ffmpeg from "fluent-ffmpeg";
|
|
import fs from "fs";
|
|
|
|
import path from "path";
|
|
|
|
import { convertAudioToOgg } from "../helpers/ConvertAudio";
|
|
import { bytesToMB } from "./BytesToMB";
|
|
import isThisHour from "date-fns/esm/isThisHour/index";
|
|
import AppError from "../errors/AppError";
|
|
import createApiClientWhatsOfficial from "./WhatsappOfficialAPI";
|
|
import Whatsapp from "../models/Whatsapp";
|
|
|
|
async function sendWhatsMediaOfficialAPI(
|
|
ticket: Ticket,
|
|
media: any,
|
|
type: any,
|
|
mic_audio?: any
|
|
) {
|
|
const { contactId, phoneNumberId } = ticket;
|
|
|
|
const contact: any = await Contact.findByPk(contactId);
|
|
|
|
const { number } = contact;
|
|
|
|
let { filename } = MessageMedia.fromFilePath(media.path);
|
|
|
|
const { originalname } = media;
|
|
|
|
console.log("mic_audio: ", mic_audio);
|
|
|
|
if (type == "audio" && mic_audio) {
|
|
const inputFile = media.path;
|
|
|
|
const fileNameWithoutExtension = path.basename(
|
|
media.path,
|
|
path.extname(media.path)
|
|
);
|
|
|
|
const outputFile = `${
|
|
inputFile.split(fileNameWithoutExtension)[0]
|
|
}${fileNameWithoutExtension}`;
|
|
|
|
try {
|
|
await convertAudioToOgg(inputFile, outputFile);
|
|
media = MessageMedia.fromFilePath(`${outputFile}.ogg`);
|
|
filename = media.filename;
|
|
} catch (error) {
|
|
console.error("Conversion failed:", error);
|
|
}
|
|
}
|
|
|
|
let data: any = {
|
|
messaging_product: "whatsapp",
|
|
recipient_type: "individual",
|
|
to: number,
|
|
type,
|
|
[type]: {
|
|
link: `${process.env.URL_WHATSAPP_MEDIA}/${filename}`
|
|
}
|
|
};
|
|
|
|
if (type == "document") {
|
|
data.document = { ...data.document, filename: originalname };
|
|
}
|
|
|
|
console.log("PAYLOAD MEDIA: ", data);
|
|
|
|
if (!isValidMsg({ type })) {
|
|
return;
|
|
}
|
|
|
|
const { whatsappOfficialToken }: any = await Whatsapp.findOne({
|
|
where: { phoneNumberId }
|
|
});
|
|
|
|
const whatsappOfficialAPI = createApiClientWhatsOfficial(
|
|
whatsappOfficialToken
|
|
);
|
|
|
|
whatsappOfficialAPI
|
|
.post(`/${process.env.VERSION}/${phoneNumberId}/messages`, data)
|
|
.then(response => {
|
|
console.log("Response:", response.data);
|
|
|
|
let msg = {};
|
|
|
|
msg = {
|
|
...msg,
|
|
id: { id: response.data.messages[0].id },
|
|
ticketId: ticket.id,
|
|
body: filename,
|
|
fromMe: true,
|
|
read: false,
|
|
phoneNumberId
|
|
};
|
|
|
|
verifyMediaMessage(msg, ticket, contact, media);
|
|
})
|
|
.catch(error => {
|
|
console.log("Error on try request: ", error.response.data.error.message);
|
|
});
|
|
}
|
|
|
|
export default sendWhatsMediaOfficialAPI;
|