Sari la conținut
megapromotingHai să discutăm

aichat.md — dirijarea interacțiunilor

Ce se întâmplă cu un mesaj, de la secunda în care ajunge la noi până la momentul în care cineva îl marchează rezolvat.

Un asistent care răspunde bine e ușor de arătat într-un demo. Ce e greu de arătat, și ce contează de fapt, e traseul: cum ajunge mesajul, ce se face ca să nu se răspundă de două ori, cât se așteaptă înainte de a răspunde, de unde se ia informația, ce unealtă se cheamă, unde se oprește agentul și cine e chemat în loc. Mai jos e traseul real, cu numerele din cod. Inclusiv partea de comentarii, care se comportă complet diferit față de un mesaj privat — și trebuie să se comporte diferit.

Traseul

Nouă etape, în ordinea în care se întâmplă

  1. 01

    1. Intrarea, pe canalul pe care a scris omul

    Șase căi de intrare, cu mecanisme diferite. Messenger, Instagram Direct și WhatsApp Cloud API vin prin webhook, pe același punct de intrare, ramificat după tipul obiectului. Widgetul de pe site intră direct pe o rută proprie. Telegram nu vine prin webhook, ci prin interogare continuă. Iar 999.md nu are nici webhook, nici interogare continuă — are un ceas care se uită la fire la fiecare douăzeci de secunde.

    Fiecare recepție se scrie într-un jurnal de evenimente, cu starea semnăturii criptografice și cu conținutul brut, înainte ca ceva să fie procesat. Motivul e simplu: când un mesaj „nu a ajuns”, prima întrebare e dacă a ajuns la noi sau nu, iar răspunsul trebuie să fie un rând într-un tabel, nu o presupunere. Rutarea canal → agent se face printr-o tabelă de corespondență între identificatorul paginii și serviciu, deci același cont poate purta mai mulți agenți pe canale diferite.

  2. 02

    2. Dedublarea, înainte de orice altceva

    Identificatorul mesajului se pune într-o cheie Redis cu scriere condiționată — dacă cheia există deja, mesajul e duplicat și se oprește aici. Durata de viață a cheii e de 24 de ore. Dacă Redis nu răspunde, se trece pe o memorie locală cu prag de curățare la 5.000 de intrări, deci dedublarea nu dispare, doar devine mai scurtă de memorie.

    Fereastra a fost de 120 de secunde până pe 10 iulie 2026, când a fost urcată la 24 de ore după un incident de răspunsuri duplicate. Comentariul care explică schimbarea e scris lângă valoare, în cod. Tot aici se aruncă stickerele și butonul de „like”, care ar deveni altfel întrebări la care agentul ar încerca să răspundă.

  3. 03

    3. Tamponul — trei mesaje scrise la rând devin o singură întrebare

    Oamenii nu scriu un paragraf. Scriu „bună”, apoi „am o întrebare”, apoi întrebarea. Un asistent care răspunde la fiecare rând pe rând e enervant și pare prost. De aceea mesajele se strâng într-un tampon pe perechea expeditor–pagină, iar cronometrul se resetează la fiecare mesaj nou. Când tace omul, se răspunde o dată, la tot.

    Pe Messenger și Instagram, așteptarea implicită e de 15 secunde; pe WhatsApp, de 5. Se acceptă maximum cinci mesaje în tampon — al șaselea îl înlocuiește pe ultimul — iar textul concatenat se taie la 2.000 de caractere. Valoarea așteptării e per agent, nu globală: se citește din configurația agentului și se poate coborî la zero pentru un scenariu unde viteza contează mai mult decât coerența. Chiar înainte de trimitere se reverifică în bază dacă între timp firul a fost pus pe pauză — pentru că în cele 15 secunde se poate să fi intrat un om.

  4. 04

    4. Citirea din sursele tale

    Întrebarea se transformă într-un vector și se caută în fragmentele pe care le-ai încărcat. Căutarea e hibridă: se combină potrivirea pe cuvinte cu apropierea vectorială, în proporție de trei la șapte. Se încarcă până la 300 de fragmente candidate din baza de cunoștințe a agentului, se calculează scorul combinat pentru fiecare, și se păstrează cele mai bune — cinci pe canalele de mesagerie, zece pe widget.

    Numărul de fragmente e configurabil per agent, între 1 și 20. Fragmentele se taie la indexare la 1.200 de caractere. Selecția finală se face după rang, nu după un prag absolut de similaritate: se ordonează după scorul combinat și se iau primele. Configurația are și un câmp de prag, dar în calea de căutare filtrul efectiv păstrează orice fragment cu scor peste zero și taie după poziție — o spunem pentru că e diferența dintre ce scrie în panou și ce face codul. Fiecare interogare se poate jurnaliza cu fragmentele întoarse și scorurile lor, ca să se poată răspunde la „de ce a spus asta”.

  5. 05

    5. Uneltele — când agentul trebuie să facă ceva, nu doar să spună

    Dacă răspunsul cere o acțiune, modelul cheamă o unealtă. O unealtă e de trei feluri: un webhook către sistemul tău, un fragment de cod rulat izolat, sau una încorporată în platformă. Bucla model–unealtă–model are maximum cinci runde, în ambele motoare. După cinci, se oprește și se răspunde cu ce are.

    Timpul maxim implicit al unei unelte e de 15 secunde. Uneltele încorporate care există azi: căutare în pagină web, ora curentă, calculator, scriere într-o foaie de calcul Google, notificare de lead în Telegram, trimitere de SMS, șase unelte de programări pentru un sistem extern de rezervări, și trei pentru catalogul unui magazin — căutare, potrivire și fișa produsului. Catalogul citește live, cu memorie tampon de zece minute, până la 30 de pagini și timp maxim de 20 de secunde. Există un set de unelte marcate ca interne, al căror rezultat nu ajunge niciodată în textul văzut de client.

  6. 06

    6. Răspunsul, cu istoricul în față

    Modelul primește întrebarea, fragmentele găsite, rezultatele uneltelor și istoricul conversației — ultimele 25 de mesaje pe calea principală, 50 pe motorul nou. Apelul are timp maxim de 120 de secunde, cu două reîncercări; apelul de după unelte, 90 de secunde. Răspunsul pleacă pe canalul de unde a venit întrebarea, în limba în care a fost pusă.

    Motorul nou de agenți se pornește prin comutator, per agent, per cont sau global — nu se schimbă totul deodată. Așa se poate compara comportamentul vechi cu cel nou pe același trafic, ceea ce e singurul mod onest de a spune că ceva e mai bun.

  7. 07

    7. Predarea către un om

    Firul are o stare: bot sau om. Trecerea se poate face în patru feluri. Prin cuvinte-cheie — o listă de șaptesprezece expresii în română, engleză și rusă, cuvintele singure comparate pe graniță de cuvânt, expresiile pe potrivire în text. Prin frustrare — o a doua listă, tot de șaptesprezece. Prin repetiție — aceeași întrebare pusă de trei ori în ultimele zece mesaje, numărată doar pentru mesaje mai lungi de zece caractere. Sau prin decizia modelului, care poate cere predarea cu un marcaj special.

    Modul e per agent și e oprit implicit — se alege între „oprit”, „pe cuvinte-cheie” și „inteligent”. Când se declanșează: firul trece pe „așteaptă om”, se scrie momentul, clientul primește un mesaj de confirmare în limba lui, iar agentul tace. Nu răspunde în paralel, nu completează, nu-și cere scuze. Tace, și atât. Există și protocolul oficial de predare al Meta, care mută controlul firului către căsuța paginii; canalul de rezervă continuă să salveze mesajele chiar și când controlul e la om, ca istoricul să nu aibă gaură.

  8. 08

    8. Când operatorul răspunde de pe pagină, agentul se oprește singur

    Dacă un om scrie clientului direct din interfața Meta, platforma vede ecoul acelui mesaj și pune firul pe pauză automat, fără ca cineva să apese ceva. Durata implicită e de 30 de minute, configurabilă între cinci minute și șapte zile. E cazul cel mai ușor de scăpat din vedere când se proiectează un asistent: nimeni nu apasă un buton de preluare, omul pur și simplu răspunde, iar dacă platforma nu observă asta, clientul primește două voci deodată.

    Revenirea are trei căi. Reactivarea automată după 30 de minute fără răspuns uman — o buclă verifică la fiecare minut și reactivează în loturi de cel mult 50 de fire, curățând și memoria conversației ca agentul să nu continue o discuție pe care n-a purtat-o. Expirarea pauzei, verificată separat. Și butonul din panou: preluare, rezolvare, întoarcere la bot, oprire completă a botului.

  9. 09

    9. Închiderea — și ce nu se închide singur

    Firul se marchează rezolvat manual, din panou, cu note de rezolvare și cu un mesaj de sistem scris în istoric. Nu există închidere automată pe inactivitate: un fir lăsat deschis rămâne deschis. Am ales să spunem asta în loc să lăsăm impresia că se face curat singur.

    Ce se închide totuși singur sunt două lucruri: reactivarea agentului după 30 de minute, descrisă mai sus, și escaladările trimise în Telegram, care după 30 de minute fără răspuns se marchează ca expirate și returnează firul agentului, cu motivul scris. Peste toate rulează un indicator de timp de răspuns: peste o oră devine avertisment, peste patru ore devine depășire. Colorează, nu închide.

