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:
|
`TEST_MODE_SELF_CHAT_ONLY=true`. Filtrul e si in punte, si in consumer. Azi:
|
||||||
`120363409761730101@g.us` — grupul „Maria Test".
|
`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
|
> **Nu pune aici `echo-test` (`120363424350922235@g.us`).** E canalul WhatsApp al lui
|
||||||
> Echo (LXC 110), iar puntea lui nu filtreaza `fromMe` in grupuri
|
> Echo (LXC 110), iar puntea lui nu filtreaza `fromMe` in grupuri
|
||||||
> (`if (msg.key.fromMe && !isGroup) continue`). Cei doi boti si-ar raspunde unul
|
> (`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
|
# dupa ce esti multumit de calitatea raspunsurilor — altfel Maria raspunde la
|
||||||
# oricine iti scrie pe numarul legat.
|
# oricine iti scrie pe numarul legat.
|
||||||
TEST_MODE_SELF_CHAT_ONLY=true
|
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
|
# 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
|
# 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
|
# 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');
|
: path.join(__dirname, 'media');
|
||||||
const MAX_RECONNECT_ATTEMPTS = 5;
|
const MAX_RECONNECT_ATTEMPTS = 5;
|
||||||
const TEST_MODE_SELF_CHAT_ONLY = (process.env.TEST_MODE_SELF_CHAT_ONLY || 'true') !== 'false';
|
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
|
// 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
|
// 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.
|
// 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.
|
// apare in credentiale dar nu si in remoteJid-ul mesajelor — il taiem.
|
||||||
const rawLid = sock.user?.lid || sock.authState?.creds?.me?.lid || null;
|
const rawLid = sock.user?.lid || sock.authState?.creds?.me?.lid || null;
|
||||||
ownLid = rawLid ? `${rawLid.split(':')[0].split('@')[0]}@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') {
|
if (connection === 'close') {
|
||||||
@@ -237,6 +241,10 @@ async function startConnection() {
|
|||||||
// Mesajele aruncate se logheaza. Fara asta, un JID care nu se potriveste cu
|
// 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.
|
// ownJid (ex. formatul @lid) face bridge-ul sa taca fara nicio urma in log.
|
||||||
const isAllowedGroup = isGroup && ALLOWED_GROUP_JIDS.has(msg.key.remoteJid);
|
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) {
|
if (TEST_MODE_SELF_CHAT_ONLY && !isSelfChat && !isAllowedGroup) {
|
||||||
console.log(`[whatsapp] ignorat (nu e self-chat): remoteJid=${msg.key.remoteJid} ownJid=${ownJid} ownLid=${ownLid}`);
|
console.log(`[whatsapp] ignorat (nu e self-chat): remoteJid=${msg.key.remoteJid} ownJid=${ownJid} ownLid=${ownLid}`);
|
||||||
continue;
|
continue;
|
||||||
@@ -304,6 +312,7 @@ app.get('/status', (_req, res) => {
|
|||||||
connected,
|
connected,
|
||||||
phone: phoneNumber,
|
phone: phoneNumber,
|
||||||
selfChatOnly: TEST_MODE_SELF_CHAT_ONLY,
|
selfChatOnly: TEST_MODE_SELF_CHAT_ONLY,
|
||||||
|
allowSelfChat: ALLOW_SELF_CHAT,
|
||||||
allowedGroups: [...ALLOWED_GROUP_JIDS],
|
allowedGroups: [...ALLOWED_GROUP_JIDS],
|
||||||
lid: ownLid,
|
lid: ownLid,
|
||||||
qr: connected ? null : currentQR,
|
qr: connected ? null : currentQR,
|
||||||
|
|||||||
Reference in New Issue
Block a user