Перейти до основного вмісту
megapromotingПоговорімо
Продукти Kallina

Голосові ШІ-агенти Платформа

Добра розмова продовжується дією.

Ми створюємо агентів, які приймають і ініціюють дзвінки, використовують інформацію бізнесу та працюють із вашими системами. Від першого запитання до повного запиту, підтвердження або передання колезі.

СлухайтеПеревірДієГОЛОС + КОНТЕКСТ + ДІЯ
Як працює Kallina

Kallina

Від інформації до виконаної роботи.

01

Слухайте

Вона розуміє запит у контексті розмови та правил бізнесу.

02

Перевір

Звертається до бази знань і авторизованих інтеграцій, перш ніж відповісти.

03

Діє

Заповнює дані, виконує дозволену дію або передає розмову людині.

Де стає корисним.

Приймання та підтримка

Часті запитання, обробка звернень і повернення до осіб, які просили зв’язатися з ними.

Замовлення та доставлення

Підтвердження та координація, з інформацією із підключеної системи замовлень.

Кваліфікація та запис на час

Зберіть необхідні деталі. Доступ до календаря та резервування визначаються для кожної інтеграції.

Сценарії, номер телефону, мови та дії налаштовуються для кожного впровадження. Команда зберігає можливість перейти до розмови.

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.

01

Три голосові постачальники плюс позиція «auto»

У `AGENT_PROVIDERS` є чотири опції: `elevenlabs` (ConvAI), `openai-realtime`, `gemini-live` і `auto`. Для text-to-speech іншими мовами, ніж англійська, за замовчуванням є `eleven_flash_v2_5` — 32 мови, приблизно 75 ms затримки; якісніша альтернатива, `eleven_turbo_v2_5`, коштує приблизно 250 ms. Вибір не сховано в коді, це поле в конфігурації агента.

02

Каталог моделей із відображеними затримкою та вартістю

78 моделей у `LLM_MODELS`, згрупованих за постачальником в інтерфейсі разом із виміряною затримкою та вартістю за хвилину — від `gpt-5-nano` із приблизно 806 ms і близько 0,0004 $/хв, до `claude-sonnet-4-6` із приблизно 1,55 с і близько 0,0225 $/хв. Клієнт, який питає «чому відповідає повільно», отримує відповідь із цифрами, а не думку.

03

Власна телефонія на Asterisk

Переадресація дзвінків налаштовується за робочими годинами та часовим поясом, із підтримкою нічного графіка та зіставленням за пріоритетом (заголовок SIP Diversion → номер Kallina → резервне правило). Міст `openai-realtime-bridge` виконує конвертацію AudioSocket між g711_ulaw і PCM16 для двостороннього аудіопотоку.

04

Вбудований голосовий модуль в один рядок, без id агента на сторінці

`<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)`.

05

Кампанії вихідних дзвінків

Пакетний набір із 1–10 одночасних дзвінків, імпорт контактів із CSV, логіка повторних спроб, відстеження в реальному часі з паузою, відновленням і зупинкою, а також follow-up через SMS.

06

Мови

Конфігурація агента підтримує 32 мови (`LANGUAGES`), повна карта мов платформи має 41 запис, а панель адміністрування перекладена на 20 (`src/i18n/locales`). Румунська є мовою за замовчуванням у `DEFAULT_VALUES`.

Дані та робота

Що входить у систему. Що потрібно перевірити.

Де зберігаються дані
PostgreSQL через Supabase, із Row Level Security та pg_cron; 559 версійованих міграцій. Серверна логіка — це edge-функції Deno — 472 у репозиторії на момент перевірки.
Що ніколи не потрапляє на сторінку клієнта
Ключ постачальника голосу та ідентифікатор агента. Embed надсилає `POST /functions/v1/widget-voice-session` з `widget_id` — публічним ключем із `chat_widget_configs.widget_id`, а не внутрішнім id рядка — і сервер сам запитує в ElevenLabs підписаний URL через `convai/conversation/get_signed_url` і повертає його. Стара версія, яка ставила `agentId` прямо в HTML, повністю оминала Kallina.
База знань
Документи, завантажені на платформу, синхронізовані з RAG ElevenLabs. На них накладаються гілки обговорення, схеми збору даних і критерії оцінювання успішності дзвінка, визначені для кожного агента.
Вимірюване споживання до, а не після
Таблиця `usage_events` веде облік споживання з розбивкою за постачальником і за агентом. Перед будь-якою дією, що коштує грошей, функція `check-can-use` перевіряє кредит — ворота стоять перед дзвінком, а не рахунок наприкінці місяця.

