Skip to content

Commit 0bda8ef

Browse files
possebonclaude
andcommitted
fix(webhooks): prevent early return from skipping webhook dispatch for media
Fix evolution-foundation#2396: When S3 video upload was disabled or media extraction failed, the message handler returned early, preventing the webhook from ever firing. This caused self-sent media attachments from the linked phone to never appear in webhook payloads, even though the media was stored. Replaced early `return` statements with proper if/else flow so media upload failures only skip the S3 upload — webhook dispatch always runs. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent d8cd2d0 commit 0bda8ef

1 file changed

Lines changed: 39 additions & 43 deletions

File tree

src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts

Lines changed: 39 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1382,52 +1382,48 @@ export class BaileysStartupService extends ChannelStartupService {
13821382
if (isMedia) {
13831383
if (this.configService.get<S3>('S3').ENABLE) {
13841384
try {
1385+
// Fix #2396: Removed early returns that prevented webhook dispatch for media messages
13851386
if (isVideo && !this.configService.get<S3>('S3').SAVE_VIDEO) {
1386-
this.logger.warn('Video upload is disabled. Skipping video upload.');
1387-
// Skip video upload by returning early from this block
1388-
return;
1389-
}
1390-
1391-
const message: any = received;
1392-
1393-
// Verificação adicional para garantir que há conteúdo de mídia real
1394-
const hasRealMedia = this.hasValidMediaContent(message);
1395-
1396-
if (!hasRealMedia) {
1397-
this.logger.warn('Message detected as media but contains no valid media content');
1387+
this.logger.warn('Video upload is disabled. Skipping S3 upload.');
13981388
} else {
1399-
const media = await this.getBase64FromMediaMessage({ message }, true);
1400-
1401-
if (!media) {
1402-
this.logger.verbose('No valid media to upload (messageContextInfo only), skipping MinIO');
1403-
return;
1389+
const message: any = received;
1390+
const hasRealMedia = this.hasValidMediaContent(message);
1391+
1392+
if (!hasRealMedia) {
1393+
this.logger.warn('Message detected as media but contains no valid media content');
1394+
} else {
1395+
const media = await this.getBase64FromMediaMessage({ message }, true);
1396+
1397+
if (!media) {
1398+
this.logger.verbose('No valid media to upload (messageContextInfo only), skipping S3');
1399+
} else {
1400+
const { buffer, mediaType, fileName, size } = media;
1401+
const mimetype = mimeTypes.lookup(fileName).toString();
1402+
const fullName = join(
1403+
`${this.instance.id}`,
1404+
received.key.remoteJid,
1405+
mediaType,
1406+
`${Date.now()}_${fileName}`,
1407+
);
1408+
await s3Service.uploadFile(fullName, buffer, size.fileLength?.low, {
1409+
'Content-Type': mimetype,
1410+
});
1411+
1412+
await this.prismaRepository.media.create({
1413+
data: {
1414+
messageId: msg.id,
1415+
instanceId: this.instanceId,
1416+
type: mediaType,
1417+
fileName: fullName,
1418+
mimetype,
1419+
},
1420+
});
1421+
1422+
const mediaUrl = await s3Service.getObjectUrl(fullName);
1423+
messageRaw.message.mediaUrl = mediaUrl;
1424+
await this.prismaRepository.message.update({ where: { id: msg.id }, data: messageRaw });
1425+
}
14041426
}
1405-
1406-
const { buffer, mediaType, fileName, size } = media;
1407-
const mimetype = mimeTypes.lookup(fileName).toString();
1408-
const fullName = join(
1409-
`${this.instance.id}`,
1410-
received.key.remoteJid,
1411-
mediaType,
1412-
`${Date.now()}_${fileName}`,
1413-
);
1414-
await s3Service.uploadFile(fullName, buffer, size.fileLength?.low, { 'Content-Type': mimetype });
1415-
1416-
await this.prismaRepository.media.create({
1417-
data: {
1418-
messageId: msg.id,
1419-
instanceId: this.instanceId,
1420-
type: mediaType,
1421-
fileName: fullName,
1422-
mimetype,
1423-
},
1424-
});
1425-
1426-
const mediaUrl = await s3Service.getObjectUrl(fullName);
1427-
1428-
messageRaw.message.mediaUrl = mediaUrl;
1429-
1430-
await this.prismaRepository.message.update({ where: { id: msg.id }, data: messageRaw });
14311427
}
14321428
} catch (error) {
14331429
this.logger.error(['Error on upload file to minio', error?.message, error?.stack]);

0 commit comments

Comments
 (0)