feat(maria): ALLOW_SELF_CHAT — Maria raspunde doar in grupul de test, nu si in self-chat
`TEST_MODE_SELF_CHAT_ONLY` insemna „self-chat SI grupurile permise"; nu exista niciun fel de a spune „doar grupurile". `ALLOW_SELF_CHAT=false` (nou, implicit `true`) scoate chatul cu sine insusi din filtrul puntii. De ce: `SUPPORT_JID` e tot numarul propriu, deci escaladarile, reamintirile si raspunsurile suportului cadeau in acelasi chat cu intrebarile — Maria isi citea propriul canal de suport ca pe o discutie cu un client. Pus pe `false` in `~/.maria-bridge/env`, puntea repornita: raspunde acum doar in `120363409761730101@g.us` („Maria Test"). Se vede in `/status` (`allowSelfChat`) si in linia de conectare din log. Trimiterea catre suport nu e afectata — filtrul e doar pe mesajele primite. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q4uzvgm7AyJch5WH8QHRhY
This commit is contained in:
@@ -512,6 +512,28 @@ comenzile explicite: „Maria, stop" / „preiau eu" si „Maria, continua".
|
||||
`TEST_MODE_SELF_CHAT_ONLY=true`. Filtrul e si in punte, si in consumer. Azi:
|
||||
`120363409761730101@g.us` — grupul „Maria Test".
|
||||
|
||||
`ALLOW_SELF_CHAT=false` scoate si chatul cu tine insuti, deci **ramane doar grupul**.
|
||||
Asa e configurat acum (2026-09-01). Motivul: `SUPPORT_JID` e tot numarul propriu,
|
||||
deci escaladarile, reamintirile si raspunsurile suportului cadeau in acelasi chat cu
|
||||
intrebarile — Maria isi citea propriul canal de suport ca pe o discutie cu un client.
|
||||
Cele doua comutatoare sunt independente:
|
||||
|
||||
| `TEST_MODE_SELF_CHAT_ONLY` | `ALLOW_SELF_CHAT` | Unde raspunde Maria |
|
||||
|---|---|---|
|
||||
| `true` | `true` | self-chat + grupurile din `ALLOWED_GROUP_JIDS` |
|
||||
| `true` | `false` | **doar** grupurile din `ALLOWED_GROUP_JIDS` (azi) |
|
||||
| `false` | `true` | oricine ii scrie pe numarul legat |
|
||||
| `false` | `false` | oricine, minus self-chat |
|
||||
|
||||
Filtrul e in punte (`whatsapp/index.js`), inainte de coada de mesaje: ce se opreste
|
||||
acolo nu ajunge niciodata la consumer. Se vede in `/status` (`allowSelfChat`) si in
|
||||
linia de conectare din `logs/whatsapp.log`.
|
||||
|
||||
> Cat timp `SUPPORT_JID` e numarul propriu, **trimiterea** catre suport merge in
|
||||
> continuare (filtrul e doar pe mesajele primite), dar ce raspunzi tu acolo nu mai e
|
||||
> citit — deci nici completarile, nici `raspuns_om` nu se inregistreaza din
|
||||
> self-chat. Cand suportul devine un grup sau alt numar, dispare si limita asta.
|
||||
|
||||
> **Nu pune aici `echo-test` (`120363424350922235@g.us`).** E canalul WhatsApp al lui
|
||||
> Echo (LXC 110), iar puntea lui nu filtreaza `fromMe` in grupuri
|
||||
> (`if (msg.key.fromMe && !isGroup) continue`). Cei doi boti si-ar raspunde unul
|
||||
|
||||
@@ -10,6 +10,11 @@ BRIDGE_PORT=8099
|
||||
# dupa ce esti multumit de calitatea raspunsurilor — altfel Maria raspunde la
|
||||
# oricine iti scrie pe numarul legat.
|
||||
TEST_MODE_SELF_CHAT_ONLY=true
|
||||
# false = Maria nu mai raspunde in chatul cu tine insuti, doar in grupurile din
|
||||
# ALLOWED_GROUP_JIDS. De pus pe false cand SUPPORT_JID e chiar numarul propriu:
|
||||
# altfel escaladarile si raspunsurile suportului cad in acelasi chat cu
|
||||
# intrebarile.
|
||||
ALLOW_SELF_CHAT=true
|
||||
# Grupuri in care Maria raspunde chiar si cu self-chat-only (JID-uri, separate prin
|
||||
# virgula). JID-ul unui grup se citeste din punte: curl -s localhost:8099/groups
|
||||
# ATENTIE: nu pune un grup in care raspunde si Echo (LXC 110) — puntea lui nu
|
||||
|
||||
@@ -28,6 +28,10 @@ const MEDIA_DIR = process.env.MARIA_BRIDGE_DIR
|
||||
: path.join(__dirname, 'media');
|
||||
const MAX_RECONNECT_ATTEMPTS = 5;
|
||||
const TEST_MODE_SELF_CHAT_ONLY = (process.env.TEST_MODE_SELF_CHAT_ONLY || 'true') !== 'false';
|
||||
// Self-chat-ul e comod la primele teste, dar acolo SUPPORT_JID e chiar propriul
|
||||
// numar: escaladarile si raspunsurile suportului ajung in acelasi chat cu
|
||||
// intrebarile clientului. Pe 'false' ramane doar ALLOWED_GROUP_JIDS.
|
||||
const ALLOW_SELF_CHAT = (process.env.ALLOW_SELF_CHAT || 'true') !== 'false';
|
||||
// Grupuri in care Maria are voie sa raspunda chiar si in modul self-chat. Testarea
|
||||
// intr-un grup dedicat scoate zgomotul din chatul „Eu" — dar numai grupurile de
|
||||
// aici trec, ca sa nu inceapa Maria sa vorbeasca in cele 197 de grupuri ale contului.
|
||||
@@ -192,7 +196,7 @@ async function startConnection() {
|
||||
// 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})`);
|
||||
console.log(`[whatsapp] Connected as ${phoneNumber} (lid: ${ownLid || 'n/a'}, self-chat-only mode: ${TEST_MODE_SELF_CHAT_ONLY}, self-chat: ${ALLOW_SELF_CHAT ? 'da' : 'oprit'}, grupuri: ${[...ALLOWED_GROUP_JIDS].join(', ') || '-'})`);
|
||||
}
|
||||
|
||||
if (connection === 'close') {
|
||||
@@ -237,6 +241,10 @@ async function startConnection() {
|
||||
// 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.
|
||||
const isAllowedGroup = isGroup && ALLOWED_GROUP_JIDS.has(msg.key.remoteJid);
|
||||
if (isSelfChat && !ALLOW_SELF_CHAT) {
|
||||
console.log(`[whatsapp] ignorat (self-chat oprit): remoteJid=${msg.key.remoteJid}`);
|
||||
continue;
|
||||
}
|
||||
if (TEST_MODE_SELF_CHAT_ONLY && !isSelfChat && !isAllowedGroup) {
|
||||
console.log(`[whatsapp] ignorat (nu e self-chat): remoteJid=${msg.key.remoteJid} ownJid=${ownJid} ownLid=${ownLid}`);
|
||||
continue;
|
||||
@@ -304,6 +312,7 @@ app.get('/status', (_req, res) => {
|
||||
connected,
|
||||
phone: phoneNumber,
|
||||
selfChatOnly: TEST_MODE_SELF_CHAT_ONLY,
|
||||
allowSelfChat: ALLOW_SELF_CHAT,
|
||||
allowedGroups: [...ALLOWED_GROUP_JIDS],
|
||||
lid: ownLid,
|
||||
qr: connected ? null : currentQR,
|
||||
|
||||
Reference in New Issue
Block a user