Asistentul magazinuluiSe potrivește cu aparatul meu?Spune-mi modelul aparatului.Verific variantele din catalog.Catalog conectat · informație verificatăEchipa poate prelua conversația.
Schemă explicativă · mesaj, context, acțiune, predare

Comentarii

Comentariile: de ce nu sunt mesaje și de ce nu se tratează ca mesaje

Un mesaj privat are un singur cititor. Un comentariu are toți cititorii paginii, inclusiv concurența, inclusiv cineva care caută un motiv de scandal. Un răspuns bun în privat poate fi un dezastru în public — de exemplu un preț, o disponibilitate, sau confirmarea că cineva chiar e clientul vostru. De aceea comentariile au traseu separat, reguli separate și o valoare implicită care înclină spre discreție.

Cum ajunge un comentariu în sistem

Pagina se abonează la câmpuri diferite pe cele două rețele: pe Facebook la fluxul paginii, pe Instagram explicit la comentarii și la comentariile din transmisiuni live. Ajung pe același punct de intrare ca mesajele, dar pe o ramură separată, recunoscută după prezența unei liste de schimbări în loc de una de mesaje. Formatul diferă între rețele și se detectează separat pentru fiecare. Se citesc și comentariul-părinte, ca să se știe dacă e un răspuns la alt comentariu, și postarea sau materialul pe care a apărut.

