Skip to content

Ce este CallAgent ​

CallAgent poartă conversații vocale între clienții tăi și un model de limbaj, prin rețeaua telefonică sau printr-o pagină web, și păstrează tot ce s-a întâmplat: audio-ul, transcrierea, cronometrarea fiecărei etape, tools-urile apelate și cât a costat fiecare. Sunt trei produse care împart o singură bază de date — o platformă de voice AI, un PBX SIP și un contact center — pentru că un apel AI care nu poate fi escaladat la un om e un demo, nu un sistem telefonic.

Cele două planuri ​

Browser / telefon / trunk SIP
        │
        ▼
  Voice Gateway (TypeScript)            Control plane (Laravel + Filament)
  · transport media                     · asistenți, tools, knowledge, squads
  · pipeline STT → LLM → TTS            · numere, trunk-uri, cozi, operatori
  · barge-in și endpointing             · apeluri, artefacte, ledger de facturare
  · execuție de tools și MCP            · API REST, webhooks, dashboard
        │                                        ▲
        └────────── NATS JetStream ──────────────┘

Control plane-ul deține configurația și istoria: acolo se editează, se publică și se versionează un asistent, și acolo se stochează un apel terminat. Gateway-ul deține milisecundele: odată ce un apel e viu, niciun request către control plane nu stă pe drumul audio.

Se întâlnesc la @callagent/contracts, un pachet zod-first pe care îl importă ambele planuri, ca o formă să nu poată devia între ele. Câteva dintre enumerările lui sunt oglindite în PHP, cu un test care citește sursa PHP și pică la dezacord — stările apelului, tipurile de eveniment și lista de chei pentru redactare sunt ținute laolaltă așa.

Primitivele ​

PrimitivăCe estePagină
AssistantUn prompt, un transcriber, un model, o voce și planurile care decid când vorbește și ce înregistrează. Versionat; un apel fixează versiunea cu care a pornit.Asistenți
ToolO funcție pe care modelul o poate apela în timpul conversației — un request HTTP, un transfer, un handoff, o secvență DTMF, o interogare de knowledge. 25 de tipuri, o singură formă de definiție; cinci dintre ele nu ajung niciodată într-un apel.Tools
MCP serverUn server extern de tools, atașat întreg, cu nivel de risc per tool.MCP
Knowledge baseDocumente tăiate în bucăți, transformate în embeddings în pgvector și regăsite în timpul conversației.Knowledge bases
SquadMai mulți asistenți care împart un apel, cu handoff-uri explicite.Squads
Număr / trunk SIPDe unde sosesc apelurile și pe unde pleacă.Telefonie · SIP
CallO conversație și tot ce a produs.Apeluri și artefacte
Queue / operatorJumătatea umană: unde ajunge un apel când asistentul îl predă.Contact center
CampaignApeluri de ieșire în volum, cu ritm și control de conformitate.Campanii

Trei feluri de a-l conduce ​

bash
# 305 endpoint-uri sub /api/v1, documentație generată la /reference/api/
curl -X POST "$CALLAGENT_API_URL/calls" \
  -H "Authorization: Bearer $CALLAGENT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"assistant_id": "01JQ…", "to": "+40712345678", "phone_number_id": "01JQ…"}'
bash
# Asistenți, tools, squads și knowledge bases ca YAML în git
callagent validate
callagent plan          # un diff pe câmpuri față de organizația live
callagent apply
text
Consola Filament de la /{organizatie}/… acoperă fiecare resursă pe care o
acoperă și API-ul, plus bucățile care au sens doar vizual: workbench-ul de
furnizori, vizualizarea apelurilor live, wallboard-ul, editorul de noduri IVR
și timeline-ul apelului. E și singurul loc din care se poate crea o cheie de API.

Două vocabulare, și nu sunt interschimbabile

API-ul REST e în mare parte snake_case (first_message_mode) — mai puțin endpoint-urile de telefonie, care sunt camelCase (destinationType). @callagent/contracts și CLI-ul sunt camelCase, cu valori de enum scrise cu cratimă (assistant-speaks-first), iar control plane-ul convertește între ele.

Unde o pagină arată un body de request, arată ortografia pe care endpoint-ul o acceptă efectiv. Unde arată YAML, acela e vocabularul CLI-ului.

Ce să citești mai departe ​

Scrisă după cod. Ce nu este încă implementat este marcat ca atare, niciodată descris ca funcțional.