Stadiul implementării
Directiva §188: o funcționalitate e implementată, e în spatele unui feature flag sau nu e implementată, iar documentația spune care. Pagina asta acoperă suprafața de API și de module: ce endpoint-uri există, ce module sunt conectate, care sunt parțiale.
Golurile de comportament au pagina lor
Lucrurile care arată terminate și nu sunt — predarea media pe SIP, speech-to-speech, analiza de după apel, verificarea furnizorilor, consimțământul la înregistrare, hook-urile de asistent, Stripe — sunt pe Ce nu este construit, cu codul din spatele fiecărei afirmații. Citește-o întâi pe aia dacă decizi dacă să construiești pe o funcționalitate.
Verificat față de repository — tabela de rute, clasele de serviciu, feature flag-urile din seed — la momentul scrierii. Dacă o găsești contrazicând codul, pagina e bug-ul.
Legendă
| Înseamnă | |
|---|---|
| works | Implementat și accesibil prin interfața documentată. |
| flagged | Implementat, în spatele unui feature flag per organizație. |
| partial | O parte funcționează; rândul spune care parte nu. |
| not built | Doar specificat. Nu-ți face planuri pe el. |
API-ul REST
305 operații pe 221 de căi sub /api/v1, toate autentificate cu cheie de API, toate delimitate pe tenant din cheie. Verificat cu php artisan route:list --path=api/v1 și față de docs/api/openapi.json, pe care callagent:openapi:export --check îl ține cinstit.
| Domeniu | Operații | |
|---|---|---|
| Asistenți + versiuni | 14 | works |
| Structured outputs | 7 | works |
| Tools + versiuni | 11 | works |
| Squads | 9 | works |
| Knowledge bases + documente | 11 | works |
| Servere MCP | 10 | works |
| Apeluri, transcrieri, evenimente, metrici, costuri, artefacte | 16 | works |
| Telefonie: numere, conturi, trunk-uri, gateways, DID-uri, rute, ieșire | 47 | works |
| Contact center: cozi, operatori, supervizor, transferuri, extensii, catalog | 60 | works |
| Campanii + liste de suprimare | 24 | works |
| Analytics, board-uri, monitoare, eval-uri, simulări, incidente | 31 | works |
| Facturare: sold, ledger, consum, credite, facturi, metode de plată, planuri | 17 | works |
| Webhooks + jurnal de livrare | 11 | works |
| Platformă: api-keys, client-tokens, clienți, integrări, credențiale, registry | 41 | works |
Două afirmații corectate
Versiuni anterioare ale paginii spuneau că nu există endpoint-uri REST pentru campanii și pentru contact center. Există — 24, respectiv 60 — iar paginile au fost rescrise.
Endpoint-uri care nu există
| Așteptat | Realitate |
|---|---|
POST /api/v1/client/calls | not built Pornirea unui apel din browser prin API. Schimbul de token (POST /client-tokens) e viu; ăsta nu. |
/api/v1/policies | not built CLI-ul validează policies/ local și spune că nu le poate trimite. |
/api/v1/files, /api/v1/storage | not built Destinațiile de storage se configurează doar din dashboard. Scope-ul storage.write există fără nimic în spate. |
/api/v1/chat | not built Există un ChatController în arbore, dar niciun fișier de rute nu îl referă. Scope-urile chat.read / chat.write sunt inaccesibile. |
/api/v1/sms | not built Tipul de tool sms și contractul de trimitere există; nu există endpoint REST. |
Endpoint-uri în afara lui /api/v1
| Cale | |
|---|---|
GET /api/health, /api/health/ready | works neautentificate, prin design |
POST /mcp | works CallAgent ca server MCP — autentificat cu cheie de API |
/api/internal/v1/* | works doar pentru gateway, autentificare separată |
/scim/v2/* | partial doar provizionare de utilizatori; provizionarea de grupuri lipsește |
/telephony/*, /webhooks/billing/stripe | works callback-uri de furnizor |
Lucruri construite, dar neconectate
Cea mai importantă secțiune din pagină. Fiecare dintre ele are cod care arată complet și pe care nu îl apelează nimic, deci funcționalitatea nu se întâmplă la runtime.
| Funcționalitate | Stare |
|---|---|
| Analiza de după apel — rezumat, sentiment, subiecte, evaluare de succes | not built Pipeline-ul și clasa lui de job există, iar finalizatorul rulează redactarea, artefactele, transcrierea și retenția — dar nu dispecerizează niciodată job-ul de analiză, și nu există niciun test care să îl acopere. calls.summary se populează doar dacă gateway-ul îl furnizează în payload-ul de finalizare. Vezi Analytics. |
| Speech to speech | not built speech_to_speech_model e validat, salvat, versionat, publicat și trimis gateway-ului. Sesiunea live de apel nu îl citește niciodată. Există un S2sPipeline complet și nimeni nu construiește vreodată unul. Detalii. |
| Media pe trunk SIP | not built Registration-ul trunk-ului, autentificarea pe IP și admiterea prin ACL sunt dovedite pe un peer SIP real. Predarea media de la FreeSWITCH la gateway nu e construită, deci niciun apel pe trunk nu a ajuns vreodată la un asistent. Detalii. |
| Hook-uri de asistent | partial Sunt declarate paisprezece triggere, convertite și trimise gateway-ului. Sursa gateway-ului nu conține nicio referință la hooks. Rulează doar handoff, în control plane. Detalii. |
| Cinci tipuri de tool | not built bash, computer, text_editor, client_side și custom_provider nu au nicio intrare în maparea către formatul de fir și sunt aruncate în tăcere din fiecare apel. Detalii. |
| Extragerea de structured outputs | not built Aceeași cauză: definițiile, versionarea și stocarea funcționează; extragerea o face pipeline-ul de analiză de mai sus. Vezi Structured outputs. |
| Scorecards pe apeluri vii | partial Motorul de scoring e real și e exersat de simulări. Scorarea unui apel viu depinde de pipeline-ul de analiză. |
| Export de trace-uri de observabilitate (Langfuse, OTLP) | not built Exporterele există; nu le invocă nimic. Gateway-ul o scrie pe față: „tag-urile și sampling-ul se aplică, span-urile nu sunt trimise." Nu-ți face o integrare pe asta. |
Implementări parțiale
| Funcționalitate | Ce merge, ce nu |
|---|---|
| Transcrierea de după apel | partial Lista de furnizori vine din registry, dar Sonix e singurul adaptor. Orice altă alegere nu are niciun client în spate, iar interfața o spune, în loc să eșueze mai târziu. |
| Vector stores pentru knowledge | partial pgvector și custom sunt implementate. Qdrant, Pinecone și Weaviate există ca valori de enum, ca interfața să poată spune „încă nu" cinstit. |
| Embeddings | partial OpenAI e singurul furnizor de embeddings implementat. |
| Protocolul de sesiune din browser | partial Audio-ul și barge-in-ul funcționează cap-coadă. Evenimentele de conversație (transcript, message, state, tool_call, ended …) încă aterizează în gateway. Vezi Browserul. |
| Capabilități de telefonie per carrier | partial Fiecare furnizor își declară propria matrice de capabilități — Twilio marchează trunking-ul SIP partial, furnizorul SIP custom marchează listarea numerelor partial, DIDWW declară trei capabilități. Citește matricea, nu numele furnizorului. |
| SCIM | partial Utilizatorii se provizionează; grupurile nu. |
| Catalogul de integrări | partial Galeria arată doar conectorii a căror maturitate e implemented; restul sunt înregistrați ca neimplementați și ascunși. |
Neimplementat
| Funcționalitate | Notă |
|---|---|
Telefonul web al operatorului (module.web_phone) | Arhitectura e decisă — refolosește transportul WebRTC al Web SDK-ului. Neconstruit. Operatorii înregistrează un dispozitiv SIP. |
| SAML SSO | Serviciul de SSO întoarce „SAML is not implemented in this build" și, intenționat, nu există nicio rută. Blocat pe o bibliotecă de XML-DSig. |
| Provizionare de grupuri SCIM | Vezi mai sus. |
| SMS | Contractul și tipul de tool există; niciun endpoint, niciun adaptor. |
| Canal de chat | Controllerul există, fără rută. |
Implementat
| Funcționalitate | Notă |
|---|---|
| OIDC SSO | works |
| Webhooks | works Singurul modul pe care registrul de flag-uri îl marchează implemented. Semnare, suprapunere la rotire, livrare cel puțin o dată cu id de eveniment stabil, reîncercare programată, jurnal de livrare, retrimitere. |
| Chei de API | works Chei private stocate ca hash, dezvăluire o singură dată, scope-uri, origin-uri, restricții pe asistent și pe IP, rotire cu suprapunere. |
| Storage deținut de client | works S3, R2, Azure Blob, compatibil S3, platformă. Validare reală de scriere/citire/ștergere; custodie per artefact; job de relocare. |
| Înregistrare pe două canale | works Conectată la carrier — RecordingChannels la Twilio, record_stereo la FreeSWITCH. |
| Consimțământ la înregistrare | partial Se poate reda un anunț și starea se reține. Înregistrarea pornește înainte ca anunțul să fie rostit, iar gateway-ul poate raporta doar announced — niciodată granted sau denied, pentru că nimic nu colectează o confirmare. Un refuz nu poate fi respectat. Detalii. |
| Dezvăluire AI (art. 50 din EU AI Act) | not built compliance_plan ajunge la gateway și nu e citit niciodată. Nimic nu face un asistent să spună că e un AI. Pune-o singur în first_message — vezi Dezvăluire AI și consimțământ. |
| Adaptoare de furnizor | partial verified înseamnă că formatul de pe fir a fost revizuit față de documentația vendorului. Niciun adaptor nu a fost rulat pe un vendor live în CI. 19 id-uri de voce, 16 adaptoare, 2 marcate verified. Detalii. |
| Carrieri de telefonie | partial Nouă id-uri, șase adaptoare, și doar Twilio are o cale de media funcțională către pipeline-ul AI. Telnyx declară media_streams și nu are niciun constructor de media stream. Matrice. |
| Contabilitate de costuri | works …și cinstită: un preț neverificat produce un rând cu cost = 0 și priced: false, nu o ghiceală. |
| Depozit de analytics | works Rollup-uri materializate plus o cale brută pentru percentile, funnels și filtre pe mai multe dimensiuni. percentile_cont real. |
| Monitoare și incidente | works Evaluate din cinci în cinci minute. |
| Workbench de furnizori | works …cu cifrele marcate: latența e valoarea tipică publicată de vendor, calitatea e un indice editorial, costul e derivat. Vezi Furnizori. |
| Jurnal de audit | works Doar cu inserări, cu o listă de excludere, ca să nu se scrie niciodată credențiale. |
| Multi-tenancy | works Scope global plus un deținător explicit de context; trait-ul aruncă în loc să scrie un rând fără organizație. |
Despre registrul de feature flags
FeatureFlagSeeder reține o maturitate pentru fiecare modul și e cel mai apropiat lucru de o listă oficială. Tratează-l ca documentație a intenției, nu ca pe un comutator impus — nimic din afara resursei de flag-uri nu citește tabela ca să restricționeze navigația. E și în urma realității pe alocuri: module.mcp_server, module.web_sdk și module.cli sunt toate marcate not_implemented și toate trei sunt construite.
Blocat pe credențiale, nu pe cod
Complet în cod, așteaptă doar conturi:
- Un cont Twilio, un număr cumpărat și un URL public de tunel — apeluri PSTN reale.
- Chei Deepgram / OpenAI / ElevenLabs — măsurarea reală a latenței furnizorilor.
- Chei de test Stripe — fluxul de cumpărare pay-as-you-go. Stripe nu a fost contactat deloc, nici live, nici test: fiecare test de Stripe conduce SDK-ul real pe fixture-uri conservate.
- Un trunk SIP sau un PBX de test — calea de acceptanță SIP.
- Un cont Sonix — transcrierea de după apel.
Setul ăsta de documentație
| Bucată | Cum e produsă |
|---|---|
| Ghiduri, concepte și pagini de platformă | Scrise de mână, cu codul în față. |
| Referință API | Generată din docs/api/openapi.json de scripts/generate-api-reference.mjs. 305 operații, 39 de resurse, 63 de scheme. |
| Scheme | Generate din același document. |
| Referință CLI | Generată din manifestul de comenzi din care e construit binarul. |
| Tipuri SDK | Generate din apps/web-sdk/src cu TypeDoc. |
| Coduri de eroare · Tipuri de eveniment | Transcrise din @callagent/contracts, oglindit în PHP cu un test de drift. |