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Расскажите о своём процессе. Вместе определим, что стоит построить, что можно подключить и как проверим результат.