Sari la conținut
megapromotingHai să discutăm
Produse Kallina

Agenți vocali AI Platformă

Ein gutes Gespräch geht in eine Handlung über.

Wir bauen Agenten, die Anrufe annehmen und selbst führen, das Wissen des Unternehmens nutzen und mit Ihren Systemen arbeiten. Von der ersten Frage bis zur vollständigen Anfrage, einer Bestätigung oder der Übergabe an eine Kollegin.

AscultăVerificăAcționeazăVOCE + CONTEXT + ACȚIUNE
Cum funcționează Kallina

Kallina

Von der Information zur erledigten Arbeit.

01

Ascultă

Versteht das Anliegen im Kontext des Gesprächs und der Regeln des Unternehmens.

02

Verifică

Fragt vor der Antwort die Wissensdatenbank und die freigegebenen Integrationen ab.

03

Acționează

Vervollständigt die Daten, führt die erlaubte Aktion aus oder übergibt das Gespräch an einen Menschen.

Wo sie nützlich wird.

Empfang und Support

Häufige Fragen, Aufnahme von Anliegen und Rückruf an alle, die darum gebeten haben.

Bestellungen und Lieferungen

Bestätigungen und Abstimmung, mit den Daten aus dem angebundenen Bestellsystem.

Qualifizierung und Terminvergabe

Sammelt die nötigen Angaben. Kalenderzugriff und die Buchung selbst werden je Integration festgelegt.

Szenarien, Rufnummer, Sprachen und Aktionen werden für jede Einführung einzeln konfiguriert. Das Team behält die Möglichkeit, das Gespräch zu übernehmen.

Kallina im Detail

Was Sie mit diesem Projekt machen können.

Kallina ist die Plattform, auf der wir Agenten bauen, die am Telefon und auf der Webseite sprechen. Ein Agent hat eine geschriebene Rolle, eine freigegebene Wissensdatenbank, einen Satz Werkzeuge, die er aufrufen darf, und eine Grenze, hinter der er das Gespräch an einen Menschen übergibt. Das Gespräch endet nicht im Transkript: Ein Anruf hat Dauer, Kosten pro Anbieter, Aufzeichnung und Auswertung, alles mit dem Konto des Unternehmens verknüpft.

Es gibt nicht nur eine Sprach-Engine. In der Agentenkonfiguration wählen Sie zwischen ElevenLabs Conversational AI, OpenAI Realtime, Gemini Live oder „auto“, wobei Kallina den Anbieter nach Sprache, Last und Verfügbarkeit auswählt. Darüber wählen Sie getrennt das Textgehirn — der Katalog im Code hat 78 Einträge von OpenAI, Google, Anthropic, xAI und ElevenLabs, jeder mit Latenz und Kosten pro Minute in der Oberfläche, damit die Wahl informiert ist und nicht vom Hörensagen kommt.

Die Telefonie betreiben wir selbst, sie ist nicht beim Sprachanbieter gemietet. Die Anrufe laufen über ein eigenes Asterisk, mit Routing nach Öffnungszeiten und Zeitzone, Nachtplänen (zum Beispiel 22:00 → 06:00) und Zuordnung nach Priorität: der SIP-Diversion-Header, dann die Kallina-Nummer, dann die Ersatzregel. Für OpenAI Realtime gibt es eine AudioSocket-Bridge, die den Codec in beide Richtungen wandelt, g711_ulaw ↔ PCM16.

01

Drei Sprachanbieter plus eine „auto“-Stellung

In `AGENT_PROVIDERS` stehen vier Optionen: `elevenlabs` (ConvAI), `openai-realtime`, `gemini-live` und `auto`. Für die Sprachsynthese in anderen Sprachen als Englisch ist `eleven_flash_v2_5` die Voreinstellung — 32 Sprachen, rund 75 ms Latenz; die qualitativ bessere Alternative `eleven_turbo_v2_5` kostet rund 250 ms. Die Wahl ist nicht im Code versteckt, sie ist ein Feld in der Agentenkonfiguration.

