feat(maria): raspunsul omului de la suport se pastreaza in jurnalul escaladarii
Jurnalul pastra doar intrebarile FARA raspuns. Replica omului care prelua discutia se scria numai in firul din `conversations/`, care se sterge dupa FIR_TTL_MIN — deci exact rezolvarea disparea, iar perechea eroare + rezolvare trebuia recuperata manual din WhatsApp. Acum, cat tine preluarea, fiecare mesaj al omului se adauga la fisierul escaladarii (`completari`, `"fel": "raspuns_om"`, cu cine a scris). La fiecare mesaj, nu doar la primul: rezolvarea vine de obicei in doua-trei replici. De aici se pot extrage erorile si rezolvarile pentru `document_store` — „CUI cumparator incorect" ajunge in documente doar daca o scrie cineva, si cel mai ieftin loc de unde poate fi scrisa e ce a raspuns deja omul o data. Limita, documentata in README: preluarea se detecteaza doar in grupuri cu cel putin FIR_PRELUARE_MIN_PARTICIPANTI participanti, deci nu in self-chat si nu in grupul de test. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q4uzvgm7AyJch5WH8QHRhY
This commit is contained in:
@@ -144,3 +144,36 @@ def test_puntea_respinge_mesajul_nu_promitem_ca_a_plecat(rezultat_fara_acoperire
|
||||
inregistrare = json.loads(next((config.STATE_DIR / "escalations").glob("*.json")).read_text())
|
||||
assert inregistrare["notified"] is False
|
||||
assert "503" in inregistrare["notify_error"]
|
||||
|
||||
|
||||
def test_raspunsul_omului_intra_in_fisierul_escaladarii(tmp_path, monkeypatch):
|
||||
"""Perechea eroare + rezolvare, in acelasi fisier.
|
||||
|
||||
Inainte, replica omului traia doar in firul din `conversations/`, care se
|
||||
sterge la TTL: jurnalul pastra intrebarile fara raspuns si niciun raspuns.
|
||||
"""
|
||||
import json
|
||||
import time
|
||||
import config
|
||||
import consumer
|
||||
|
||||
d = config.STATE_DIR / "escalations"
|
||||
d.mkdir(parents=True, exist_ok=True)
|
||||
(d / f"{int(time.time())}-M-TEST-OM.json").write_text(
|
||||
json.dumps({"ref": "M-TEST-OM", "text": "CUI cumparator incorect"}), encoding="utf-8")
|
||||
|
||||
consumer.raspuns_de_om("M-TEST-OM", {"id": "1", "pushName": "Suport"},
|
||||
"Se corecteaza CUI-ul partenerului si se retrimite factura.")
|
||||
consumer.raspuns_de_om("M-TEST-OM", {"id": "2", "pushName": "Suport"}, " ")
|
||||
|
||||
record = json.loads(next(d.glob("*-M-TEST-OM.json")).read_text(encoding="utf-8"))
|
||||
completari = record["completari"]
|
||||
assert len(completari) == 1, "mesajul gol nu are ce cauta in jurnal"
|
||||
assert completari[0]["fel"] == "raspuns_om"
|
||||
assert completari[0]["cine"] == "Suport"
|
||||
assert "retrimite" in completari[0]["text"]
|
||||
|
||||
|
||||
def test_raspunsul_omului_pe_o_escaladare_care_nu_exista_nu_crapa():
|
||||
import consumer
|
||||
consumer.raspuns_de_om("M-NU-EXISTA", {"id": "1"}, "orice")
|
||||
|
||||
Reference in New Issue
Block a user