Dezvăluire AI și consimțământ
Două obligații sunt confundate una cu alta, iar CallAgent le tratează diferit — pe una parțial, pe cealaltă deloc. Citește asta înainte să presupui că vreuna e acoperită.
| Obligație | Aproximativ | Ce face CallAgent |
|---|---|---|
| Să îi spui apelantului că vorbește cu o mașină | Articolul 50 din EU AI Act | nimic Nicio funcționalitate nu face asta. |
| Să îi spui apelantului că apelul e înregistrat | GDPR, ePrivacy, regimuri cu consimțământul ambelor părți | un anunț Poate fi redat. Un refuz nu poate fi respectat. |
Pagina asta nu e consultanță juridică. E o descriere exactă a ce face software-ul, ca sfatul juridic pe care îl primești să fie dat despre lucrul corect.
Dezvăluirea AI
Nimic din CallAgent nu face un asistent să dezvăluie că e un AI.
compliance_plande pe un asistent — inclusividentity_disclosure_required— e validat, salvat, versionat, publicat și inclus în snapshot-ul pe care îl primește voice gateway-ul. Gateway-ul nu îl citește niciodată.- Primul mesaj e validat pentru lungime și sintaxă de template. Nicio regulă de conținut nu cere o dezvăluire și nimic nu verifică existența uneia.
- Singura dezvăluire conform articolului 50 din tot codul e scrisă hardcodat în demo-ul de vânzări al CallAgent, care refuză să inițieze un apel dacă textul dezvăluirii e gol. Mecanismul acela nu e expus asistenților clienților.
Nu există nici logică pe jurisdicții. Nimic nu se ramifică pe țara apelantului ca să decidă ce trebuie spus.
Fă-o singur, așa
Pune propoziția în first_message, fă-o primul lucru rostit și oprește posibilitatea de a fi vorbită peste:
{
"first_message_mode": "assistant_speaks_first",
"first_message": "Bună ziua, sunt un asistent automat de la Example SRL. Cu ce vă pot ajuta?",
"first_message_interruptions_enabled": false
}Trei detalii care contează:
first_message_modetrebuie să fieassistant_speaks_first. Cuassistant_waits_for_usernu se spune nimic până nu vorbește apelantul, iar cuassistant_speaks_first_with_model_generated_messagesalutul îl scrie modelul — ceea ce înseamnă că dezvăluirea e o sugestie, nu o garanție.first_message_interruptions_enabled: false— valoarea implicită, și acolo să rămână. Apelanții vorbesc frecvent peste prima secundă a unui apel conectat. Dacă barge-in-ul e pornit pe salut, dezvăluirea e abandonată la jumătatea cuvântului.- Pune-o în
first_message, nu însystem_prompt. Un system prompt e o instrucțiune pe care modelul o poate urma sau nu.first_messagee rostit cuvânt cu cuvânt.
Pentru o campanie de ieșire se aplică același lucru asistentului campaniei. Nu există un câmp de dezvăluire la nivel de campanie.
O variabilă care nu se rezolvă devine un șir gol
{{company_name}} fără nimic legat produce „Bună ziua, sunt un asistent automat de la . Cu ce vă pot ajuta?" — dezvăluirea supraviețuiește, numele firmei nu. Dacă pui variabile în salut, setează template_strictness: "strict", ca o variabilă nelegată să fie o eroare la publicare, nu o gaură într-un apel. Apoi verifică cu POST /assistants/{id}/render-prompt, care întoarce o listă missing.
Consimțământ la înregistrare
Ce se poate întâmpla
{
"recording_consent_plan": {
"required": true,
"mode": "announcement",
"prompt": "Acest apel este înregistrat pentru calitate și instruire.",
"regions": ["RO", "DE"]
}
}mode e una dintre:
mode | Efect |
|---|---|
none | Implicit. Nu se spune nimic. |
announcement | Textul din prompt e rostit înainte de salut. |
assistant_spoken | Asistentul îl spune cu vocea lui. |
custom_audio | Se redă fișierul audio de la audio_url. |
Politica de la nivel de organizație are propriile valori implicite, peste care se suprapune planul asistentului: înregistrare pornită, dual_channel, politică de consimțământ none și, la refuz, continue.
Ce nu se poate întâmpla
Trei lucruri în jurul cărora trebuie să îți proiectezi soluția
1. Înregistrarea pornește înainte ca anunțul să fie rostit. Recorderul e construit și pornit, redarea începe, și abia apoi se redă notificarea. Primele secunde de audio — inclusiv anunțul însuși — sunt deja scrise.
2. Un refuz nu poate fi respectat. Gateway-ul raportează control plane-ului exact o stare de consimțământ: announced. Nu raportează niciodată granted sau denied, pentru că nu există niciun mecanism de confirmare — niciun prompt DTMF, niciun matcher de expresii. on_refusal e purtat în configurația apelului, nu e citit și nu se poate declanșa. Control plane-ul are o metodă care oprește înregistrarea la un refuz; nimic dintr-un apel real nu o apelează.
3. regions e documentație. Nimic nu se ramifică pe el. Serviciul care calculează planul spune în propriul comentariu că nu determină dacă o înregistrare e legală.
Deci citirea onestă a lui consent_state de pe un apel:
| Valoare | Ce înseamnă |
|---|---|
not_required | Politica nu a cerut nimic. |
announced | S-a redat o notificare. Nu că a fost cineva de acord. |
pending | Planul voia o notificare și încă nu a fost redată. |
granted / denied | Accesibile prin API-ul propriu al control plane-ului. Nu sunt produse niciodată de un apel viu. |
Dacă obligația ta e „să informezi", un anunț o satisface. Dacă obligația ta e „să obții și să respecți consimțământul", CallAgent nu face asta azi — rezolvă înainte ca apelul să ajungă la asistent, sau nu înregistra.
Cum oprești complet înregistrarea
Controlul sigur e să nu înregistrezi:
{ "artifact_plan": { "recording_enabled": false } }sau per număr:
{ "recordingMode": "disabled" }sau per coadă, cu recording_policy: "disabled".
Redactarea nu e redactare de audio
Redactarea PII rulează o singură dată, la finalizare, peste text: conținutul mesajelor, transcrierea, rezumatul și payload-urile de evenimente. Categoriile sunt card (validat Luhn), national_id (SSN american, CNP românesc, NINo britanic), email, phone, iban și tipare custom pe care le dai tu. E oprită implicit; pornirea ei aduce implicit card și national_id.
artifact_plan.pii_redaction.redact_recording există ca un câmp. Audio-ul înregistrării nu e modificat niciodată. Dacă un apelant citește un număr de card cu voce tare, el e în fișierul WAV.
Ca să nu ajungă deloc în storage, folosește zero data retention sau nu înregistra.
Zero data retention
Cel mai puternic comutator disponibil. Cu zero_data_retention pe politica de retenție a organizației:
- conținutul mesajelor, argumentele și rezultatele tools-urilor și timpii pe cuvânt sunt golite;
- payload-urile evenimentelor sunt golite, rândurile de eveniment rămân;
- transcrierea, rezumatul, analiza, structured output-ul și subiectele apelului sunt golite;
- artefactele de înregistrare sunt șterse; rândul de artefact rămâne, marcat
purged, ca dovadă că a existat ceva.
Ce se păstrează intenționat: id-ul apelului, statusul, durata, cele două numere E.164, costurile, metricile, leg-urile și jurnalul de audit. Facturarea și rezolvarea disputelor au nevoie de ele, și niciunul nu e conținut de conversație.
Cu zdr_delay_minutes: 0 asta rulează inline, la finalizarea apelului, nu la job-ul de noapte.
Audit
Fiecare acțiune de supervizor — listen, whisper, barge, force-state, force-logout, end — scrie un rând de audit la succes, la refuz și la excepție. O încercare nu e niciodată invizibilă.
Jurnalul de audit e doar cu inserări și are o listă de excludere, așa că în el nu se scriu niciodată credențiale.
Ce ai de făcut
- Pune dezvăluirea AI în
first_message, cu întreruperile oprite. - Decide dacă un anunț îți satisface obligația de înregistrare. Dacă nu, nu înregistra.
- Pornește redactarea PII dacă transcrierile se păstrează, și ține minte că nu atinge audio-ul.
- Setează retenția pe categorii, sau zero data retention, în loc să te bazezi pe ștergere manuală.
- Citește Ce nu este construit înainte să scrii ceva din toate astea într-un DPA.
Mai departe
- Înregistrare și storage — unde ajunge audio-ul și cine îl deține.
- Securitate — chei, tenancy, audit.