Skip to content

Commit 66f303f

Browse files
feat: support native GIF sending without video conversion (#2540)
* feat: add gifPlayback support for video messages Allow gifPlayback and gifAttribution options to be passed to Baileys video messages. * feat: add gif options to media DTOs Add gifPlayback and gifAttribution properties to media DTO definitions. * feat: add gif fields to media message schema Add gifPlayback and gifAttribution validation support to media message schema. * fix: validate gifAttribution values before assignment Prevent invalid gifAttribution values from reaching Baileys media payload.
1 parent 3570d7e commit 66f303f

3 files changed

Lines changed: 21 additions & 1 deletion

File tree

src/api/dto/sendMessage.dto.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ export class MediaMessage {
2525
fileName?: string;
2626
// url or base64
2727
media: string;
28+
gifPlayback?: boolean | string;
29+
gifAttribution?: number | string;
2830
}
2931

3032
export class StatusMessage {
@@ -83,6 +85,8 @@ export class SendMediaDto extends Metadata {
8385
fileName?: string;
8486
// url or base64
8587
media: string;
88+
gifPlayback?: boolean | string;
89+
gifAttribution?: number | string;
8690
}
8791

8892
export class SendPtvDto extends Metadata {

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3157,7 +3157,14 @@ export class BaileysStartupService extends ChannelStartupService {
31573157
prepareMedia[mediaType].fileName = mediaMessage.fileName;
31583158

31593159
if (mediaMessage.mediatype === 'video') {
3160-
prepareMedia[mediaType].gifPlayback = false;
3160+
prepareMedia[mediaType].gifPlayback = mediaMessage.gifPlayback === true || mediaMessage.gifPlayback === 'true';
3161+
3162+
if (mediaMessage.gifAttribution !== undefined) {
3163+
const gifAttribution = Number(mediaMessage.gifAttribution);
3164+
if (gifAttribution === 0 || gifAttribution === 1 || gifAttribution === 2) {
3165+
prepareMedia[mediaType].gifAttribution = gifAttribution;
3166+
}
3167+
}
31613168
}
31623169

31633170
return generateWAMessageFromContent(

src/validate/message.schema.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,15 @@ export const mediaMessageSchema: JSONSchema7 = {
102102
media: { type: 'string' },
103103
fileName: { type: 'string' },
104104
caption: { type: 'string' },
105+
gifPlayback: {
106+
oneOf: [{ type: 'boolean' }, { type: 'string', enum: ['true', 'false'] }],
107+
},
108+
gifAttribution: {
109+
oneOf: [
110+
{ type: 'integer', enum: [0, 1, 2] },
111+
{ type: 'string', enum: ['0', '1', '2'] },
112+
],
113+
},
105114
delay: {
106115
type: 'integer',
107116
description: 'Enter a value in milliseconds',

0 commit comments

Comments
 (0)