Ascultă
Розуміє запит у контексті розмови та правил бізнесу.
Agenți vocali AI Platformă
Будуємо агентів, які приймають та ініціюють дзвінки, використовують інформацію бізнесу і працюють з вашими системами. Від першого запитання до повної заявки, підтвердження або передавання колезі.
Kallina
Розуміє запит у контексті розмови та правил бізнесу.
Звертається до бази знань і дозволених інтеграцій, перш ніж відповісти.
Заповнює дані, виконує дозволену дію або передає розмову людині.
Часті запитання, приймання заявок і зворотні дзвінки тим, хто просив зв'язатися.
Підтвердження і координація — з даними з підключеної системи замовлень.
Збирає потрібні деталі. Доступ до календаря і бронювання визначаються для кожної інтеграції.
Сценарії, номер телефону, мови та дії налаштовуються під кожне впровадження. За командою лишається можливість перехопити розмову.
Kallina в деталях
Kallina — це платформа, на якій ми будуємо агентів, що говорять телефоном і на вебсторінці. Агент має написану роль, затверджену базу знань, набір інструментів, які може викликати, і межу, за якою передає розмову людині. Розмова не закінчується транскриптом: дзвінок має тривалість, вартість за кожним провайдером, запис і розбір — усе прив'язане до облікового запису бізнесу.
Голосовий рушій не один. У конфігурації агента ви обираєте між ElevenLabs Conversational AI, OpenAI Realtime, Gemini Live або «auto» — тоді Kallina сама добирає провайдера за мовою, навантаженням і доступністю. Поверх цього окремо обирається текстовий «мозок»: каталог у коді містить 78 записів від OpenAI, Google, Anthropic, xAI та ElevenLabs, і в кожного в інтерфейсі показані затримка і вартість хвилини — щоб вибір був свідомий, а не з чуток.
Телефонія наша, а не орендована в постачальника голосу. Дзвінки йдуть через власний Asterisk, з маршрутизацією за годинами роботи і часовим поясом, нічним розкладом (наприклад, 22:00 → 06:00) і добором за пріоритетом: заголовок SIP Diversion, потім номер Kallina, потім резервне правило. Для OpenAI Realtime є міст AudioSocket, який конвертує кодек в обидва боки, g711_ulaw ↔ PCM16.
У `AGENT_PROVIDERS` чотири варіанти: `elevenlabs` (ConvAI), `openai-realtime`, `gemini-live` та `auto`. Для синтезу мовлення мовами, крім англійської, типово стоїть `eleven_flash_v2_5` — 32 мови, затримка близько 75 мс; якісніша альтернатива, `eleven_turbo_v2_5`, обходиться приблизно у 250 мс. Вибір не схований у коді — це поле в конфігурації агента.
78 моделей у `LLM_MODELS`, згрупованих за провайдером в інтерфейсі разом із виміряною затримкою і вартістю хвилини — від `gpt-5-nano` з приблизно 806 мс і близько 0,0004 $/хв до `claude-sonnet-4-6` з приблизно 1,55 с і близько 0,0225 $/хв. Клієнт, який запитує «чому відповідає повільно», отримує відповідь із цифрами, а не думку.
Переадресація дзвінків налаштовується за робочими годинами і часовим поясом, з підтримкою нічного розкладу і добором за пріоритетом (заголовок SIP Diversion → номер Kallina → резервне правило). Міст `openai-realtime-bridge` виконує конвертацію AudioSocket між g711_ulaw і PCM16 для двостороннього аудіопотоку.
`<script src="https://app.kallina.info/embed.js" data-widget="WIDGET_ID"></script>`. Сторінка ніколи не дізнається, який агент відповідає, і не тримає жодного ключа провайдера: вона просить у Kallina сесію, а Kallina повертає підписаний URL із коротким строком життя. Є і режим `data-mode="inline"`, у якому embed не малює взагалі нічого, а сторінка сама будує інтерфейс поверх API `start()` / `stop()` / `toggle()` / `on(event, fn)`.
Обдзвін партіями по 1–10 одночасних дзвінків, імпорт контактів із CSV, логіка повторних спроб, стеження в реальному часі з паузою, відновленням і зупинкою, плюс наступне SMS.
Конфігурація агента приймає 32 мови (`LANGUAGES`), повна карта мов платформи містить 41 запис, а панель адміністрування перекладена на 20 (`src/i18n/locales`). Румунська — мова за замовчуванням у `DEFAULT_VALUES`.
Дані та робота системи
Від вивчення до впровадження
Один сценарій із ясним входом і ясним виходом — вхідний дзвінок на ресепшн, підтвердження замовлення, кампанія обдзвону. Прямо пишемо, чого агентові робити не можна і яким шляхом він передає розмову людині.
Номер заводиться на SIP-транк нашого Asterisk. Вхідні та вихідні дзвінки тестуються окремо, бо й ламаються вони окремо: обмеження оператора на вихідні лишає вхідні працювати бездоганно.
`scripts/verify-voice-path.mjs` проходить рівно той шлях, що й браузер — рядок у конфігурації, `get-widget-config`, потім `widget-voice-session` — і зупиняється на підписаному URL, не відкриваючи websocket. Запускається на одному віджеті або на всіх з увімкненим голосом, по 1–3 паралельно, і повертає код виходу, тобто може стояти просто в cron.
Ви обираєте між ElevenLabs Conversational AI, OpenAI Realtime і Gemini Live або лишаєте «auto», і тоді вирішує Kallina — за мовою і доступністю. Для синтезу мовлення мовами, крім англійської, типово стоїть модель `eleven_flash_v2_5` — 32 мови, близько 75 мс; якщо потрібна вища якість і прийнятна більша затримка, `eleven_turbo_v2_5` — близько 250 мс. Голосів у OpenAI Realtime десять, а їхній рушій доходить до `gpt-realtime-2.1`.
Один рядок: `<script src="https://app.kallina.info/embed.js" data-widget="WIDGET_ID"></script>`, підключається як звичайний скрипт, не як модуль. Файл віддається вже сьогодні і важить 13 762 байти. Якщо потрібен свій інтерфейс, `data-mode="inline"` не малює нічого і лишає вам `start()`, `stop()`, `toggle()` та події `state`, `message`, `error`. Увага до хоста: файл лежить на `app.kallina.info`, а не на `kallina.info` — це два застосунки на двох різних серверах.
Ні. Порядок в `embed.js` такий: завантажити SDK, попросити мікрофон через `getUserMedia({audio:true})`, і лише потім викликати `widget-voice-session`. Якщо людина відмовляє в мікрофоні, запит сесії не робиться взагалі — отже, підписаний URL не видається і нічого не витрачається.
Так — обдзвін партіями, 1–10 одночасно, контакти з CSV, повторні спроби і наступне SMS. Але вихідні дзвінки залежать від телефонного оператора, а не лише від нас: у нашому реєстрі проблем задокументований випадок, коли станція оператора почала повертати `403 Forbidden` на всі вихідні — за незмінної нашої конфігурації і нормально працюючих вхідних. Тому вихідні ми тестуємо окремо, перш ніж обіцяти кампанію.
Конфігурація агента приймає 32 мови, внутрішня карта мов містить 41 запис, а панель адміністрування перекладена на 20. Румунська — мова за замовчуванням для нових агентів.
Ні, і це варто знати до планування запуску. GitHub-workflow у репозиторії націлений на проєкт Supabase Cloud, який було видалено, тому «push у main = публікація» перестало бути правдою після переїзду на власну інфраструктуру. Справжня публікація робиться через SSH — копіюванням і перезапуском. Практичний наслідок: термінова зміна потребує людини, а не лише коміту.
Передавання людині — частина сценарію, а не виняток. Кожен агент має написані межі і шлях передавання, налаштований на телефонії; а в самій розмові є огорожі та критерії оцінювання успіху — саме щоб випадок поза роллю був зупинений, а не зімпровізований.
Ілюстративний приклад
Сценарій використання — без клієнтських даних і без приписаних комерційних результатів.
Хтось дзвонить на номер бізнесу о 23:40, поза робочим часом ресепшн.
Asterisk застосовує правило нічного розкладу (наприклад, 22:00 → 06:00) і добирає за пріоритетом: заголовок SIP Diversion, потім номер Kallina, потім резервне правило. Нічний агент відповідає через обраного в конфігурації провайдера, уточнює запит і викликає ті інструменти, які йому дозволені.
Дзвінок лишається в історії з транскриптом, аудіозаписом, тривалістю і вартістю в розбивці за провайдером. Те, що виходить за роль агента, зупиняється і передається далі, замість того щоб бути зімпровізованим.
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.
Можливості співпраці
Голосова допомога на затвердженій інформації, з переходом до оператора і ясними правилами запису та зберігання розмов.
Визначаємо пілот навколо реального процесу: користувачі, дані, інтеграції, витрати і критерії приймання. Розширення — після оцінювання результату.
Визначаємо вимоги до доступності, розміщення, захисту даних та інтероперабельності. Будь-яке підключення до сервісів AGE (Агентство електронного урядування Молдови) або STISC (Служба інформаційних технологій і кібербезпеки) потребує підтвердження права на доступ, самого доступу і погоджень.
Це сценарії адаптації, а не заяви про наявні контракти чи партнерства. Запропоновані функції підтверджуються в обсязі робіт за проєктом.
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țiiРозкажіть про свій процес. Разом визначимо, що варто збудувати, що можна підключити і як перевіримо результат.