Expertise · Voice agents
An agent that speaks — on your page and on the phone — and that can be interrupted.
We build voice agents on Kallina: a written role, an approved knowledge base, tools it calls during the conversation, and a boundary past which it hands the call to a person. Romanian is the default language of new agents.
Construit dejaTrei implementări proprii, citate mai jos. (1) Platforma Kallina — 472 de funcții edge Deno și 559 de migrări de bază de date, numărate azi în depozit; `https://app.kallina.info` răspunde 200. (2) Componenta de pe acest site, `src/components/agents/KallinaVoiceAgent.tsx`, care implementează traseul corect de sesiune și documentează cele două moduri în care un agent vocal eșuează în tăcere. (3) Puntea `elevenlabs-bridge` și sesiunea `openai-realtime-session`, unde stau parametrii reali de întrerupere și de detecție a vorbirii. Rezerva pe care o spunem: partea de telefon depinde de o gazdă SIP, iar gazda prin care trec liniile noastre de test nu răspunde la data scrierii — vezi pagina de telefonie. Pe web, traseul e verificabil azi.
Un agent vocal, la noi, nu e „un bot care citește un scenariu”. Are patru lucruri scrise înainte de primul apel: un rol, o bază de cunoștințe aprobată de tine, un set de unelte pe care are voie să le cheme, și o limită dincolo de care predă discuția unui om. Ce iese din conversație nu e doar un transcript: apelul are durată, cost defalcat pe furnizor, înregistrare și analiză, toate legate de contul afacerii.
Motorul nu e unul singur, și asta e o decizie, nu un accident. În configurația agentului alegi între ElevenLabs Conversational AI, OpenAI Realtime și Gemini Live, sau lași „auto” și alege platforma după limbă, încărcare și disponibilitate. Peste el alegi separat creierul textual, dintr-un catalog în care fiecare model are latența și costul pe minut afișate în interfață. Când cineva întreabă „de ce răspunde încet”, răspunsul are cifre, nu păreri.
Partea pe care oamenii o simt cel mai tare e întreruperea. Pe OpenAI Realtime, detecția vorbirii e semantică, cu prag 0,5, o pernă de 300 ms înainte și 500 ms de liniște ca să considere că ai terminat de vorbit; comutatorul „permite întreruperi” e pornit implicit. Pe ElevenLabs, evenimentul de întrerupere e trimis mai departe centralei telefonice, ca să oprească redarea imediat. Iar timpul după care agentul consideră că tăcerea ta e un răspuns e configurabil per agent — pe un agent de vânzări scris de noi e strâns la 12 secunde, față de 15 implicit.
Agentul trăiește în două locuri diferite, cu constrângeri diferite. În pagina web intră cu o singură linie de script sau cu o componentă proprie, iar regula de aur e că pagina nu ține niciodată identificatorul agentului și nicio cheie de furnizor — cere platformei o sesiune și primește un URL semnat, de scurtă durată. La telefon intră printr-un trunk SIP, iar acolo constrângerile sunt ale operatorului și ale centralei, nu ale agentului; despre asta scriem separat, pe pagina de telefonie.