Перейти к основному содержимому
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 мс задержки; альтернатива более высокого качества, `eleven_turbo_v2_5`, стоит примерно 250 мс. Выбор не спрятан в коде, это поле в конфигурации агента.

02

Каталог моделей с отображаемыми задержкой и стоимостью

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

03

Собственная телефония на Asterisk

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

04

Голосовой embed в одну строку, без 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 мс; если вам нужно более высокое качество и вы принимаете большую задержку, `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, повторные попытки и follow-up через SMS. Но исходящие звонки зависят от телефонного оператора, а не только от нас: в нашем журнале проблем задокументирован случай, когда центральная станция оператора начала возвращать `403 Forbidden` на все исходящие, при нашей неизменной конфигурации и при нормальной работе входящих звонков. Поэтому мы тестируем исходящие отдельно, прежде чем обещать кампанию.

На скольких языках он говорит и на скольких управляется?

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

Публикуется ли автоматически при каждом изменении кода?

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

Что происходит, если агент не знает ответа?

Передача человеку — часть сценария, а не исключение. У каждого агента есть прописанные ограничения и настроенный путь перевода на телефонию; а в разговоре есть ограничения и критерии оценки успеха, именно чтобы случай вне роли был остановлен, а не импровизирован.

Показательный пример

Входящий звонок ночью, который попадает куда нужно

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

Исходная ситуация

Кто-то звонит на номер бизнеса в 23:40, вне расписания на ресепшене.

Как это работает

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

Rezultatul

Вызов остаётся в истории с транскриптом, аудиозаписью, длительностью и стоимостью, разбитой по поставщику. Всё, что выходит за рамки роли агента, останавливается и передаётся дальше, вместо того чтобы импровизироваться.

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

Возможности сотрудничества

Kallina, в контексте вашей организации.

Информирование и приём запросов

Голосовая поддержка на основе утверждённой информации, с передачей оператору и чёткими правилами записи и хранения разговоров.

Частные компании

Мы определяем пилот вокруг реального процесса: пользователи, данные, интеграции, затраты и критерии приемки. Масштабирование следует после оценки результата.

Государственные учреждения и компании

Мы устанавливаем требования к доступности, размещению, защите данных и совместимости. Любое соединение с сервисами AGE или STISC требует проверки соответствия, доступа и утверждений.

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

Обсудить пилот

Часть экосистемы.

Что вы хотели бы наладить?

Расскажите о своём процессе. Вместе определим, что стоит построить, что можно подключить и как проверим результат.

Давайте обсудим