Skip to content

Commit 3fa9d10

Browse files
committed
Novas correções
1 parent c313f5b commit 3fa9d10

File tree

2 files changed

+63
-10
lines changed

2 files changed

+63
-10
lines changed

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

Lines changed: 55 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ import Long from 'long';
138138
import mimeTypes from 'mime-types';
139139
import NodeCache from 'node-cache';
140140
import cron from 'node-cron';
141+
import dayjs from 'dayjs';
141142
import { release } from 'os';
142143
import { join } from 'path';
143144
import P from 'pino';
@@ -173,6 +174,30 @@ function normalizeJid(jid: string): string {
173174
return jid;
174175
}
175176

177+
// Function to clear corrupted session data
178+
async function clearCorruptedSessionData(instanceId: string, baileysCache: CacheService) {
179+
try {
180+
// Clear all baileys cache for this instance
181+
await baileysCache.deleteAll(instanceId);
182+
183+
// Clear session-related cache patterns
184+
const patterns = [
185+
`${instanceId}_*`,
186+
`*${instanceId}*`,
187+
`*session*${instanceId}*`,
188+
`*prekey*${instanceId}*`
189+
];
190+
191+
for (const pattern of patterns) {
192+
await baileysCache.deleteAll(pattern);
193+
}
194+
195+
console.log(`Cleared corrupted session data for instance: ${instanceId}`);
196+
} catch (error) {
197+
console.error('Error clearing session data:', error);
198+
}
199+
}
200+
176201
// Adicione a função getVideoDuration no início do arquivo
177202
async function getVideoDuration(input: Buffer | string | Readable): Promise<number> {
178203
const MediaInfoFactory = (await import('mediainfo.js')).default;
@@ -675,6 +700,9 @@ export class BaileysStartupService extends ChannelStartupService {
675700

676701
this.endSession = false;
677702

703+
// Clear any corrupted session data before connecting
704+
await clearCorruptedSessionData(this.instanceId, this.baileysCache);
705+
678706
this.client = makeWASocket(socketConfig);
679707

680708
if (this.localSettings.wavoipToken && this.localSettings.wavoipToken.length > 0) {
@@ -3188,12 +3216,35 @@ export class BaileysStartupService extends ChannelStartupService {
31883216
const cachedNumbers = await getOnWhatsappCache(numbersToVerify);
31893217
console.log('cachedNumbers', cachedNumbers);
31903218

3191-
const filteredNumbers = numbersToVerify.filter(
3192-
(jid) => !cachedNumbers.some((cached) => cached.jidOptions.includes(jid)),
3193-
);
3219+
// Filter numbers that are not cached OR should be re-verified
3220+
const filteredNumbers = numbersToVerify.filter((jid) => {
3221+
const cached = cachedNumbers.find((cached) => cached.jidOptions.includes(jid));
3222+
// If not cached, we should verify
3223+
if (!cached) return true;
3224+
3225+
// For Brazilian numbers, force verification if both formats exist in cache
3226+
// to ensure we're using the correct format
3227+
const isBrazilian = jid.startsWith('55') && jid.includes('@s.whatsapp.net');
3228+
if (isBrazilian) {
3229+
const numberPart = jid.replace('@s.whatsapp.net', '');
3230+
const hasDigit9 = numberPart.length === 13 && numberPart.slice(4, 5) === '9';
3231+
const altFormat = hasDigit9
3232+
? numberPart.slice(0, 4) + numberPart.slice(5)
3233+
: numberPart.slice(0, 4) + '9' + numberPart.slice(4);
3234+
const altJid = altFormat + '@s.whatsapp.net';
3235+
3236+
// If both formats exist in cache, prefer the one with 9
3237+
const altCached = cachedNumbers.find((c) => c.jidOptions.includes(altJid));
3238+
if (cached && altCached && !hasDigit9) {
3239+
return true; // Force verification to get the correct format
3240+
}
3241+
}
3242+
3243+
return false; // Use cached result
3244+
});
31943245
console.log('filteredNumbers', filteredNumbers);
31953246

3196-
const verify = await this.client.onWhatsApp(...filteredNumbers);
3247+
const verify = filteredNumbers.length > 0 ? await this.client.onWhatsApp(...filteredNumbers) : [];
31973248
console.log('verify', verify);
31983249
normalVerifiedUsers = await Promise.all(
31993250
normalUsers.map(async (user) => {

src/utils/onWhatsappCache.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,16 @@ function getAvailableNumbers(remoteJid: string) {
1111

1212
const [number, domain] = remoteJid.split('@');
1313

14-
// Brazilian numbers
14+
// Brazilian numbers - prioritize format with 9
1515
if (remoteJid.startsWith('55')) {
1616
const numberWithDigit =
1717
number.slice(4, 5) === '9' && number.length === 13 ? number : `${number.slice(0, 4)}9${number.slice(4)}`;
1818
const numberWithoutDigit = number.length === 12 ? number : number.slice(0, 4) + number.slice(5);
1919

20-
numbersAvailable.push(numberWithDigit);
21-
numbersAvailable.push(numberWithoutDigit);
20+
// Add the format WITH 9 first (prioritized)
21+
numbersAvailable.push(`${numberWithDigit}@${domain || 's.whatsapp.net'}`);
22+
// Add the format WITHOUT 9 second (fallback)
23+
numbersAvailable.push(`${numberWithoutDigit}@${domain || 's.whatsapp.net'}`);
2224
}
2325

2426
// Mexican/Argentina numbers
@@ -38,16 +40,16 @@ function getAvailableNumbers(remoteJid: string) {
3840
: `${number.slice(0, 2)}${prefix}${number.slice(2)}`;
3941
const numberWithoutDigit = number.length === 12 ? number : number.slice(0, 2) + number.slice(3);
4042

41-
numbersAvailable.push(numberWithDigit);
42-
numbersAvailable.push(numberWithoutDigit);
43+
numbersAvailable.push(`${numberWithDigit}@${domain || 's.whatsapp.net'}`);
44+
numbersAvailable.push(`${numberWithoutDigit}@${domain || 's.whatsapp.net'}`);
4345
}
4446

4547
// Other countries
4648
else {
4749
numbersAvailable.push(remoteJid);
4850
}
4951

50-
return numbersAvailable.map((number) => `${number}@${domain}`);
52+
return numbersAvailable;
5153
}
5254

5355
interface ISaveOnWhatsappCacheParams {

0 commit comments

Comments
 (0)