Przejdź do treści
megapromotingPorozmawiajmy
Produkty Kallina

Agenci głosowi AI Platforma

Dobra rozmowa kończy się działaniem.

Budujemy agentów, którzy odbierają i inicjują połączenia, korzystają z informacji firmy i pracują z Twoimi systemami. Od pierwszego pytania do pełnej prośby, potwierdzenia lub przekazania do współpracującej osoby.

SłuchajSprawdźDziałaGŁOS + KONTEKST + DZIAŁANIE
Jak działa Kallina

Kallina

Od informacji do wykonanej pracy.

01

Słuchaj

Rozumie prośbę w kontekście rozmowy i zasad biznesowych.

02

Sprawdź

Konsultuje bazę wiedzy i autoryzowane integracje przed odpowiedzią.

03

Działa

Uzupełnia dane, wykonuje dozwolone działanie albo przekazuje rozmowę do człowieka.

Gdzie staje się przydatny.

Recepcja i wsparcie

Najczęściej zadawane pytania, przyjmowanie zgłoszeń i oddzwanianie do osób, które poprosiły o kontakt.

Zamówienia i dostawy

Potwierdzenia i koordynacja, z informacjami z podłączonego systemu zamówień.

Kwalifikacja i umawianie

Zbiera potrzebne szczegóły. Dostęp do kalendarza i rezerwacja są ustalane dla każdej integracji.

Scenariusze, numer telefonu, języki i działania są konfigurowane dla każdej implementacji. Zespół zachowuje możliwość przejęcia rozmowy.

Kallina w szczegółach

Co możesz zrobić z tym projektem.

Kallina to platforma, na której budujemy agentów, którzy mówią przez telefon i na stronie internetowej. Agent ma zapisany rolę, zatwierdzoną bazę wiedzy, zestaw narzędzi, które może wywołać, oraz limit, po którym przekazuje rozmowę człowiekowi. Rozmowa nie kończy się na transkrypcie: połączenie ma czas trwania, koszt u dostawcy, nagranie i analizę, wszystkie powiązane z kontem firmy.

Silnik głosowy nie jest jeden. W konfiguracji agenta wybiera się między ElevenLabs Conversational AI, OpenAI Realtime, Gemini Live albo „auto”, wtedy Kallina wybiera dostawcę w zależności od języka, obciążenia i dostępności. Do tego osobno wybiera się mózg tekstowy — katalog w kodzie ma 78 wpisów od OpenAI, Google, Anthropic, xAI i ElevenLabs, każdy z opóźnieniem i kosztem na minutę pokazanymi w interfejsie, aby wybór był świadomy, a nie zasłyszany.

Telefonia jest nasza, nie wynajęta od dostawcy głosu. Połączenia przechodzą przez własny Asterisk, z routingiem według godzin pracy i strefy czasowej, nocnym harmonogramem (na przykład 22:00 → 06:00) oraz dopasowaniem według priorytetu: nagłówek SIP Diversion, potem numer Kallina, potem reguła zapasowa. Dla OpenAI Realtime istnieje most AudioSocket, który konwertuje kodek w obie strony, g711_ulaw ↔ PCM16.

01

Trzej dostawcy głosu plus pozycja „auto”

W `AGENT_PROVIDERS` są cztery opcje: `elevenlabs` (ConvAI), `openai-realtime`, `gemini-live` i `auto`. Dla text-to-speech w językach innych niż angielski domyślne jest `eleven_flash_v2_5` — 32 języki, około 75 ms opóźnienia; lepsza jakościowo alternatywa, `eleven_turbo_v2_5`, kosztuje około 250 ms. Wybór nie jest ukryty w kodzie, to pole w konfiguracji agenta.

02

Katalog modeli z pokazanym opóźnieniem i kosztem

78 modeli w `LLM_MODELS`, pogrupowanych według dostawcy w interfejsie razem z mierzonym opóźnieniem i kosztem na minutę — od `gpt-5-nano` z około 806 ms i około 0,0004 $/min, do `claude-sonnet-4-6` z około 1,55 s i około 0,0225 $/min. Klientka lub klient, która pyta „dlaczego odpowiada wolno”, dostaje odpowiedź z liczbami, a nie opinię.

03

Własna telefonia na Asterisk

Przekierowanie połączeń konfiguruje się według godzin pracy i strefy czasowej, z obsługą nocnego harmonogramu oraz dopasowaniem według priorytetu (nagłówek SIP Diversion → numer Kallina → reguła zapasowa). Most `openai-realtime-bridge` wykonuje konwersję AudioSocket między g711_ulaw i PCM16 dla dwukierunkowego strumienia audio.

04

Embed głosowy w jednej linii, bez id agenta na stronie

