Vii de la un PBX
Dacă rulezi Asterisk, FreePBX, 3CX, Genesys sau un UCaaS găzduit, mare parte din CallAgent îți va fi familiară și câteva lucruri nu. Pagina asta face corespondența între ce știi și ce e aici, și spune pe față unde corespondența se rupe.
Corespondența
| Lumea ta | CallAgent | Observație |
|---|---|---|
| Trunk / peer | Trunk SIP + unul sau mai multe gateways | Un trunk e relația; un gateway e un host. Mai multe gateways dau failover. |
Peer din sip.conf / pjsip.conf | Un rând de trunk; XML Sofia generat per gateway | GET /telephony/sip-trunks/{id}/config arată XML-ul generat înainte să îl aplici. |
| Context de dialplan | Rute de intrare, DID-uri, destinații de număr | O rezolvare ordonată, nu extensii potrivite pe tipare. |
Tipar exten => | Un DID cu pattern și match_type, sau o rută de intrare | |
| Extensie | Extensie | Aceeași idee. Dispozitivele SIP se înregistrează pe ea. |
Coadă (queues.conf) | Coadă | Nouă strategii de distribuție. |
ringall / leastrecent / fewestcalls / rrmemory | fifo / longest_idle / least_calls / round_robin | Apropiate, dar nu identice — citește tabelul de strategii. |
| Penalty de agent | penalty de membru al cozii | Aceeași semantică: prima cheie de sortare în fiecare strategie. |
| Timp de wrap-up | wrap_up_seconds | Un termen limită pe server, plus o disposition obligatorie. |
| IVR / auto-attendant | Flux IVR, 16 tipuri de nod | Un graf publicat, versionat. |
| Condiție de timp | Condiție de timp | Orar săptămânal, sărbători, suprascriere manuală. |
| Ring group | Ring group | |
ChanSpy | Supervizor listen / whisper / barge | Audio-ul nu e dovedit. |
| MoH | music_on_hold_id pe o coadă | |
| Căsuță vocală | Căsuță vocală | Mesaje de întâmpinare, transcriere, notificare, retenție. |
| CDR | Tabela calls și GET /calls | Plus evenimente, metrici, costuri și artefacte per apel. |
| AMI / ARI | API-ul REST și webhooks | Bazat pe evenimente, semnat, cu reîncercări. |
| Script AGI | Un tool pe care îl apelează modelul, sau un hook pe număr | |
| Punte de conferință | Cameră de conferință | Protejată cu PIN, opțional înregistrată, cu moderator. |
Cele patru lucruri cu adevărat diferite
1. Nu există dialplan
Un dialplan de PBX e un program. Rutarea din CallAgent e o căutare fixă, ordonată:
- o rută de intrare care se potrivește pe număr, după prioritate;
- hook-ul dinamic al numărului, dacă e activat;
- destinația statică a numărului;
- pentru un apel pe trunk SIP, destinația de rezervă a trunk-ului.
Prima potrivire câștigă. Fără Goto, fără variabile, fără GotoIf.
Dacă ai nevoie de logică — rutare după istoricul apelantului, după starea din CRM, după orice — asta e hook-ul dinamic: CallAgent întreabă serverul tău în momentul apelului și tu răspunzi cu o destinație. Are un timeout de 200–3000 ms și o rezervă explicită (static, reject sau voicemail) pentru când ești lent. Alege rezerva aia deliberat; e diferența dintre un sistem iertător și un apelant care aude tăcere.
Un număr care nu se potrivește cu nimic e respins, nu trimis la o destinație implicită. Rutarea unui apel pe care nu îl poți identifica spre un asistent implicit e exact felul în care apelantul unui tenant ajunge la agentul altui tenant.
2. Legul AI și legul uman sunt același apel
Nu există „IVR-ul a predat cozii și acum e alt apel". Asistentul și operatorul sunt leg-uri ale aceleiași înregistrări, iar apelul trece prin stări: assistant_speaking → human_queue → human_connected.
Practic:
- Apelantul nu e sunat niciodată din nou la predare. Legul de carrier existent e redirecționat pe loc într-o conferință, sau se adaugă un al doilea participant la aceeași sesiune de media vie. Nu sună telefonul nimănui de două ori și nu apare un al doilea apel pe factură.
- O singură transcriere acoperă ambele jumătăți, cu un rând de cusătură
handoffacolo unde s-a produs schimbarea. - Ecranul operatorului are deja transcrierea, rezumatul și motivul.
3. Configurația e versionată și publicată
Un PBX aplică o schimbare când faci reload. CallAgent are un draft și o versiune publicată, iar un apel fixează versiunea cu care a pornit. O editare a asistentului în timpul unui apel nu poate ajunge la apelul acela.
Asta înseamnă:
publishe un pas real. O modificare nepublicată nu face nimic.GET /assistants/{id}/validateînainte de publicare prinde o configurație care ar eșua pe un apel viu.- Două apeluri cu același
config_hashchiar au rulat aceeași configurație, ceea ce face posibilă investigarea unui incident.
4. Latența e produsul
Un PBX se preocupă de jitter și de pachete pierdute. Un agent vocal se preocupă de ele și de pauza dintre momentul în care apelantul termină o propoziție și momentul în care aude un răspuns. Pauza aia e făcută din transcriere, endpointing, un apel de model și sinteză, iar CallAgent le cronometrează separat: GET /calls/{id}/metrics.
Setarea care schimbă cel mai mult cum se simte un apel nu e codecul. E endpointing-ul și barge-in-ul. Alocă-i o după-amiază.
Ce o să îți lipsească
Cinstit, înainte să te angajezi:
| Un trunk SIP care duce un apel la un asistent | Registration-ul, autentificarea pe IP și admiterea prin ACL funcționează și sunt dovedite pe un peer de laborator. Predarea media de după nu e construită, deci niciun apel pe trunk nu a ajuns vreodată la un asistent. Twilio e singurul carrier dovedit cap-coadă. Detalii. |
| Un softphone în browser | Specificat, arhitectura decisă, neconstruit. Operatorii înregistrează un dispozitiv SIP. |
| Transfer warm pe un carrier găzduit | Transferul consultativ folosește comenzi FreeSWITCH. Pe un apel Twilio devine o intrare în conferință, iar o consultare privată între doi operatori nu e oferită, în loc să fie simulată. |
| Ajungerea la o extensie internă de la un carrier găzduit | Refuzată cu extension_not_reachable_from_carrier, în afară de cazul în care extensia are o destinație de redirecționare permanentă. |
| Audio de supervizor pe care să te bazezi | Poarta de permisiuni și urma de audit sunt dovedite. Că audio-ul chiar se conectează, nu. |
| O portiță de scăpare în stil dialplan | Hook-ul dinamic e portița, și e un apel HTTP cu un plafon de 3 secunde. |
| G.729 | Nu e în lista implicită de codec-uri și nu e în setul de module FreeSWITCH livrat. |
| SAML SSO | Neimplementat; OIDC e. |
O migrare care funcționează azi
Dat fiind starea SIP de mai sus, calea care chiar duce un apel la un asistent e:
- Păstrează-ți PBX-ul. Nu-l migra.
- Ia un număr pe Twilio, sau portează unul.
- Îndreaptă-l spre un asistent CallAgent.
- Dă-i asistentului un tool
transferCallcu destinațiaexternal— numărul existent al PBX-ului tău. Escaladarea se întoarce la oamenii pe care îi ai deja. - Măsoară.
GET /calls/{id}/metricsșiGET /calls/{id}/costsper apel. - Mută mai multe numere când cifrele o justifică.
Așa capeți ușa din față cu AI fără să pariezi telefonia pe o cale de media care încă nu există.
Dacă vrei și contact center-ul, ține operatorii în CallAgent, cu dispozitive SIP înregistrate pe extensii, iar predarea rămâne în aceeași înregistrare de apel.
Numere și identitate
- Numerele sunt E.164 peste tot:
+40712345678. Nu0712345678, nu0040…. Există normalizare per trunk (leading_plus,inbound_strip_digits,inbound_number_prefix,outbound_prefix) pentru carrier-ii care nu sunt de acord între ei. - Poți prezenta doar un număr deținut de organizația ta. Dacă ceri altceva primești
unverified_caller_id, un 403. Politicile de caller ID îți permit să grupezi mai multe. - Apelurile de urgență nu sunt tratate nicăieri în sistemul ăsta. Nu presupune că funcționează.
Mai departe
- Trunking SIP — modelul de trunk complet, cu starea onestă.
- Contact center — cozi, operatori, predare.
- Ce nu este construit — citește înainte de pilot, nu după.
- Glosar — unde cuvântul nostru diferă de al tău.