Files
ROMFASTSQL/docs/chatboti-si-punti.md
Claude Agent 7a1d2a2073 feat(maria): asociere prin cod de telefon si citirea capturilor cu erori
Doua lucruri cerute de utilizator, ambele pe acelasi drum: sa poti lega
puntea fara sa ai un ecran de scanat, si sa poti trimite Mariei o poza cu
eroarea in loc sa transcrii mesajul.

Asociere prin cod de 8 caractere (alternativa la QR):
- endpoint-ul /pair exista, dar nu era folosibil: fara `browser` explicit
  WhatsApp refuza codul, iar dupa introducerea lui corecta serverul cere un
  restart (515) care consuma din bugetul de reincercari si putea opri puntea.
  Acum descriptorul e Browsers.ubuntu('Chrome') si restartRequired reconecteaza
  imediat, fara sa numere.
- codul are TTL de 3 minute, iar /status il da doar cat timp e valabil —
  un cod expirat afisat in dashboard trimite omul sa tasteze degeaba.
- dashboard: camp pentru numar + buton, in acelasi card cu QR-ul.

Imagini cu erori (capturi de ecran):
- puntea descarca imaginile in ~/.maria-bridge/media/ (imageMessage sau
  document cu mimetype image/*, si prin ambalajele efemer/"vezi o data" —
  fara despachetare pareau mesaje fara continut si se aruncau tacut).
- rag/ocr.py: tesseract ron+eng. Modelul de raspuns e strict text, deci OCR
  nu e o optiune de calitate, e singura cale.
- cautarea in index merge DOAR pe liniile care arata a eroare; o fereastra
  intreaga de meniuri si totaluri dilueaza embedding-ul si scoate chunk-uri
  fara legatura. Modelul primeste captura intreaga, marcata ca text OCR.
- capturile se sterg imediat dupa citire (pot contine date de client).
- cand nu se citeste nimic si nu exista legenda, Maria cere textul erorii
  in loc sa raspunda in gol.

16 teste noi (42 in total). install.sh verifica tesseract; README documenteaza
ambele metode de asociere si drumul unei capturi.

Separat, in docs/chatboti-si-punti.md: chatul "Eu" e vazut de AMBELE punti de pe
numar. Puntea lui Echo (LXC 110) e asociata ca dispozitiv :11 al aceluiasi cont,
momentan nelegata dar pornita — daca se reasociaza, raspunde in "Eu" langa Maria.
Notat si ca serviciile lui Echo sunt unitati de UTILIZATOR: `systemctl is-active`
ca root raspunde "inactive" desi botul ruleaza.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4uzvgm7AyJch5WH8QHRhY
2026-08-31 21:22:42 +00:00

9.0 KiB

Chatboții și punțile de mesagerie — care e care

Există trei lucruri numite „Maria", doi boți pe Discord și două punți WhatsApp legate la același număr de telefon. Documentul ăsta spune care e care, unde rulează și cum verifici, în 30 de secunde, cu care vorbești de fapt.

De ce există documentul: pe 2026-08-31 s-a pierdut aproape o oră de diagnostic fiindcă Maria de pe WhatsApp răspundea, dar toate verificările se făceau pe containerul greșit. Pe LXC 171 totul părea rupt (niciun LLM, WhatsApp neasociat, log fără activitate) — răspunsurile veneau de pe LXC 104.

Verificat live pe 2026-08-31. Stările (connected, ce serviciu rulează) se schimbă; topologia, nu.


Tabelul scurt

Cine Unde rulează Canal Model Sursa de cunoștințe
Maria pe Flowise LXC 104, flowise.service, port 3000 web (prin ngrok) configurat în chatflow chatflow Flowise + docstore propriu
Maria WhatsApp ← instanța vie LXC 171, maria-*.service WhatsApp, nr. 40723197939 llama-qwen35 de pe 104, prin rețea depozit sincronizat din Google Drive
Maria WhatsApp — prototipul LXC 104, maria-whatsapp-*.service — (oprit 2026-08-31) — rag_index.json propriu, mic
Echo (MoltBot) LXC 110, echo-core.service Telegram + WhatsApp + Discord Claude Opus 4.5 (API) proiectele lui, roa2web
Puntea Discord → Claude Code LXC 171, claude-discord.service Discord (guild privat) Sonnet/Opus, per fir tot /workspace, acces SSH la cluster

Cele două Marii de WhatsApp rulează același cod, din surse diferite. Vezi mai jos.


Cele trei Marii

1. Maria pe Flowise — chatbot web

LXC 104 (10.0.20.161), flowise.service pe portul 3000, expus public prin ngrok.service la https://mutual-special-koala.ngrok-free.app.

Chatflow-ul e definit în interfața Flowise; memoria e Buffer Window (ultimele 5 schimburi). Sursa versionată a chatflow-ului: vfp_roaauto/COMUN/utile/chatbot/.

Detalii: proxmox/lxc104-flowise/README.md.

2. Maria WhatsApp + RAG — prototipul, OPRIT din 2026-08-31

LXC 104, /root/maria-whatsapp-bridge/ — în afara git-ului. Serviciile maria-whatsapp-bridge și maria-whatsapp-consumer sunt oprite și dezactivate din 2026-08-31, când rolul a trecut pe versiunea din git de pe LXC 171. Codul a rămas pe disc ca plasă de siguranță; llama-qwen35.service și flowise.service rulează mai departe și sunt folosite de restul sistemului.

Ce era cât timp a fost activ:

Serviciu Ce face
maria-whatsapp-bridge.service punte Baileys (Node), port 8099
maria-whatsapp-consumer.service consumer.py — citește mesaje, caută în RAG, întreabă LLM-ul
llama-qwen35.service llama.cpp cu Qwen3.5-2B-Q4_K_M, API compatibil OpenAI pe 8091
ollama.service embeddings, port 11434

Era legată la +40723197939, în self-chat. De ce a fost înlocuită: indexul ei avea 24 de chunk-uri dintr-un singur fișier (knowledge/roaauto_instructiuni.txt), deci orice întrebare din afara subiectului roaauto primea un răspuns inventat — retrieval-ul n-avea ce să găsească.

3. Maria WhatsApp + RAG — versiunea din git, cea care răspunde acum

LXC 171, cod în proxmox/lxc171-claude-agent/maria-whatsapp-bridge/, stare în ~/.maria-bridge/. Aceleași servicii, sub systemctl --user.

Are tot ce s-a construit peste prototip: depozit sincronizat din Google Drive prin rclone (11 documente, 173 de chunk-uri), suport .xml preferat peste .md, lacăt între reindexări, dashboard de control. Foloseste LLM-ul de pe 104 prin rețea (LLM_URL=http://10.0.20.161:8091) — pe 171 nu există niciun model de chat, doar embeddings.

Asociată la +40723197939 pe 2026-08-31, ca dispozitiv nou al aceluiași cont; sesiunea stă în ~/.maria-bridge/whatsapp-auth/. Din acel moment e singura Maria care răspunde pe WhatsApp.

Detalii: maria-whatsapp-bridge/README.md.


Cei doi boți de Discord

Puntea Discord → Claude Code (LXC 171)

claude-discord.service. Un fir de Discord = o sesiune Claude Code care rulează pe container, cu drepturile utilizatorului claude: acces la /workspace, chei SSH, pct exec pe tot clusterul. Comenzi /new, /cd, /model, /status, /stop, /cleanup, /permisiuni.

Dashboard de control: claude-discord-dashboard.service, port 18790, expus prin Tailscale la https://claude-agent.tailf7372d.ts.net/claude. Tot de acolo se comandă și Maria.

Detalii: discord-bridge/README.md.

Echo Core (LXC 110)

echo-core.service — bot pe Telegram, WhatsApp și Discord, cu Claude Opus 4.5 prin API. Alt bot, alt scop, alt container. Dacă un mesaj de pe Discord primește un răspuns care nu seamănă cu Claude Code, verifică dacă nu cumva a răspuns Echo.

Detalii: proxmox/lxc110-moltbot/README.md.


Porturi

Port Container Serviciu
3000 LXC 104 Flowise (web, prin ngrok)
4040 LXC 104 ngrok, interfață locală
8091 LXC 104 llama.cpp / Qwen3.5-2B — LLM-ul de răspuns al Mariei, folosit de 171
8099 LXC 104 punte WhatsApp Maria — prototip, oprit
11434 LXC 104 Ollama (embeddings)
8098 LXC 110 punte WhatsApp Echo
18789 LXC 110 gateway clawdbot
7788 / 7789 LXC 110 supertonic-tts / pocket-tts
8099 LXC 171 punte WhatsApp Maria — instanța vie
11434 LXC 171 Ollama (doar embeddings, fără model de chat)
18790 LXC 171 dashboard punte Discord + Maria

8099 și 11434 există pe ambele containere, cu conținut diferit. De aici jumătate din confuzie — verifică întotdeauna pe ce container ești.


Cum afli cu cine vorbești

# Care punte WhatsApp e conectata, si pe ce numar
ssh root@10.0.20.171 "curl -s http://127.0.0.1:8099/status"                    # Maria (vie)
ssh root@10.0.20.201 "pct exec 104 -- curl -s http://127.0.0.1:8099/status"   # prototip (oprit)
ssh root@10.0.20.200 "pct exec 110 -- curl -s http://127.0.0.1:8098/status"   # Echo

# Ce a procesat consumer-ul Mariei din git (daca e gol, nu ea a raspuns)
tail -20 ~/.maria-bridge/logs/rag.log

# LLM-ul de raspuns
curl -s http://10.0.20.161:8091/v1/models

Regula: WhatsApp-ul lui Echo (LXC 110) și cel al Mariei (LXC 171) sunt legate la același număr, +40723197939, ca dispozitive diferite ale aceluiași cont. Un mesaj poate ajunge la ambele. Dacă primești două răspunsuri, două punți sunt active simultan.

Chatul „Eu" (self-chat) le vede amândouă

Ambele punți sunt dispozitive conectate ale aceluiași cont, deci amândouă primesc și mesajele din chatul cu tine însuți. Nu există o setare care să dea self-chat-ul doar uneia — separarea trebuie făcută oprind una din punți.

Starea la 2026-08-31, verificată: puntea lui Echo era asociată ca dispozitiv :11 al numărului (auth/creds.json → me.id = 40723197939:11) și a răspuns în „Eu" până dimineața, când sesiunea i-a căzut (registered: false, connected: false). Serviciul rulează în continuare și echo-core îi cere mesajele la câteva minute — dacă cineva îl reasociază, Echo revine în „Eu" lângă Maria, fără niciun avertisment.

Pentru a-l scoate definitiv din WhatsApp (Telegram și Discord rămân neatinse):

ssh root@10.0.20.200 "pct exec 110 -- sudo -u moltbot XDG_RUNTIME_DIR=/run/user/1000 \
    systemctl --user disable --now echo-whatsapp-bridge"

Atenție la scope-ul systemd pe LXC 110: serviciile lui Echo sunt unități de utilizator (moltbot, uid 1000). Un systemctl is-active echo-core rulat ca root răspunde inactive deși botul rulează — exact genul de răspuns care trimite diagnosticul pe pistă falsă. Folosește forma de mai sus, cu --user și XDG_RUNTIME_DIR.


Capcane

  • „Maria" nu e un singur lucru. Întreabă întâi: web (Flowise), WhatsApp de pe 104, sau WhatsApp de pe 171?
  • Prototipul de pe 104 nu e în git și e oprit din 2026-08-31. Nu-l reporni ca să „repari" Maria: ar răspunde în paralel cu cea din git, pe același număr, cu un index de 24 de chunk-uri. Codul versionat e cel de pe 171.
  • Depozitul Mariei din git e oglindă a Google Drive. rclone sync șterge local ce nu mai există în Drive; un document adăugat manual din dashboard dispare la următoarea sincronizare.
  • Reindexarea durează ~21 de minute pentru 173 de chunk-uri (embedding CPU-only, ~7,3 s per chunk pe LXC 171). Nu pare blocată — chiar durează.
  • Maria nu are voie la infrastructură. E chatbot pentru clienții ERP ROA; nimic din proxmox/, niciun IP, port sau credențial nu intră în depozitul ei de documente. Puntea Discord, în schimb, are acces la tot. Vezi claude-agent/CLAUDE.md.