fix(maria): recunoaste JID-urile LID, altfel toate mesajele erau aruncate tacut
Dupa asocierea de azi, puntea nu raspundea la niciun mesaj desi `connected: true` si consumer-ul rula. WhatsApp livreaza self-chat-ul pe conturile noi cu un JID de tip LID (`51947713372214@lid`), nu cu `<numar>@s.whatsapp.net`, iar filtrul `TEST_MODE_SELF_CHAT_ONLY` compara doar cu al doilea — deci arunca tot. - `ownLid` calculat din `sock.user.lid` (cu rezerva pe `creds.me.lid`), fara sufixul de dispozitiv: credentialele au "51947713372214:13@lid", dar remoteJid-ul mesajelor vine fara ":13". - `isSelfChat` accepta acum ambele formate. - Logul de conectare si `/status` arata si LID-ul. Cauza pentru care a fost greu de gasit: mesajele respinse dispareau fara nicio urma. Acum fiecare motiv de respingere se logheaza (nu e self-chat, fromMe in afara self-chat, fara continut text), cu JID-urile comparate. Exact linia asta a aratat problema in 30 de secunde: [whatsapp] ignorat (nu e self-chat): remoteJid=51947713372214@lid ownJid=40723197939@s.whatsapp.net Verificat live: "token efactura expirat" -> preluat, cautat in RAG, raspuns trimis. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q4uzvgm7AyJch5WH8QHRhY
This commit is contained in:
@@ -23,6 +23,7 @@ let sock = null;
|
|||||||
let connected = false;
|
let connected = false;
|
||||||
let phoneNumber = null;
|
let phoneNumber = null;
|
||||||
let ownJid = null;
|
let ownJid = null;
|
||||||
|
let ownLid = null; // acelasi cont, adresat in formatul nou LID
|
||||||
let currentQR = null;
|
let currentQR = null;
|
||||||
let currentPairingCode = null;
|
let currentPairingCode = null;
|
||||||
let reconnectAttempts = 0;
|
let reconnectAttempts = 0;
|
||||||
@@ -69,12 +70,19 @@ async function startConnection() {
|
|||||||
reconnectAttempts = 0;
|
reconnectAttempts = 0;
|
||||||
phoneNumber = sock.user?.id?.split(':')[0] || sock.user?.id?.split('@')[0] || null;
|
phoneNumber = sock.user?.id?.split(':')[0] || sock.user?.id?.split('@')[0] || null;
|
||||||
ownJid = phoneNumber ? `${phoneNumber}@s.whatsapp.net` : null;
|
ownJid = phoneNumber ? `${phoneNumber}@s.whatsapp.net` : null;
|
||||||
console.log(`[whatsapp] Connected as ${phoneNumber} (self-chat-only mode: ${TEST_MODE_SELF_CHAT_ONLY})`);
|
// WhatsApp adreseaza conturile si prin LID (Linked ID), nu doar prin numar. Pe
|
||||||
|
// conturile noi, self-chat-ul soseste ca `<lid>@lid`, deci comparatia doar cu
|
||||||
|
// `<numar>@s.whatsapp.net` arunca toate mesajele. Sufixul de dispozitiv (":13")
|
||||||
|
// apare in credentiale dar nu si in remoteJid-ul mesajelor — il taiem.
|
||||||
|
const rawLid = sock.user?.lid || sock.authState?.creds?.me?.lid || null;
|
||||||
|
ownLid = rawLid ? `${rawLid.split(':')[0].split('@')[0]}@lid` : null;
|
||||||
|
console.log(`[whatsapp] Connected as ${phoneNumber} (lid: ${ownLid || 'n/a'}, self-chat-only mode: ${TEST_MODE_SELF_CHAT_ONLY})`);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (connection === 'close') {
|
if (connection === 'close') {
|
||||||
connected = false;
|
connected = false;
|
||||||
phoneNumber = null;
|
phoneNumber = null;
|
||||||
|
ownLid = null;
|
||||||
const statusCode = lastDisconnect?.error?.output?.statusCode;
|
const statusCode = lastDisconnect?.error?.output?.statusCode;
|
||||||
const shouldReconnect = statusCode !== DisconnectReason.loggedOut;
|
const shouldReconnect = statusCode !== DisconnectReason.loggedOut;
|
||||||
|
|
||||||
@@ -101,11 +109,23 @@ async function startConnection() {
|
|||||||
for (const msg of messages) {
|
for (const msg of messages) {
|
||||||
if (msg.key.remoteJid === 'status@broadcast') continue;
|
if (msg.key.remoteJid === 'status@broadcast') continue;
|
||||||
const isGroup = msg.key.remoteJid.endsWith('@g.us');
|
const isGroup = msg.key.remoteJid.endsWith('@g.us');
|
||||||
const isSelfChat = ownJid && msg.key.remoteJid === ownJid;
|
const isSelfChat = (ownJid && msg.key.remoteJid === ownJid)
|
||||||
if (TEST_MODE_SELF_CHAT_ONLY && !isSelfChat) continue;
|
|| (ownLid && msg.key.remoteJid === ownLid);
|
||||||
if (msg.key.fromMe && !isGroup && !isSelfChat) continue;
|
// Mesajele aruncate se logheaza. Fara asta, un JID care nu se potriveste cu
|
||||||
|
// ownJid (ex. formatul @lid) face bridge-ul sa taca fara nicio urma in log.
|
||||||
|
if (TEST_MODE_SELF_CHAT_ONLY && !isSelfChat) {
|
||||||
|
console.log(`[whatsapp] ignorat (nu e self-chat): remoteJid=${msg.key.remoteJid} ownJid=${ownJid} ownLid=${ownLid}`);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (msg.key.fromMe && !isGroup && !isSelfChat) {
|
||||||
|
console.log(`[whatsapp] ignorat (fromMe, nu e self-chat): remoteJid=${msg.key.remoteJid}`);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
const text = msg.message?.conversation || msg.message?.extendedTextMessage?.text;
|
const text = msg.message?.conversation || msg.message?.extendedTextMessage?.text;
|
||||||
if (!text) continue;
|
if (!text) {
|
||||||
|
console.log(`[whatsapp] ignorat (fara text): remoteJid=${msg.key.remoteJid} tipuri=${Object.keys(msg.message || {}).join(',')}`);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
messageQueue.push({
|
messageQueue.push({
|
||||||
from: msg.key.remoteJid,
|
from: msg.key.remoteJid,
|
||||||
@@ -131,6 +151,7 @@ app.get('/status', (_req, res) => {
|
|||||||
connected,
|
connected,
|
||||||
phone: phoneNumber,
|
phone: phoneNumber,
|
||||||
selfChatOnly: TEST_MODE_SELF_CHAT_ONLY,
|
selfChatOnly: TEST_MODE_SELF_CHAT_ONLY,
|
||||||
|
lid: ownLid,
|
||||||
qr: connected ? null : currentQR,
|
qr: connected ? null : currentQR,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user