Słuchaj
Rozumie prośbę w kontekście rozmowy i zasad biznesowych.
Agenci głosowi AI Platforma
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.
Kallina
Rozumie prośbę w kontekście rozmowy i zasad biznesowych.
Konsultuje bazę wiedzy i autoryzowane integracje przed odpowiedzią.
Uzupełnia dane, wykonuje dozwolone działanie albo przekazuje rozmowę do człowieka.
Najczęściej zadawane pytania, przyjmowanie zgłoszeń i oddzwanianie do osób, które poprosiły o kontakt.
Potwierdzenia i koordynacja, z informacjami z podłączonego systemu zamówień.
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
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.
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.
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ę.
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.
`<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)`.
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.
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
Od eksploracji do wdrożenia
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.
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.
`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.
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`.
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.
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.
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ę.
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.
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.
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
Scenariusz użycia, bez danych klienta ani przypisanych wyników handlowych.
Ktoś dzwoni na numer firmy o 23:40, poza godzinami pracy recepcji.
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ć.
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
Asysta głosowa na zatwierdzonych informacjach, z przekierowaniem do operatora oraz jasnymi zasadami dotyczącymi nagrywania i przechowywania rozmów.
Definiujemy pilotaż wokół realnego procesu: użytkownicy, dane, integracje, koszty i kryteria akceptacji. Rozszerzenie następuje po ocenie wyniku.
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żAsystent połączony z informacjami Twojego biznesu, w kanałach, w których piszą do Ciebie klienci.
PlatformaGrai to nasz kierunek badawczy dla syntezy głosu i modeli dostosowanych do języków używanych tutaj.
Badania i rozwójMegaforms bada zbieranie odpowiedzi poprzez formularze konwersacyjne, w tym odpowiedzi głosowe i transkrypcję.
Rozwój i demonstracjeOpowiedz nam o swoim procesie. Wspólnie ustalimy, co warto zbudować, co da się połączyć i jak sprawdzimy wynik.