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:
Claude Agent
2026-08-31 21:02:24 +00:00
parent d0224263f3
commit 3c8a29c2e9

View File

@@ -23,6 +23,7 @@ let sock = null;
let connected = false;
let phoneNumber = null;
let ownJid = null;
let ownLid = null; // acelasi cont, adresat in formatul nou LID
let currentQR = null;
let currentPairingCode = null;
let reconnectAttempts = 0;
@@ -69,12 +70,19 @@ async function startConnection() {
reconnectAttempts = 0;
phoneNumber = sock.user?.id?.split(':')[0] || sock.user?.id?.split('@')[0] || 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') {
connected = false;
phoneNumber = null;
ownLid = null;
const statusCode = lastDisconnect?.error?.output?.statusCode;
const shouldReconnect = statusCode !== DisconnectReason.loggedOut;
@@ -101,11 +109,23 @@ async function startConnection() {
for (const msg of messages) {
if (msg.key.remoteJid === 'status@broadcast') continue;
const isGroup = msg.key.remoteJid.endsWith('@g.us');
const isSelfChat = ownJid && msg.key.remoteJid === ownJid;
if (TEST_MODE_SELF_CHAT_ONLY && !isSelfChat) continue;
if (msg.key.fromMe && !isGroup && !isSelfChat) continue;
const isSelfChat = (ownJid && msg.key.remoteJid === ownJid)
|| (ownLid && msg.key.remoteJid === ownLid);
// 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;
if (!text) continue;
if (!text) {
console.log(`[whatsapp] ignorat (fara text): remoteJid=${msg.key.remoteJid} tipuri=${Object.keys(msg.message || {}).join(',')}`);
continue;
}
messageQueue.push({
from: msg.key.remoteJid,
@@ -131,6 +151,7 @@ app.get('/status', (_req, res) => {
connected,
phone: phoneNumber,
selfChatOnly: TEST_MODE_SELF_CHAT_ONLY,
lid: ownLid,
qr: connected ? null : currentQR,
});
});