Ascultă
Entiende la petición en el contexto de la conversación y de las reglas del negocio.
Agenți vocali AI Platformă
Construimos agentes que atienden y lanzan llamadas, usan la información del negocio y trabajan con tus sistemas. De la primera pregunta hasta una solicitud completa, una confirmación o el traspaso a un compañero.
Kallina
Entiende la petición en el contexto de la conversación y de las reglas del negocio.
Consulta la base de conocimiento y las integraciones autorizadas antes de responder.
Completa los datos, ejecuta la acción permitida o traspasa la conversación a una persona.
Preguntas frecuentes, recogida de solicitudes y devolución de llamada a quien ha pedido que le contacten.
Confirmaciones y coordinación, con la información del sistema de pedidos conectado.
Reúne los detalles necesarios. El acceso al calendario y la reserva se acuerdan para cada integración.
Los escenarios, el número de teléfono, los idiomas y las acciones se configuran para cada implantación. El equipo mantiene la posibilidad de tomar la conversación.
Kallina en detalle
Kallina es la plataforma sobre la que construimos agentes que hablan por teléfono y en la página web. Un agente tiene un papel escrito, una base de conocimiento aprobada, un conjunto de herramientas que puede llamar y un límite más allá del cual entrega la conversación a una persona. La conversación no se acaba en el transcript: la llamada tiene duración, coste por proveedor, grabación y análisis, todo ligado a la cuenta del negocio.
El motor de voz no es uno solo. En la configuración del agente eliges entre ElevenLabs Conversational AI, OpenAI Realtime, Gemini Live o «auto», en cuyo caso Kallina elige el proveedor según el idioma, la carga y la disponibilidad. Por encima eliges aparte el cerebro de texto — el catálogo del código tiene 78 entradas de OpenAI, Google, Anthropic, xAI y ElevenLabs, cada una con su latencia y su coste por minuto a la vista en la interfaz, para que la elección sea informada y no de oídas.
La telefonía es nuestra, no alquilada al proveedor de voz. Las llamadas pasan por un Asterisk propio, con enrutado por horario y zona horaria, horario nocturno (por ejemplo 22:00 → 06:00) y coincidencia por prioridad: la cabecera SIP Diversion, luego el número de Kallina, luego la regla de reserva. Para OpenAI Realtime hay un puente AudioSocket que convierte el códec en los dos sentidos, g711_ulaw ↔ PCM16.
En `AGENT_PROVIDERS` hay cuatro opciones: `elevenlabs` (ConvAI), `openai-realtime`, `gemini-live` y `auto`. Para text-to-speech en idiomas distintos del inglés, por defecto está `eleven_flash_v2_5` — 32 idiomas, unos 75 ms de latencia; la alternativa de más calidad, `eleven_turbo_v2_5`, cuesta unos 250 ms. La elección no está escondida en el código: es un campo de la configuración del agente.
78 modelos en `LLM_MODELS`, agrupados por proveedor en la interfaz junto con la latencia medida y el coste por minuto — desde `gpt-5-nano` con unos 806 ms y unos 0,0004 $/min, hasta `claude-sonnet-4-6` con unos 1,55 s y unos 0,0225 $/min. Un cliente que pregunta «por qué responde despacio» recibe una respuesta con cifras, no una opinión.
El desvío de llamadas se configura por horario de trabajo y zona horaria, con soporte para horario nocturno y coincidencia por prioridad (cabecera SIP Diversion → número de Kallina → regla de reserva). El puente `openai-realtime-bridge` hace la conversión AudioSocket entre g711_ulaw y PCM16 para el flujo de audio bidireccional.
`<script src="https://app.kallina.info/embed.js" data-widget="WIDGET_ID"></script>`. La página nunca se entera de qué agente responde y no guarda ninguna clave de proveedor: le pide a Kallina una sesión, y Kallina devuelve una URL firmada de corta duración. También existe el modo `data-mode="inline"`, en el que el embed no dibuja absolutamente nada y la página se hace su propia interfaz sobre la API `start()` / `stop()` / `toggle()` / `on(event, fn)`.
Llamada por lotes con 1–10 llamadas simultáneas, importación de contactos desde CSV, lógica de reintento, seguimiento en tiempo real con pausa, reanudación y parada, más seguimiento por SMS.
La configuración del agente acepta 32 idiomas (`LANGUAGES`), el mapa completo de idiomas de la plataforma tiene 41 entradas y el panel de administración está traducido a 20 (`src/i18n/locales`). El rumano es el idioma por defecto en `DEFAULT_VALUES`.
Datos y funcionamiento
De la exploración a la implantación
Un escenario con entrada clara y salida clara — llamada recibida en recepción, confirmación de pedido, campaña de llamadas. Escribimos de forma explícita qué no puede hacer el agente y por qué vía entrega la conversación a una persona.
El número entra por el trunk SIP de nuestro Asterisk. Las llamadas entrantes y las salientes se prueban por separado, porque se pueden romper por separado: una restricción del operador en las salientes deja las entrantes funcionando perfectamente.
`scripts/verify-voice-path.mjs` recorre exactamente el camino de un navegador — la fila de configuración, `get-widget-config`, luego `widget-voice-session` — y se detiene en la URL firmada, sin abrir el websocket. Se ejecuta sobre un solo widget o sobre todos los que tienen voz activa, con 1–3 en paralelo, y devuelve código de salida, así que puede entrar directamente en un cron.
Eliges entre ElevenLabs Conversational AI, OpenAI Realtime y Gemini Live, o dejas «auto» y decide Kallina según el idioma y la disponibilidad. Para la síntesis de voz en idiomas distintos del inglés, por defecto está el modelo `eleven_flash_v2_5` — 32 idiomas, en torno a 75 ms; si quieres más calidad y aceptas más retardo, `eleven_turbo_v2_5` está en torno a 250 ms. Las voces de OpenAI Realtime son diez, y su motor llega hasta `gpt-realtime-2.1`.
Una línea: `<script src="https://app.kallina.info/embed.js" data-widget="WIDGET_ID"></script>`, cargada como script normal, no como módulo. El fichero se sirve hoy y ocupa 13.762 bytes. Si quieres tu propia interfaz, `data-mode="inline"` no dibuja nada y te deja `start()`, `stop()`, `toggle()` y los eventos `state`, `message`, `error`. Ojo con el host: el fichero está en `app.kallina.info`, no en `kallina.info` — son dos aplicaciones en dos servidores distintos.
No. El orden en `embed.js` es: cargar el SDK, pedir el micrófono con `getUserMedia({audio:true})` y solo después llamar a `widget-voice-session`. Si la persona rechaza el micrófono, la petición de sesión ya no se hace, así que no se emite ninguna URL firmada y no se gasta nada.
Sí — llamada por lotes, 1–10 simultáneas, contactos desde CSV, reintentos y seguimiento por SMS. Pero las llamadas salientes dependen del operador telefónico, no solo de nosotros: en nuestro registro de incidencias está documentado un caso en el que la centralita del operador empezó a devolver `403 Forbidden` en todas las salidas, con nuestra configuración sin tocar y con las llamadas entrantes funcionando con normalidad. Por eso probamos las salidas por separado antes de prometer una campaña.
La configuración del agente acepta 32 idiomas, el mapa interno de idiomas tiene 41 entradas y el panel de administración está traducido a 20. El rumano es el idioma por defecto de los agentes nuevos.
No, y conviene saberlo antes de planificar un lanzamiento. El workflow de GitHub del repositorio apunta a un proyecto de Supabase Cloud que se ha borrado, así que «push a main = publicación» ya no es cierto desde la migración a infraestructura propia. La publicación real se hace por SSH, con copia y reinicio. Consecuencia práctica: un cambio urgente necesita una persona, no solo un commit.
La entrega a una persona forma parte del escenario, no es una excepción. Cada agente tiene límites escritos y una vía de traspaso configurada en la telefonía; y en la conversación hay barreras y criterios de evaluación del éxito, precisamente para que un caso fuera de su papel se detenga y no se improvise.
Ejemplo ilustrativo
Un escenario de uso, sin datos de cliente ni resultados comerciales atribuidos.
Alguien llama al número del negocio a las 23:40, fuera del horario de recepción.
Asterisk aplica la regla de horario nocturno (por ejemplo 22:00 → 06:00) y hace la coincidencia por prioridad: la cabecera SIP Diversion, luego el número de Kallina, luego la regla de reserva. El agente de noche contesta con el proveedor elegido en la configuración, aclara la petición y llama a las herramientas que tiene permitido usar.
La llamada queda en el historial con transcript, grabación de audio, duración y coste desglosado por proveedor. Lo que supera el papel del agente se detiene y se traspasa, en lugar de improvisarse.
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.
Posibilidades de colaboración
Asistencia de voz sobre información aprobada, con paso a un operador y reglas claras sobre la grabación y la conservación de las conversaciones.
Definimos un piloto alrededor de un proceso real: usuarios, datos, integraciones, costes y criterios de aceptación. La ampliación viene después de evaluar el resultado.
Fijamos los requisitos de accesibilidad, alojamiento, protección de datos e interoperabilidad. Cualquier conexión con los servicios de la Agencia de Gobernanza Electrónica de Moldavia (AGE) o del servicio nacional de tecnologías de la información (STISC) exige validar la elegibilidad, el acceso y las aprobaciones.
Estos son escenarios de adaptación, no declaraciones sobre contratos o alianzas existentes. Las funciones propuestas se confirman dentro del alcance de trabajo del proyecto.
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țiiCuéntanos tu proceso. Juntos decidimos qué merece la pena construir, qué podemos conectar y cómo verificamos el resultado.