`<script src="https://app.kallina.info/embed.js" data-widget="WIDGET_ID"></script>`. Strona nigdy nie dowiaduje się, który agent odpowiada, i nie przechowuje żadnego klucza dostawcy: prosi Kallina o sesję, a Kallina zwraca podpisany adres URL o krótkim czasie ważności. Istnieje też tryb `data-mode="inline"`, w którym embed nie rysuje absolutnie nic i strona sama tworzy swój interfejs nad API `start()` / `stop()` / `toggle()` / `on(event, fn)`.

05

Kampanie połączeń wychodzących

Partiami w seriach po 1–10 połączeń jednocześnie, import kontaktów z CSV, logika ponawiania, śledzenie w czasie rzeczywistym z pauzą, wznowieniem i zatrzymaniem, plus follow-up przez SMS.

06

Języki

Konfiguracja agenta obsługuje 32 języki (`LANGUAGES`), pełna mapa języków w platformie ma 41 wpisów, a panel administracyjny jest przetłumaczony na 20 (`src/i18n/locales`). Rumuński jest językiem domyślnym w `DEFAULT_VALUES`.

Dane i działanie

Co trafia do systemu. Co trzeba sprawdzić.

Gdzie są dane
PostgreSQL przez Supabase, z Row Level Security i pg_cron; 559 wersjonowanych migracji. Logika serwera to funkcje edge Deno — 472 w repozytorium w chwili sprawdzenia.
Co nigdy nie trafia na stronę klienta
Klucz dostawcy głosu i identyfikator agenta. Embed wymaga `POST /functions/v1/widget-voice-session` z `widget_id` — publicznym kluczem z `chat_widget_configs.widget_id`, a nie wewnętrznym id wiersza — a serwer sam pobiera od ElevenLabs podpisany URL przez `convai/conversation/get_signed_url` i zwraca go. Stara wersja, która umieszczała `agentId` bezpośrednio w HTML, całkowicie omijała Kallina.
Baza wiedzy
Dokumenty przesłane do platformy, zsynchronizowane z RAG ElevenLabs. Na nie nakłada się ramy rozmowy, schematy zbierania danych i kryteria oceny powodzenia połączenia, definiowane dla każdego agenta.
Zużycie mierzone przed, nie po
Tabela `usage_events` przechowuje zużycie rozbite według dostawcy i agenta. Przed każdą czynnością, która kosztuje, funkcja `check-can-use` sprawdza kredyt — bramka jest przed połączeniem, nie faktura pod koniec miesiąca.

Od eksploracji do wdrożenia

Jak przygotowujemy projekt z Kallina.

01

Wybieramy jedną ścieżkę i wyznaczamy jej granice

Scenariusz z jasnym wejściem i jasnym wyjściem — połączenie odebrane w recepcji, potwierdzenie zamówienia, kampania dzwonienia. Piszemy wprost, czego agent nie ma prawa robić i jaką drogą przekazuje rozmowę człowiekowi.

02

Podłączamy numer i sprawdzamy w obie strony

Numer trafia na trunk SIP naszego Asteriska. Połączenia przychodzące i wychodzące testuje się oddzielnie, bo mogą psuć się oddzielnie: ograniczenie operatora na połączenia wychodzące pozostawia przychodzące działające bez zarzutu.

03

Sprawdzamy trasę bez zużywania minut

`scripts/verify-voice-path.mjs` przechodzi dokładnie drogę przeglądarki — wiersz z konfiguracji, `get-widget-config`, potem `widget-voice-session` — i zatrzymuje się na podpisanym URL, bez otwierania websocketu. Działa na jednym widżecie albo na wszystkich z aktywnym głosem, z 1–3 równolegle, i zwraca kod wyjścia, więc może wejść bezpośrednio do crona.

Pytania, które warto wyjaśnić.

Z jakiego silnika głosowego korzysta konkretnie?

Wybierasz między ElevenLabs Conversational AI, OpenAI Realtime i Gemini Live albo zostawiasz „auto”, a Kallina decyduje według języka i dostępności. Do syntezy mowy w innych językach niż angielski domyślny jest model `eleven_flash_v2_5` — 32 języki, około 75 ms; jeśli chcesz wyższą jakość i akceptujesz większe opóźnienie, `eleven_turbo_v2_5` wynosi około 250 ms. Głosy OpenAI Realtime są dziesięć, a ich silnik działa do `gpt-realtime-2.1`.

Jak to umieścić na stronie?

Jedna linia: `<script src="https://app.kallina.info/embed.js" data-widget="WIDGET_ID"></script>`, ładowana jako zwykły skrypt, nie jako moduł. Plik jest dziś serwowany i ma 13.762 bajtów. Jeśli chcesz własny interfejs, `data-mode="inline"` nic nie rysuje i zostawia Ci `start()`, `stop()`, `toggle()` oraz zdarzenia `state`, `message`, `error`. Uwaga na host: plik znajduje się na `app.kallina.info`, a nie na `kallina.info` — to dwie aplikacje na dwóch różnych serwerach.