02

Modellkatalog mit ausgewiesener Latenz und Kosten

78 Modelle in `LLM_MODELS`, in der Oberfläche nach Anbieter gruppiert, zusammen mit der gemessenen Latenz und den Kosten pro Minute — von `gpt-5-nano` bei rund 806 ms und etwa 0,0004 $/Min. bis `claude-sonnet-4-6` bei rund 1,55 s und etwa 0,0225 $/Min. Ein Kunde, der fragt „warum antwortet das so langsam“, bekommt eine Antwort mit Zahlen und keine Meinung.

03

Eigene Telefonie auf Asterisk

Die Rufumleitung wird nach Arbeitszeiten und Zeitzone konfiguriert, mit Unterstützung für Nachtpläne und Zuordnung nach Priorität (SIP-Diversion-Header → Kallina-Nummer → Ersatzregel). Die Bridge `openai-realtime-bridge` übernimmt die AudioSocket-Wandlung zwischen g711_ulaw und PCM16 für den bidirektionalen Audiostrom.

04

Sprach-Embed in einer Zeile, ohne Agenten-ID auf der Seite

`<script src="https://app.kallina.info/embed.js" data-widget="WIDGET_ID"></script>`. Die Seite erfährt nie, welcher Agent antwortet, und hält keinen Anbieterschlüssel: Sie fordert bei Kallina eine Sitzung an, und Kallina liefert eine kurzlebige signierte URL zurück. Es gibt auch den Modus `data-mode="inline"`, in dem das Embed überhaupt nichts zeichnet und die Seite ihre eigene Oberfläche über die API `start()` / `stop()` / `toggle()` / `on(event, fn)` baut.

05

Kampagnen für ausgehende Anrufe

Anrufe im Stapel mit 1–10 gleichzeitigen Leitungen, Kontaktimport aus CSV, Wiederholungslogik, Verfolgung in Echtzeit mit Pause, Fortsetzen und Stopp, dazu Follow-up per SMS.

06

Limbi

Die Agentenkonfiguration nimmt 32 Sprachen an (`LANGUAGES`), die vollständige Sprachkarte der Plattform hat 41 Einträge, und das Verwaltungspanel ist in 20 übersetzt (`src/i18n/locales`). Rumänisch ist die Voreinstellung in `DEFAULT_VALUES`.

Daten und Betrieb

Was ins System kommt. Was geprüft werden muss.

Wo die Daten liegen
PostgreSQL über Supabase, mit Row Level Security und pg_cron; 559 versionierte Migrationen. Die Serverlogik sind Deno-Edge-Funktionen — 472 im Repository zum Prüfzeitpunkt.
Was nie auf der Seite des Kunden landet
Der Schlüssel des Sprachanbieters und die Kennung des Agenten. Das Embed sendet `POST /functions/v1/widget-voice-session` mit `widget_id` — dem öffentlichen Schlüssel aus `chat_widget_configs.widget_id`, nicht der internen Zeilen-ID — und der Server fordert selbst bei ElevenLabs eine signierte URL an, über `convai/conversation/get_signed_url`, und gibt sie zurück. Die alte Variante, die `agentId` direkt ins HTML schrieb, umging Kallina vollständig.
Die Wissensdatenbank
In die Plattform hochgeladene Dokumente, synchronisiert mit dem RAG von ElevenLabs. Darüber liegen Gesprächs-Guardrails, Schemata zur Datenerhebung und Kriterien zur Bewertung des Anruferfolgs, je Agent definiert.
Verbrauch vorher gemessen, nicht nachher
Die Tabelle `usage_events` führt den Verbrauch aufgeschlüsselt nach Anbieter und Agent. Vor jeder kostenpflichtigen Aktion prüft die Funktion `check-can-use` das Guthaben — das Tor steht vor dem Anruf, nicht auf der Rechnung am Monatsende.

Von der Sondierung zur Einführung

