Merge pull request #949 from nestordavalos/v2.0.0

fix: Corrected audio file handling in WhatsApp
This commit is contained in:
Davidson Gomes 2024-10-06 09:27:27 -03:00 committed by GitHub
commit db7428abd9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 51 additions and 32 deletions

View File

@ -47,11 +47,14 @@ export class SendMessageController {
} }
public async sendWhatsAppAudio({ instanceName }: InstanceDto, data: SendAudioDto, file?: any) { public async sendWhatsAppAudio({ instanceName }: InstanceDto, data: SendAudioDto, file?: any) {
if (file || isURL(data.audio) || isBase64(data.audio)) { if (file?.buffer || isURL(data.audio) || isBase64(data.audio)) {
return await this.waMonitor.waInstances[instanceName].audioWhatsapp(data, file); // Si file existe y tiene buffer, o si es una URL o Base64, continúa
return await this.waMonitor.waInstances[instanceName].audioWhatsapp(data, file);
} else {
console.error('El archivo no tiene buffer o el audio no es una URL o Base64 válida');
throw new BadRequestException('Owned media must be a url, base64, or valid file with buffer');
} }
throw new BadRequestException('Owned media must be a url or base64'); }
}
public async sendButtons({ instanceName }: InstanceDto, data: SendButtonDto) { public async sendButtons({ instanceName }: InstanceDto, data: SendButtonDto) {
return await this.waMonitor.waInstances[instanceName].buttonMessage(data); return await this.waMonitor.waInstances[instanceName].buttonMessage(data);

View File

@ -483,7 +483,12 @@ export class EvolutionStartupService extends ChannelStartupService {
public async audioWhatsapp(data: SendAudioDto, file?: any, isIntegration = false) { public async audioWhatsapp(data: SendAudioDto, file?: any, isIntegration = false) {
const mediaData: SendAudioDto = { ...data }; const mediaData: SendAudioDto = { ...data };
if (file) mediaData.audio = file.buffer.toString('base64'); if (file?.buffer) {
mediaData.audio = file.buffer.toString('base64');
} else {
console.error("El archivo o buffer no está definido correctamente.");
throw new Error("File or buffer is undefined.");
}
const message = await this.processAudio(mediaData.audio, data.number); const message = await this.processAudio(mediaData.audio, data.number);

View File

@ -1081,7 +1081,13 @@ export class BusinessStartupService extends ChannelStartupService {
public async audioWhatsapp(data: SendAudioDto, file?: any, isIntegration = false) { public async audioWhatsapp(data: SendAudioDto, file?: any, isIntegration = false) {
const mediaData: SendAudioDto = { ...data }; const mediaData: SendAudioDto = { ...data };
if (file) mediaData.audio = file.buffer.toString('base64'); if (file?.buffer) {
// Asegurarse de que file y buffer existen antes de usarlos
mediaData.audio = file.buffer.toString('base64');
} else {
console.error('El archivo no tiene buffer o file es undefined');
throw new Error('File or buffer is undefined');
}
const message = await this.processAudio(mediaData.audio, data.number); const message = await this.processAudio(mediaData.audio, data.number);

View File

@ -2574,42 +2574,47 @@ export class BaileysStartupService extends ChannelStartupService {
public async audioWhatsapp(data: SendAudioDto, file?: any, isIntegration = false) { public async audioWhatsapp(data: SendAudioDto, file?: any, isIntegration = false) {
const mediaData: SendAudioDto = { ...data }; const mediaData: SendAudioDto = { ...data };
if (file) mediaData.audio = file.buffer.toString('base64'); if (file?.buffer) {
mediaData.audio = file.buffer.toString('base64');
} else if (!isURL(data.audio) && !isBase64(data.audio)) {
console.error('Invalid file or audio source');
throw new BadRequestException('File buffer, URL, or base64 audio is required');
}
if (!data?.encoding && data?.encoding !== false) { if (!data?.encoding && data?.encoding !== false) {
data.encoding = true; data.encoding = true;
} }
if (data?.encoding) { if (data?.encoding) {
const convert = await this.processAudio(mediaData.audio); const convert = await this.processAudio(mediaData.audio);
if (Buffer.isBuffer(convert)) { if (Buffer.isBuffer(convert)) {
const result = this.sendMessageWithTyping<AnyMessageContent>( const result = this.sendMessageWithTyping<AnyMessageContent>(
data.number, data.number,
{ {
audio: convert, audio: convert,
ptt: true, ptt: true,
mimetype: 'audio/ogg; codecs=opus', mimetype: 'audio/ogg; codecs=opus',
}, },
{ presence: 'recording', delay: data?.delay }, { presence: 'recording', delay: data?.delay },
isIntegration, isIntegration,
); );
return result; return result;
} else { } else {
throw new InternalServerErrorException('Failed to convert audio'); throw new InternalServerErrorException('Failed to convert audio');
} }
} }
return await this.sendMessageWithTyping<AnyMessageContent>( return await this.sendMessageWithTyping<AnyMessageContent>(
data.number, data.number,
{ {
audio: isURL(data.audio) ? { url: data.audio } : Buffer.from(data.audio, 'base64'), audio: isURL(data.audio) ? { url: data.audio } : Buffer.from(data.audio, 'base64'),
ptt: true, ptt: true,
mimetype: 'audio/ogg; codecs=opus', mimetype: 'audio/ogg; codecs=opus',
}, },
{ presence: 'recording', delay: data?.delay }, { presence: 'recording', delay: data?.delay },
isIntegration, isIntegration,
); );
} }