Doar comentariile noi declanșează ceva

Meta trimite același eveniment pentru mai multe acțiuni. Numai adăugarea unui comentariu pornește agentul. Editarea, ștergerea, ascunderea și dezascunderea se jurnalizează și se opresc acolo. Schimbarea numărului de aprecieri se ignoră fără urmă, pentru că altfel jurnalul ar fi zgomot pur.

Patru filtre înainte ca agentul să vadă textul

Comentariile paginii înseși se aruncă — altfel agentul și-ar răspunde singur, la nesfârșit. Comentariile deja procesate se aruncă după identificatorul unic al comentariului, care are constrângere de unicitate în bază. Comentariile goale, cele de cel mult două caractere și cele formate numai din emoji se aruncă. Iar textele care conțin numere de telefon lungi sau adrese web trec printr-un filtru de spam cu patru tipare și se opresc, marcate ca atare.

Public sau privat: valoarea implicită e privat

Fiecare agent are patru comutatoare separate, două pentru Facebook și două pentru Instagram: răspuns public pornit sau oprit, răspuns privat pornit sau oprit. Peste ele stă un mod general cu trei poziții — oprit, automat, sau cu aprobare. Când configurația lipsește sau nu se poate citi, valoarea de rezervă din cod nu e „răspunde public”, ci „nu răspunde public, răspunde în privat”. E o alegere deliberată: o eroare de configurare nu are voie să scoată text pe peretele public al cuiva.

