Skip to content

Commit 28bd796

Browse files
Merge pull request #161 from moraisamilton/develop
Recuperar base64 de media enviada por webhook
2 parents 6ff9c45 + 523f330 commit 28bd796

File tree

7 files changed

+50
-10
lines changed

7 files changed

+50
-10
lines changed

src/dev-env.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ WEBHOOK:
9797
WEBHOOK_BY_EVENTS: false
9898
# Automatically maps webhook paths
9999
# Set the events you want to hear
100+
WEBHOOK_BASE64: false
100101
EVENTS:
101102
APPLICATION_STARTUP: false
102103
QRCODE_UPDATED: true

src/whatsapp/controllers/instance.controller.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ export class InstanceController {
4141
instanceName,
4242
webhook,
4343
webhook_by_events,
44+
webhook_base64,
4445
events,
4546
qrcode,
4647
number,
@@ -139,6 +140,7 @@ export class InstanceController {
139140
url: webhook,
140141
events: newEvents,
141142
webhook_by_events,
143+
webhook_base64,
142144
});
143145

144146
webhookEvents = (await this.webhookService.find(instance)).events;
@@ -297,6 +299,7 @@ export class InstanceController {
297299
webhook: {
298300
webhook,
299301
webhook_by_events,
302+
webhook_base64,
300303
events: webhookEvents,
301304
},
302305
websocket: {
@@ -390,6 +393,7 @@ export class InstanceController {
390393
webhook: {
391394
webhook,
392395
webhook_by_events,
396+
webhook_base64,
393397
events: webhookEvents,
394398
},
395399
websocket: {

src/whatsapp/dto/instance.dto.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ export class InstanceDto {
55
token?: string;
66
webhook?: string;
77
webhook_by_events?: boolean;
8+
webhook_base64?: boolean;
89
events?: string[];
910
reject_call?: boolean;
1011
msg_call?: string;

src/whatsapp/models/webhook.model.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ export class WebhookRaw {
88
enabled?: boolean;
99
events?: string[];
1010
webhook_by_events?: boolean;
11+
webhook_base64?: boolean;
1112
}
1213

1314
const webhookSchema = new Schema<WebhookRaw>({
@@ -16,6 +17,7 @@ const webhookSchema = new Schema<WebhookRaw>({
1617
enabled: { type: Boolean, required: true },
1718
events: { type: [String], required: true },
1819
webhook_by_events: { type: Boolean, required: true },
20+
webhook_base64: { type: Boolean, required: true },
1921
});
2022

2123
export const WebhookModel = dbserver?.model(WebhookRaw.name, webhookSchema, 'webhook');

src/whatsapp/services/webhook.service.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ export class WebhookService {
2626

2727
return result;
2828
} catch (error) {
29-
return { enabled: false, url: '', events: [], webhook_by_events: false };
29+
return { enabled: false, url: '', events: [], webhook_by_events: false, webhook_base64 : false };
3030
}
3131
}
3232
}

src/whatsapp/services/whatsapp.service.ts

Lines changed: 40 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,10 @@ export class WAStartupService {
276276
this.localWebhook.webhook_by_events = data?.webhook_by_events;
277277
this.logger.verbose(`Webhook by events: ${this.localWebhook.webhook_by_events}`);
278278

279+
this.localWebhook.webhook_base64 = data?.webhook_base64;
280+
this.logger.verbose(`Webhook by webhook_base64: ${this.localWebhook.webhook_base64}`);
281+
282+
279283
this.logger.verbose('Webhook loaded');
280284
}
281285

@@ -1528,15 +1532,42 @@ export class WAStartupService {
15281532
return;
15291533
}
15301534

1531-
const messageRaw: MessageRaw = {
1532-
key: received.key,
1533-
pushName: received.pushName,
1534-
message: { ...received.message },
1535-
messageType: getContentType(received.message),
1536-
messageTimestamp: received.messageTimestamp as number,
1537-
owner: this.instance.name,
1538-
source: getDevice(received.key.id),
1539-
};
1535+
let messageRaw: MessageRaw;
1536+
const globalWebhook = this.configService.get<Webhook>('WEBHOOK').GLOBAL;
1537+
if (this.localWebhook.webhook_base64 === true && received?.message.documentMessage || received?.message.imageMessage ) {
1538+
const buffer = await downloadMediaMessage(
1539+
{ key: received.key, message: received?.message },
1540+
'buffer',
1541+
{},
1542+
{
1543+
logger: P({ level: 'error' }),
1544+
reuploadRequest: this.client.updateMediaMessage,
1545+
},
1546+
);
1547+
console.log(buffer);
1548+
messageRaw = {
1549+
key: received.key,
1550+
pushName: received.pushName,
1551+
message: {
1552+
...received.message,
1553+
base64: buffer ? buffer.toString('base64') : undefined,
1554+
},
1555+
messageType: getContentType(received.message),
1556+
messageTimestamp: received.messageTimestamp as number,
1557+
owner: this.instance.name,
1558+
source: getDevice(received.key.id),
1559+
};
1560+
} else {
1561+
messageRaw = {
1562+
key: received.key,
1563+
pushName: received.pushName,
1564+
message: { ...received.message },
1565+
messageType: getContentType(received.message),
1566+
messageTimestamp: received.messageTimestamp as number,
1567+
owner: this.instance.name,
1568+
source: getDevice(received.key.id),
1569+
};
1570+
}
15401571

15411572
if (this.localSettings.read_messages && received.key.id !== 'status@broadcast') {
15421573
await this.client.readMessages([received.key]);

src/whatsapp/types/wa.types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ export declare namespace wa {
5050
url?: string;
5151
events?: string[];
5252
webhook_by_events?: boolean;
53+
webhook_base64?: boolean;
5354
};
5455

5556
export type LocalChatwoot = {

0 commit comments

Comments
 (0)