Від дослідження до впровадження

Як ми готуємо проєкт із Kallina.

01

Обираємо один маршрут і прописуємо його межі

Сценарій із чітким входом і чітким виходом — дзвінок на рецепцію, підтвердження замовлення, кампанія дзвінків. Ми явно пишемо, чого агенту не можна робити і яким шляхом він передає розмову людині.

02

Підключаємо номер і перевіряємо в обидва боки

Номер надходить на SIP-транк нашого Asterisk. Вхідні та вихідні дзвінки тестуються окремо, бо можуть ламатися окремо: обмеження оператора на вихідні дзвінки залишає вхідні працювати бездоганно.

03

Перевіряємо шлях без витрати хвилин

`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 ms; якщо вам потрібна вища якість і ви приймаєте більшу затримку, `eleven_turbo_v2_5` — близько 250 ms. Голосів 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, повторні спроби та follow-up через SMS. Але вихідні дзвінки залежать від телефонного оператора, а не лише від нас: у нашому реєстрі проблем задокументовано випадок, коли центральне обладнання оператора почало повертати `403 Forbidden` на всі вихідні, при незмінній нашій конфігурації та з нормальними вхідними дзвінками. Тому ми тестуємо вихідні окремо, перш ніж обіцяти кампанію.

Скількома мовами він говорить і скількома керується?

Конфігурація агента підтримує 32 мови, внутрішня карта мов має 41 запис, а панель адміністрування перекладена 20 мовами. Румунська є мовою за замовчуванням для нових агентів.

Чи публікується автоматично після кожної зміни коду?

Ні, і це добре знати перед плануванням запуску. GitHub workflow у репозиторії націлений на проєкт Supabase Cloud, який було видалено, тож «push на main = публікація» більше не є правдою після міграції на власну інфраструктуру. Реальна публікація відбувається через SSH, з копіюванням і перезапуском. Практичний наслідок: термінова зміна потребує людини, а не лише commit.

Що стається, якщо агент не знає відповіді?

Передача людині є частиною сценарію, а не винятком. Кожен агент має прописані межі й налаштований шлях переведення в телефонію; а в розмові є ворота та критерії оцінки успіху, саме щоб випадок поза роллю був зупинений, а не імпровізований.

Ілюстративний приклад

Вхідний дзвінок уночі, який доходить куди треба

Сценарій використання, без даних клієнта чи приписаних комерційних результатів.

Початкова ситуація

Хтось телефонує на номер бізнесу о 23:40, поза графіком роботи рецепції.

Як працює

Asterisk застосовує нічне правило графіка (наприклад 22:00 → 06:00) і зіставляє за пріоритетом: заголовок SIP Diversion, потім номер Kallina, потім запасне правило. Нічний агент відповідає через вибраного в конфігурації постачальника, уточнює запит і викликає інструменти, якими має право користуватися.

Rezultatul

Дзвінок залишається в історії з транскриптом, аудіозаписом, тривалістю та вартістю, розбитою за постачальником. Те, що виходить за межі ролі агента, зупиняється і передається далі, а не імпровізується.

Що необхідно:Номер, підключений на SIP trunk нашого Asterisk, вихідні дзвінки дозволені оператором за потреби та зворотний дзвінок, а також агент із prompt, схваленою базою знань і письмовими обмеженнями.

Можливості співпраці

Kallina, у контексті вашої організації.

Інформування та приймання запитів

Голосова підтримка на основі затвердженої інформації, з передачею оператору та чіткими правилами щодо запису й зберігання розмов.

Приватні компанії

Ми визначаємо пілот навколо реального процесу: користувачі, дані, інтеграції, витрати та критерії приймання. Розширення відбувається після оцінки результату.

Державні установи та компанії

Визначаємо вимоги до доступності, хостингу, захисту даних та інтероперабельності. Будь-яке з’єднання з послугами AGE або STISC потребує валідації придатності, доступу та схвалень.

Це сценарії адаптації, а не заяви про наявні контракти чи партнерства. Запропоновані функції підтверджуються в межах робочої сфери проєкту.

Обговорити пілот

Частина екосистеми.

Що вам хотілося б налагодити?

Розкажіть про свій процес. Разом визначимо, що варто збудувати, що можна підключити і як перевіримо результат.

Поговорімо