Agentul oprit înseamnă comentarii oprite

Dacă asistentul e arhivat, inactiv, dezactivat sau pus pe pauză, sau dacă botul e oprit din contul clientului, modul comentariilor devine automat „oprit”, indiferent ce scrie în comutatoarele de comentarii. Un singur loc de oprit, nu patru de ținut minte.

Ce nu se răspunde public, și cât de tare e regula

Instrucțiunea dată modelului pentru un răspuns public e explicită: maximum două propoziții, ton scurt și prietenos, invitație la mesaj privat pentru detalii, și interdicția de a da informații detaliate sau prețuri în public. Peste ea, o limită dură: răspunsul public se taie la 300 de caractere. Peste ambele, textul liber pe care îl scrieți voi ca instrucțiuni proprii, separat pentru public și pentru privat. Spunem cinstit cât de tare e regula: e o instrucțiune de prompt plus o limită de lungime, nu un filtru determinist care ar putea garanta că un preț nu apare niciodată. Când garanția trebuie să fie tare, se oprește răspunsul public și se lasă doar cel privat, sau se trece pe modul cu aprobare.

O singură dată la fiecare 30 de secunde, pe aceeași postare

Răspunsul public are un contor pe postare: cel mult unul la 30 de secunde. Motivul e ce se întâmplă când o postare prinde — treizeci de comentarii în două minute, iar pagina se umple de răspunsuri identice ale unui robot, sub fiecare. Contorul se curăță singur, păstrând ultimele o mie de postări urmărite.

Instagram nu permite mesaj privat la un sub-comentariu

E o regulă a platformei, nu a noastră, și e verificată în trei locuri diferite din cod, pe toate cele trei căi prin care s-ar putea ajunge la un mesaj privat. Când comentariul are un părinte și rețeaua e Instagram, trimiterea în privat se sare și se scrie în jurnal motivul exact. Nu se încearcă și nu se eșuează în tăcere — se sare, explicit.

De la comentariu la conversație

Trecerea se face prin mecanismul oficial: mesajul privat se trimite folosind identificatorul comentariului ca destinatar, nu identificatorul persoanei. Din acel moment există un fir de mesaje normal, cu toate regulile de mai sus — tampon, surse, unelte, predare către om. Firul se marchează ca provenit din comentarii, iar comentariul primit se salvează în istoricul conversației cu un tip propriu, ca să se vadă de unde a pornit totul.

Modul cu aprobare: agentul scrie, omul publică

Când modul e „cu aprobare”, răspunsul generat nu pleacă. Se salvează ca ciornă, în așteptare, și apare într-o coadă în panou, cu numărător. De acolo se aprobă sau se respinge, bucată cu bucată. Publicarea aprobată trece printr-o punte internă protejată cu o comparație de semnătură în timp constant — un răspuns aprobat nu poate fi injectat din afară.

Ce poate face un om, manual

Ascunderea unui comentariu, cu mecanismul potrivit fiecărei rețele, și marcarea stării în bază. Ștergerea, cu marcaj de șters. Ascunderea în masă, cel mult 25 de comentarii într-un lot. Închiderea comentariilor pe un material Instagram. Și ascunderea comentariilor dintr-o transmisiune live, pe rută separată. Sunt acțiuni manuale, nu automate. Nu există o listă de cuvinte interzise care să ascundă comentarii singură, și nu pretindem că există.