Wie wir ein Projekt mit Kallina vorbereiten.

01

Wir wählen einen einzigen Weg und schreiben seine Ränder auf

Ein Szenario mit klarem Eingang und klarem Ausgang — angenommener Anruf am Empfang, Bestellbestätigung, Anrufkampagne. Wir schreiben ausdrücklich auf, was der Agent nicht tun darf und auf welchem Weg er das Gespräch an einen Menschen übergibt.

02

Wir binden die Nummer an und prüfen in beide Richtungen

Die Nummer läuft auf den SIP-Trunk unseres Asterisk. Eingehende und ausgehende Anrufe werden getrennt getestet, weil sie getrennt kaputtgehen: eine Sperre des Netzbetreibers für ausgehende Anrufe lässt die eingehenden einwandfrei laufen.

03

Wir prüfen den Weg, ohne Minuten zu verbrauchen

`scripts/verify-voice-path.mjs` geht genau den Weg eines Browsers — die Konfigurationszeile, `get-widget-config`, dann `widget-voice-session` — und hält bei der signierten URL an, ohne das Websocket zu öffnen. Es läuft auf einem einzelnen Widget oder auf allen mit aktiver Sprache, mit 1–3 parallel, und liefert einen Exit-Code, passt also direkt in einen Cron.

Fragen, die geklärt gehören.

Welche Sprach-Engine nutzt sie konkret?

Sie wählen zwischen ElevenLabs Conversational AI, OpenAI Realtime und Gemini Live, oder Sie lassen „auto“ stehen und Kallina entscheidet nach Sprache und Verfügbarkeit. Für die Sprachsynthese in anderen Sprachen als Englisch ist das Modell `eleven_flash_v2_5` voreingestellt — 32 Sprachen, um die 75 ms; wenn Sie höhere Qualität wollen und mehr Verzögerung akzeptieren, liegt `eleven_turbo_v2_5` bei etwa 250 ms. Die Stimmen von OpenAI Realtime sind zehn, und ihre Engine reicht bis `gpt-realtime-2.1`.

Wie bindet man sie auf einer Website ein?

Eine Zeile: `<script src="https://app.kallina.info/embed.js" data-widget="WIDGET_ID"></script>`, als normales Skript geladen, nicht als Modul. Die Datei wird heute ausgeliefert und ist 13.762 Byte groß. Wenn Sie Ihre eigene Oberfläche wollen, zeichnet `data-mode="inline"` nichts und lässt Ihnen `start()`, `stop()`, `toggle()` und die Ereignisse `state`, `message`, `error`. Achten Sie auf den Host: die Datei liegt auf `app.kallina.info`, nicht auf `kallina.info` — das sind zwei Anwendungen auf zwei verschiedenen Servern.

Werden Minuten verbraucht, wenn der Besucher das Mikrofon verweigert?

Nein. Die Reihenfolge in `embed.js` ist: SDK laden, das Mikrofon mit `getUserMedia({audio:true})` anfragen und erst danach `widget-voice-session` aufrufen. Verweigert der Mensch das Mikrofon, entsteht die Sitzungsanfrage gar nicht erst, es wird also keine signierte URL ausgestellt und nichts verbraucht.

Kann sie auch selbst anrufen, nicht nur annehmen?

Ja — Anrufe im Stapel, 1–10 gleichzeitig, Kontakte aus CSV, Wiederholungen und Follow-up per SMS. Ausgehende Anrufe hängen aber vom Netzbetreiber ab, nicht nur von uns: In unserem Störungsregister ist ein Fall dokumentiert, in dem die Vermittlungsstelle des Betreibers bei allen ausgehenden Anrufen `403 Forbidden` zurückgab, bei unveränderter Konfiguration auf unserer Seite und mit normal funktionierenden eingehenden Anrufen. Deshalb testen wir ausgehende Anrufe getrennt, bevor wir eine Kampagne zusagen.

In wie vielen Sprachen spricht sie, und in wie vielen wird sie verwaltet?