Czy zużywają się minuty, jeśli osoba odwiedzająca odmówi mikrofonu?

Nie. Kolejność w `embed.js` jest taka: ładuje SDK, prosi o mikrofon z `getUserMedia({audio:true})`, i dopiero potem wywołuje `widget-voice-session`. Jeśli ktoś odmówi mikrofonu, żądanie sesji w ogóle nie jest już wysyłane, więc nie zostaje wydany żaden podpisany URL i nic się nie zużywa.

Czy może zadzwonić pierwszy, a nie tylko odpowiadać?

Tak — wywoływanie partiami, 1–10 jednocześnie, kontakty z CSV, ponowienia i follow-up przez SMS. Ale połączenia wychodzące zależą od operatora telefonicznego, nie tylko od nas: w naszym rejestrze problemów udokumentowano przypadek, w którym centrala operatora zaczęła zwracać `403 Forbidden` dla wszystkich połączeń wychodzących, przy naszej niezmienionej konfiguracji i przychodzących połączeniach działających normalnie. Dlatego testujemy wyjścia osobno, zanim obiecamy kampanię.

W ilu językach mówi i w ilu się administruje?

Konfiguracja agenta obsługuje 32 języki, wewnętrzna mapa języków ma 41 wpisów, a panel administracyjny jest przetłumaczony na 20. Rumuński jest domyślnym językiem nowych agentów.

Czy publikacja odbywa się automatycznie przy każdej zmianie kodu?

Nie, i dobrze to wiedzieć przed planowaniem uruchomienia. Workflow GitHub w repozytorium celuje w projekt Supabase Cloud, który został usunięty, więc „push na main = publikacja” nie jest już prawdą od migracji na własną infrastrukturę. Rzeczywista publikacja odbywa się przez SSH, z kopiowaniem i ponownym uruchomieniem. Praktyczna konsekwencja: pilna zmiana wymaga osoby, nie tylko commita.

Co się dzieje, jeśli agent nie zna odpowiedzi?

Przekazanie do osoby jest częścią scenariusza, nie wyjątkiem. Każdy agent ma zapisane ograniczenia i skonfigurowaną ścieżkę transferu na telefonii; a w rozmowie istnieją bariery i kryteria oceny skuteczności, właśnie po to, aby przypadek spoza roli został zatrzymany, a nie improwizowany.

Przykład ilustracyjny

Połączenie przychodzące w nocy, które trafia tam, gdzie trzeba

Scenariusz użycia, bez danych klienta ani przypisanych wyników handlowych.

Sytuacja początkowa

Ktoś dzwoni na numer firmy o 23:40, poza godzinami pracy recepcji.

Jak to działa

Asterisk stosuje regułę czasu nocnego (na przykład 22:00 → 06:00) i dopasowuje według priorytetu: nagłówek SIP Diversion, potem numer Kallina, potem regułę zapasową. Nocny agent odpowiada u wybranego dostawcy w konfiguracji, wyjaśnia sprawę i wywołuje narzędzia, z których może korzystać.

Rezultatul

Połączenie pozostaje w historii z transkrypcją, nagraniem audio, czasem trwania i kosztem rozbitym według dostawcy. To, co wykracza poza rolę agenta, zostaje zatrzymane i przekazane dalej, zamiast być improwizowane.

Co jest potrzebne:Numer podłączony do trunku SIP naszego Asterisk, połączenia wychodzące dozwolone przez operatora, jeśli jest taka potrzeba, i oddzwanianie, plus agent z promptem, zatwierdzoną bazą wiedzy i zapisanymi limitami.

Możliwości współpracy

Kallina, w kontekście Twojej organizacji.

Informowanie i przyjmowanie zgłoszeń

Asysta głosowa na zatwierdzonych informacjach, z przekierowaniem do operatora oraz jasnymi zasadami dotyczącymi nagrywania i przechowywania rozmów.

Firmy prywatne

Definiujemy pilotaż wokół realnego procesu: użytkownicy, dane, integracje, koszty i kryteria akceptacji. Rozszerzenie następuje po ocenie wyniku.

Instytucje i spółki państwowe

Ustalamy wymagania dotyczące dostępności, hostingu, ochrony danych i interoperacyjności. Każde połączenie z usługami AGE lub STISC wymaga walidacji kwalifikowalności, dostępu i zatwierdzeń.

To są scenariusze adaptacji, a nie oświadczenia o istniejących umowach lub partnerstwach. Proponowane funkcje są potwierdzane w zakresie pracy projektu.

Omów pilotaż

Część ekosystemu.

Co chcesz, żeby działało lepiej?

Opowiedz nam o swoim procesie. Wspólnie ustalimy, co warto zbudować, co da się połączyć i jak sprawdzimy wynik.

Porozmawiajmy