Predarea

Când agentul nu mai are ce să spună

Escaladarea nu e un eșec al agentului. E funcția lui cea mai importantă, pentru că singurul lucru mai rău decât un asistent care nu știe e un asistent care nu știe și continuă să vorbească. Ce urmează e cum arată predarea, cine e anunțat, ce se întâmplă cu răspunsul omului și cum revine agentul.

Cardul care pleacă în grupul de Telegram

O unealtă încorporată trimite cazul într-un grup, cu antet care spune din prima ce fel de caz e: urgență, cerere de operator, semnalare de abuz, escaladare de client nemulțumit, lead nou, sau conversație nouă. Tipul se detectează din text, cu tipare separate pentru fiecare. Mesajul clientului se atașează verbatim pe card — omul care preia vede exact ce a scris clientul, nu un rezumat.

Preluarea e o cursă, și e tratată ca o cursă

Cardul are două stări: deschis și blocat. Preluarea se face cu o scriere condiționată care schimbă starea numai dacă era încă deschisă, iar codul verifică efectiv câte rânduri s-au modificat. Doi operatori care apasă în aceeași secundă nu preiau amândoi. Cel de-al doilea află că a fost preluat, nu ajunge să scrie în paralel.

Răspunsul operatorului se rescrie în limba clientului

Operatorul scrie în grup, în limba lui și în stilul lui, uneori telegrafic. Înainte de livrare, textul se rescrie în limba în care vorbește clientul și în tonul agentului, fără să se adauge fapte noi. Ce spune operatorul rămâne ce se transmite; se schimbă doar forma. Rutarea răspunsului către conversația potrivită se face după mesajul la care s-a răspuns, iar dacă lipsește, după singurul caz blocat de acel operator — și se refuză explicit dacă are două, în loc să ghicească.

Cine e anunțat, și ce nu mai e anunțat

Panoul primește o notificare în timp real prin conexiune permanentă. Pauzele declanșate de reguli trimit înștiințare pe email sau în Telegram, la alegere — sunt singurele două canale acceptate în cod. Spunem și ce nu mai merge: notificarea prin email pentru un fir preluat de om a fost dezactivată intenționat în iulie 2026, iar ruta internă a rămas ca răspuns gol. Dacă vă bazați pe emailul acela, nu vine. Preferăm să aflați asta aici.

Regulile de pauză, dincolo de cuvinte-cheie

Se pot scrie reguli care pun firul pe pauză la apariția unui număr de telefon, a unei adrese de email, a unui set de cuvinte de până la o sută, sau la o cerere explicită de om. Peste ele, două tipuri evaluate de model: intenție și sentiment. Durata pauzei e între un minut și șapte zile; valoarea zero înseamnă pauză până când o ridică cineva manual.

Fiecare schimbare de mână se scrie

Există un jurnal de preluări cu șase acțiuni distincte: preluare de om, preluare de bot, reactivare automată, preluare de operator, eliberare de operator și reluare de către agent. Nu e o coloană de stare care se suprascrie — e un istoric. Când cineva întreabă „cine vorbea cu clientul la ora aia”, răspunsul e un rând, nu o reconstituire.

Ce nu există, ca să nu vă bazați pe ce nu e

Nu există dispecerizare automată către curieri sau echipe de teren; am căutat în tot codul și nu e. Nu există închidere automată a conversațiilor pe inactivitate. Nu există listă globală de cuvinte interzise pentru comentarii. Ce există sunt cele patru declanșatoare de predare, escaladarea în Telegram cu preluare atomică, regulile de pauză, și reactivarea automată la 30 de minute.

Fiecare afirmație de pe această pagină a fost citită din codul platformei — 66 citări cu fișier și linie, păstrate în depozitul nostru. Le parcurgem împreună, la cerere.