Die Agentenkonfiguration nimmt 32 Sprachen an, die interne Sprachkarte hat 41 Einträge, und das Verwaltungspanel ist in 20 übersetzt. Rumänisch ist die Standardsprache neuer Agenten.

Wird bei jeder Codeänderung automatisch veröffentlicht?

Nein, und das sollte man wissen, bevor man einen Start plant. Der GitHub-Workflow im Repository zielt auf ein Supabase-Cloud-Projekt, das gelöscht wurde, „Push auf main = Veröffentlichung“ stimmt also seit dem Umzug auf eigene Infrastruktur nicht mehr. Die tatsächliche Veröffentlichung läuft über SSH, mit Kopieren und Neustart. Praktische Folge: eine dringende Änderung braucht einen Menschen, nicht nur einen Commit.

Was passiert, wenn der Agent die Antwort nicht kennt?

Die Übergabe an einen Menschen ist Teil des Szenarios, keine Ausnahme. Jeder Agent hat geschriebene Grenzen und einen auf der Telefonie konfigurierten Übergabeweg; im Gespräch selbst gibt es Guardrails und Bewertungskriterien, gerade damit ein Fall außerhalb der Rolle gestoppt und nicht improvisiert wird.

Anschauliches Beispiel

Ein nachts angenommener Anruf, der dort ankommt, wo er hingehört

Ein Nutzungsszenario, ohne Kundendaten und ohne zugeschriebene Geschäftsergebnisse.

Die Ausgangslage

Jemand ruft um 23:40 die Nummer des Unternehmens an, außerhalb der Zeiten des Empfangs.

Wie sie arbeitet

Asterisk wendet die Nachtplanregel an (zum Beispiel 22:00 → 06:00) und ordnet nach Priorität zu: der SIP-Diversion-Header, dann die Kallina-Nummer, dann die Ersatzregel. Der Nachtagent antwortet über den in der Konfiguration gewählten Anbieter, klärt das Anliegen und ruft die Werkzeuge auf, die er verwenden darf.

Rezultatul

Der Anruf bleibt im Verlauf mit Transkript, Audioaufzeichnung, Dauer und nach Anbieter aufgeschlüsselten Kosten. Was die Rolle des Agenten übersteigt, wird gestoppt und weitergegeben, statt improvisiert zu werden.

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.

Möglichkeiten der Zusammenarbeit

Kallina im Kontext Ihrer Organisation.

Auskunft und Aufnahme von Anliegen

Sprachunterstützung auf freigegebenen Informationen, mit Übergabe an eine Mitarbeiterin und klaren Regeln zu Aufzeichnung und Aufbewahrung der Gespräche.

Private Unternehmen

Wir definieren einen Pilotbetrieb rund um einen realen Prozess: Nutzer, Daten, Integrationen, Kosten und Abnahmekriterien. Die Ausweitung folgt nach der Auswertung des Ergebnisses.

Behörden und staatliche Unternehmen

Wir legen die Anforderungen an Barrierefreiheit, Hosting, Datenschutz und Interoperabilität fest. Jede Verbindung zu Diensten von AGE — Agenția de Guvernare Electronică, der moldauischen E-Government-Agentur — oder von STISC, dem Serviciul Tehnologia Informației și Securitate Cibernetică, dem staatlichen IT- und Cybersicherheitsdienst, erfordert die Prüfung von Berechtigung, Zugängen und Freigaben.

Das sind Anpassungsszenarien, keine Aussagen über bestehende Verträge oder Partnerschaften. Die vorgeschlagenen Funktionen werden im Arbeitsumfang des Projekts bestätigt.

Discută un pilot

Teil eines Ökosystems.

Was sollte bei Ihnen besser laufen?

Erzählen Sie uns von Ihrem Prozess. Gemeinsam legen wir fest, was sich zu bauen lohnt, was wir anbinden können und wie wir das Ergebnis prüfen.

Hai să discutăm