Ascultă
Rozumie prośbę w kontekście rozmowy i reguł firmy.
Agenți vocali AI Platformă
Budujemy agentów, którzy odbierają i inicjują połączenia, korzystają z wiedzy firmy i pracują z Twoimi systemami. Od pierwszego pytania po kompletne zgłoszenie, potwierdzenie albo przekazanie rozmowy człowiekowi.
Kallina
Rozumie prośbę w kontekście rozmowy i reguł firmy.
Zanim odpowie, sięga do bazy wiedzy i autoryzowanych integracji.
Uzupełnia dane, wykonuje dozwoloną akcję albo przekazuje rozmowę człowiekowi.
Najczęstsze pytania, przyjmowanie zgłoszeń i oddzwanianie do osób, które o to poprosiły.
Potwierdzenia i koordynacja, na danych z podłączonego systemu zamówień.
Zbiera potrzebne szczegóły. Dostęp do kalendarza i samą rezerwację ustalamy osobno przy każdej integracji.
Scenariusze, numer telefonu, języki i dozwolone akcje konfigurujemy dla każdego wdrożenia osobno. Zespół zachowuje możliwość przejęcia rozmowy.
Kallina w szczegółach
Kallina to platforma, na której budujemy agentów rozmawiających przez telefon i na stronie internetowej. Agent ma spisaną rolę, zatwierdzoną bazę wiedzy, zestaw narzędzi, które wolno mu wywołać, i granicę, za którą oddaje rozmowę człowiekowi. Rozmowa nie kończy się na transkrypcji: połączenie ma czas trwania, koszt w rozbiciu na dostawców, nagranie i analizę — wszystko powiązane z kontem firmy.
Silnik głosowy nie jest jeden. W konfiguracji agenta wybierasz między ElevenLabs Conversational AI, OpenAI Realtime, Gemini Live albo „auto”, gdzie Kallina sama dobiera dostawcę zależnie od języka, obciążenia i dostępności. Osobno wybierasz mózg tekstowy — katalog w kodzie ma 78 pozycji od OpenAI, Google, Anthropic, xAI i ElevenLabs, każda z latencją i kosztem za minutę pokazanymi w interfejsie, żeby wybór był świadomy, a nie zasłyszany.
Telefonię prowadzimy sami, nie wynajmujemy jej od dostawcy głosu. Połączenia idą przez własnego Asteriska, z routingiem po godzinach pracy i strefie czasowej, harmonogramem nocnym (na przykład 22:00 → 06:00) i dopasowaniem po priorytecie: nagłówek SIP Diversion, potem numer Kallina, potem reguła zapasowa. Dla OpenAI Realtime działa mostek 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 syntezy mowy w językach innych niż angielski domyślny jest `eleven_flash_v2_5` — 32 języki, około 75 ms latencji; lepszy jakościowo `eleven_turbo_v2_5` kosztuje około 250 ms. Wybór nie jest schowany w kodzie, to pole w konfiguracji agenta.
78 modeli w `LLM_MODELS`, pogrupowanych w interfejsie po dostawcy, razem ze zmierzoną latencją i kosztem za minutę — od `gpt-5-nano` przy około 806 ms i mniej więcej 0,0004 $/min, po `claude-sonnet-4-6` przy około 1,55 s i mniej więcej 0,0225 $/min. Klient, który pyta „dlaczego odpowiada wolno”, dostaje odpowiedź z liczbami, a nie opinię.
Przekierowanie połączeń konfiguruje się po godzinach pracy i strefie czasowej, z obsługą harmonogramu nocnego i dopasowaniem po priorytecie (nagłówek SIP Diversion → numer Kallina → reguła zapasowa). Mostek `openai-realtime-bridge` odpowiada za konwersję AudioSocket między g711_ulaw a 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 trzyma żadnego klucza dostawcy: prosi Kallinę o sesję, a Kallina zwraca krótkotrwały podpisany URL. Jest też tryb `data-mode="inline"`, w którym osadzenie nie rysuje zupełnie niczego, a strona buduje własny interfejs na API `start()` / `stop()` / `toggle()` / `on(event, fn)`.
Dzwonienie partiami, 1–10 połączeń równocześnie, import kontaktów z CSV, logika ponawiania, podgląd na żywo z pauzą, wznowieniem i zatrzymaniem, plus follow-up SMS-em.
Konfiguracja agenta przyjmuje 32 języki (`LANGUAGES`), pełna mapa języków platformy ma 41 pozycji, 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 rozpoznania do wdrożenia
Jeden scenariusz z jasnym wejściem i jasnym wyjściem — odebrane połączenie na recepcji, potwierdzenie zamówienia, kampania wychodząca. Spisujemy wprost, czego agentowi nie wolno i którą drogą oddaje rozmowę człowiekowi.
Numer wchodzi na trunk SIP naszego Asteriska. Połączenia przychodzące i wychodzące testujemy osobno, bo osobno się psują: ograniczenie operatora na ruchu wychodzącym zostawia przychodzący w idealnym stanie.
`scripts/verify-voice-path.mjs` przechodzi dokładnie tę drogę co przeglądarka — wiersz konfiguracji, `get-widget-config`, potem `widget-voice-session` — i zatrzymuje się na podpisanym URL-u, nie otwierając websocketu. Działa na pojedynczym widżecie albo na wszystkich z aktywnym głosem, po 1–3 równolegle, i zwraca kod wyjścia, więc wchodzi wprost do crona.
Wybierasz między ElevenLabs Conversational AI, OpenAI Realtime i Gemini Live, albo zostawiasz „auto” i decyduje Kallina, po języku i dostępności. Dla syntezy mowy w językach innych niż angielski domyślny jest model `eleven_flash_v2_5` — 32 języki, w okolicach 75 ms; jeśli chcesz wyższej jakości i godzisz się na większe opóźnienie, `eleven_turbo_v2_5` to około 250 ms. Głosów OpenAI Realtime jest dziesięć, a ich silnik sięga `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 serwowany dzisiaj i ma 13 762 bajty. Jeśli chcesz własnego interfejsu, `data-mode="inline"` nie rysuje nic i zostawia Ci `start()`, `stop()`, `toggle()` oraz zdarzenia `state`, `message`, `error`. Uwaga na hosta: plik leży 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 przez `getUserMedia({audio:true})` i dopiero potem wywołuje `widget-voice-session`. Jeśli człowiek odmówi mikrofonu, żądanie sesji w ogóle nie powstaje, więc nie wydaje się żaden podpisany URL i nic się nie zużywa.
Tak — dzwonienie partiami, 1–10 równocześnie, kontakty z CSV, ponowienia i follow-up SMS-em. Ale połączenia wychodzące zależą od operatora telekomunikacyjnego, nie tylko od nas: w naszym rejestrze problemów jest udokumentowany przypadek, w którym centrala operatora zaczęła zwracać `403 Forbidden` na wszystkich połączeniach wychodzących, przy niezmienionej konfiguracji po naszej stronie i przy poprawnie działających połączeniach przychodzących. Dlatego ruch wychodzący testujemy osobno, zanim obiecamy kampanię.
Konfiguracja agenta przyjmuje 32 języki, wewnętrzna mapa języków ma 41 pozycji, a panel administracyjny jest przetłumaczony na 20. Rumuński jest domyślnym językiem nowych agentów.
Nie, i warto to wiedzieć przed planowaniem premiery. Workflow GitHub w repozytorium celuje w projekt Supabase Cloud, który został usunięty, więc „push na main = publikacja” przestało być prawdą po przejściu na własną infrastrukturę. Realna publikacja idzie przez SSH, przez skopiowanie plików i restart. Praktyczna konsekwencja: pilna zmiana potrzebuje człowieka, nie samego commita.
Przekazanie człowiekowi jest częścią scenariusza, nie wyjątkiem. Każdy agent ma spisane granice i skonfigurowaną na telefonii drogę przekazania; w samej rozmowie są bariery i kryteria oceny, właśnie po to, żeby sprawa spoza roli została zatrzymana, a nie zaimprowizowana.
Przykład poglądowy
Scenariusz użycia, bez danych klienta i bez przypisanych wyników handlowych.
Ktoś dzwoni na numer firmy o 23:40, poza godzinami pracy recepcji.
Asterisk stosuje regułę harmonogramu nocnego (na przykład 22:00 → 06:00) i dopasowuje po priorytecie: nagłówek SIP Diversion, potem numer Kallina, potem reguła zapasowa. Nocny agent odbiera na dostawcy wybranym w konfiguracji, doprecyzowuje prośbę i wywołuje narzędzia, których wolno mu użyć.
Połączenie zostaje w historii z transkrypcją, nagraniem, czasem trwania i kosztem w rozbiciu na dostawców. To, co wykracza poza rolę agenta, zostaje zatrzymane i przekazane dalej, zamiast być improwizowane.
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.
Możliwości współpracy
Obsługa głosowa na zatwierdzonych informacjach, z przekazaniem do operatora i jasnymi regułami nagrywania oraz przechowywania rozmów.
Definiujemy pilotaż wokół realnego procesu: użytkownicy, dane, integracje, koszty i kryteria odbioru. Rozszerzenie przychodzi po ocenie wyniku.
Ustalamy wymagania dotyczące dostępności, hostingu, ochrony danych i interoperacyjności. Każde połączenie z usługami AGE — Agenția de Guvernare Electronică, mołdawskiej agencji e-administracji — albo STISC, państwowej służby IT i cyberbezpieczeństwa, wymaga potwierdzenia uprawnień, dostępu i zgód.
To są scenariusze dopasowania, a nie oświadczenia o istniejących kontraktach czy partnerstwach. Proponowane funkcje potwierdzamy w zakresie prac projektu.
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țiiOpowiedz nam o swoim procesie. Wspólnie ustalimy, co warto zbudować, co da się połączyć i jak sprawdzimy wynik.