Ascultă
Înțelege cererea în contextul conversației și al regulilor afacerii.
Agenți vocali AI Platformă
Construim agenți care preiau și inițiază apeluri, folosesc informațiile afacerii și lucrează cu sistemele tale. De la prima întrebare până la o solicitare completă, o confirmare sau transferul către un coleg.
Kallina
Înțelege cererea în contextul conversației și al regulilor afacerii.
Consultă baza de cunoștințe și integrările autorizate înainte să răspundă.
Completează datele, execută acțiunea permisă sau transferă conversația către om.
Întrebări frecvente, preluarea solicitărilor și revenirea către persoanele care au cerut să fie contactate.
Confirmări și coordonare, cu informațiile din sistemul de comenzi conectat.
Adună detaliile necesare. Accesul la calendar și rezervarea se stabilesc pentru fiecare integrare.
Scenariile, numărul de telefon, limbile și acțiunile se configurează pentru fiecare implementare. Echipa păstrează posibilitatea de a prelua conversația.
Kallina în detaliu
Kallina este platforma pe care construim agenți care vorbesc la telefon și în pagina web. Un agent are un rol scris, o bază de cunoștințe aprobată, un set de unelte pe care le poate chema și o limită dincolo de care predă discuția unui om. Conversația nu se termină în transcript: apelul are durată, cost pe furnizor, înregistrare și analiză, toate legate de contul afacerii.
Motorul vocal nu e unul singur. În configurația agentului alegi între ElevenLabs Conversational AI, OpenAI Realtime, Gemini Live sau „auto”, caz în care Kallina alege furnizorul în funcție de limbă, încărcare și disponibilitate. Peste asta alegi separat creierul textual — catalogul din cod are 78 de intrări de la OpenAI, Google, Anthropic, xAI și ElevenLabs, fiecare cu latența și costul pe minut afișate în interfață, ca alegerea să fie una informată, nu una din auzite.
Telefonia e a noastră, nu închiriată de la furnizorul de voce. Apelurile trec printr-un Asterisk propriu, cu rutare pe ore de program și fus orar, program peste noapte (de exemplu 22:00 → 06:00) și potrivire pe prioritate: antetul SIP Diversion, apoi numărul Kallina, apoi regula de rezervă. Pentru OpenAI Realtime există o punte AudioSocket care convertește codecul în ambele sensuri, g711_ulaw ↔ PCM16.
În `AGENT_PROVIDERS` sunt patru opțiuni: `elevenlabs` (ConvAI), `openai-realtime`, `gemini-live` și `auto`. Pentru text-to-speech în alte limbi decât engleza, implicit este `eleven_flash_v2_5` — 32 de limbi, aproximativ 75 ms latență; alternativa de calitate mai bună, `eleven_turbo_v2_5`, costă aproximativ 250 ms. Alegerea nu e ascunsă în cod, e un câmp în configurația agentului.
78 de modele în `LLM_MODELS`, grupate pe furnizor în interfață împreună cu latența măsurată și costul pe minut — de la `gpt-5-nano` la aproximativ 806 ms și circa 0,0004 $/min, până la `claude-sonnet-4-6` la aproximativ 1,55 s și circa 0,0225 $/min. Un client care întreabă „de ce răspunde încet” primește un răspuns cu cifre, nu o părere.
Redirecționarea apelurilor se configurează pe ore de lucru și fus orar, cu suport pentru program peste noapte și potrivire pe prioritate (antet SIP Diversion → număr Kallina → regulă de rezervă). Puntea `openai-realtime-bridge` face conversia AudioSocket între g711_ulaw și PCM16 pentru fluxul audio bidirecțional.
`<script src="https://app.kallina.info/embed.js" data-widget="WIDGET_ID"></script>`. Pagina nu află niciodată ce agent răspunde și nu ține nicio cheie de furnizor: cere lui Kallina o sesiune, iar Kallina întoarce un URL semnat de scurtă durată. Există și modul `data-mode="inline"`, în care embedul nu desenează absolut nimic și pagina își face singură interfața peste API-ul `start()` / `stop()` / `toggle()` / `on(event, fn)`.
Apelare în loturi cu 1–10 apeluri simultane, import de contacte din CSV, logică de reîncercare, urmărire în timp real cu pauză, reluare și oprire, plus follow-up prin SMS.
Configurația agentului acceptă 32 de limbi (`LANGUAGES`), harta completă de limbi din platformă are 41 de intrări, iar panoul de administrare este tradus în 20 (`src/i18n/locales`). Româna e limba implicită în `DEFAULT_VALUES`.
Date și funcționare
De la explorare la implementare
Un scenariu cu intrare clară și ieșire clară — apel primit la recepție, confirmare de comandă, campanie de sunat. Scriem explicit ce nu are voie agentul să facă și pe ce cale predă discuția unui om.
Numărul intră pe trunkul SIP al Asterisk-ului nostru. Apelurile primite și cele ieșite se testează separat, pentru că se pot strica separat: o restricție a operatorului pe apeluri ieșite lasă intrările să funcționeze perfect.
`scripts/verify-voice-path.mjs` parcurge exact drumul unui browser — rândul din configurație, `get-widget-config`, apoi `widget-voice-session` — și se oprește la URL-ul semnat, fără să deschidă websocketul. Rulează pe un singur widget sau pe toate cele cu voce activă, cu 1–3 în paralel, și întoarce cod de ieșire, deci poate intra direct într-un cron.
Alegi între ElevenLabs Conversational AI, OpenAI Realtime și Gemini Live, sau lași „auto” și decide Kallina după limbă și disponibilitate. Pentru sinteza vocii în alte limbi decât engleza, implicit este modelul `eleven_flash_v2_5` — 32 de limbi, în jur de 75 ms; dacă vrei calitate mai mare și accepți întârziere mai mare, `eleven_turbo_v2_5` e în jur de 250 ms. Vocile OpenAI Realtime sunt zece, iar motorul lor merge până la `gpt-realtime-2.1`.
O linie: `<script src="https://app.kallina.info/embed.js" data-widget="WIDGET_ID"></script>`, încărcată ca script obișnuit, nu ca modul. Fișierul e servit azi și are 13.762 de octeți. Dacă vrei interfața ta, `data-mode="inline"` nu desenează nimic și îți lasă `start()`, `stop()`, `toggle()` și evenimentele `state`, `message`, `error`. Atenție la gazdă: fișierul stă pe `app.kallina.info`, nu pe `kallina.info` — sunt două aplicații pe două servere diferite.
Nu. Ordinea din `embed.js` este: încarcă SDK-ul, cere microfonul cu `getUserMedia({audio:true})`, și abia apoi cheamă `widget-voice-session`. Dacă omul refuză microfonul, cererea de sesiune nu se mai face deloc, deci nu se emite niciun URL semnat și nu se consumă nimic.
Da — apelare în loturi, 1–10 simultan, contacte din CSV, reîncercări și follow-up prin SMS. Dar apelurile ieșite depind de operatorul telefonic, nu doar de noi: în registrul nostru de probleme e documentat un caz în care centrala operatorului a început să întoarcă `403 Forbidden` la toate ieșirile, cu configurația noastră neschimbată și cu apelurile primite funcționând normal. De aceea testăm ieșirile separat înainte de a promite o campanie.
Configurația agentului acceptă 32 de limbi, harta internă de limbi are 41 de intrări, iar panoul de administrare e tradus în 20. Româna e limba implicită a agenților noi.
Nu, și e bine de știut înainte de a planifica o lansare. Workflow-ul GitHub din repo țintește un proiect Supabase Cloud care a fost șters, deci „push pe main = publicare” nu mai e adevărat de la migrarea pe infrastructură proprie. Publicarea reală se face prin SSH, cu copiere și repornire. Consecința practică: o schimbare urgentă are nevoie de o persoană, nu doar de un commit.
Predarea către om face parte din scenariu, nu e o excepție. Fiecare agent are limite scrise și o cale de transfer configurată pe telefonie; iar în conversație există garduri și criterii de evaluare a reușitei, tocmai ca un caz în afara rolului să fie oprit, nu improvizat.
Exemplu ilustrativ
Un scenariu de utilizare, fără date de client sau rezultate comerciale atribuite.
Cineva sună la numărul afacerii la 23:40, în afara programului de la recepție.
Asterisk aplică regula de program peste noapte (de exemplu 22:00 → 06:00) și potrivește pe prioritate: antetul SIP Diversion, apoi numărul Kallina, apoi regula de rezervă. Agentul de noapte răspunde pe furnizorul ales în configurație, clarifică cererea și cheamă uneltele pe care are voie să le folosească.
Apelul rămâne în istoric cu transcript, înregistrare audio, durată și cost defalcat pe furnizor. Ce depășește rolul agentului se oprește și se transferă mai departe, în loc să fie improvizat.
Ce este necesar:Numărul conectat pe trunkul SIP al Asterisk-ului nostru, apelurile ieșite permise de operator dacă se dorește și sunat înapoi, plus un agent cu prompt, bază de cunoștințe aprobată și limite scrise.
Posibilități de colaborare
Asistență vocală pe informații aprobate, cu trecere către un operator și reguli clare privind înregistrarea și păstrarea conversațiilor.
Definim un pilot în jurul unui proces real: utilizatori, date, integrări, costuri și criterii de acceptare. Extinderea urmează după evaluarea rezultatului.
Stabilim cerințele de accesibilitate, găzduire, protecție a datelor și interoperabilitate. Orice conexiune cu servicii AGE sau STISC necesită validarea eligibilității, accesului și aprobărilor.
Acestea sunt scenarii de adaptare, nu declarații despre contracte sau parteneriate existente. Funcțiile propuse se confirmă în domeniul de lucru al proiectului.
Discută un pilotUn asistent conectat la informațiile afacerii tale, în canalele în care îți scriu clienții.
PlatformăGrai este direcția noastră de cercetare pentru sinteză vocală și modele adaptate limbilor folosite aici.
Cercetare & dezvoltareMegaforms explorează colectarea de răspunsuri prin formulare conversaționale, inclusiv răspunsuri vocale și transcriere.
Dezvoltare & demonstrațiiPovestește-ne despre procesul tău. Împreună stabilim ce merită construit, ce putem conecta și cum verificăm rezultatul.