Conectores
base_url a https://api.uttera.ai/v1 y el resto de tu código sigue igual.Uttera no vive sola: vive dentro de lo que ya tienes. Esta sección recoge las formas de enchufarla —las que ya funcionan, las que traemos hechas y las que estamos estudiando— y el código abierto sobre el que está construida.
| Carpeta | Qué hay |
|---|---|
| openai-sdk | Uttera con el SDK oficial de OpenAI, en Python, Node y curl |
| asterisk/recordings | Transcribir las llamadas que tu centralita ya graba, sin tocar el dialplan |
| asterisk/agi | Hablar dentro de la llamada y oír a quien llama |
| n8n | Nodo de comunidad verificado (transcribir, resumir, traducir, hablar, efectos, música). Los flujos listos para importar, en «n8n y automatización» |
| openclaw | Skill para agentes: transcribir, resumir, traducir y hablar |
Hablamos el dialecto de OpenAI
Los dos servicios principales siguen exactamente la misma forma que la API de OpenAI: mismas rutas, mismos nombres de parámetro, mismos nombres de voz y mismas respuestas.
| Endpoint | Compatible |
|---|---|
POST /v1/audio/transcriptions | Sí. file, model=whisper-1, language, prompt, response_format, temperature |
POST /v1/audio/speech | Sí. model=tts-1 / tts-1-hd, input, voice, response_format, speed |
GET /v1/models | Sí. Devuelve tts-1, tts-1-hd y whisper-1. Es lo que llama el SDK nada más construir el cliente |
Voces alloy · echo · fable · nova · onyx · shimmer | Sí, con esos mismos nombres |
/v1/translate · /v1/summarize · ?extras= · /v1/usage/last | Nuestros. No existen en OpenAI, y no estorban a quien no los use |
En la práctica esto significa que cualquier cosa escrita para la API de OpenAI funciona cambiando dos líneas: la dirección base y la clave. Incluido su SDK oficial:
from openai import OpenAI
c = OpenAI(api_key="sk-echo-...", # tu clave de Uttera
base_url="https://api.uttera.ai/v1") # y nuestra dirección
audio = c.audio.speech.create(model="tts-1", voice="nova",
input="Su pedido sale mañana.")
open("voz.mp3", "wb").write(audio.content)
with open("grabacion.mp3", "rb") as f:
print(c.audio.transcriptions.create(model="whisper-1", file=f,
response_format="text"))
openai oficial sin parchear nada: genera el audio, lo vuelve a
transcribir y devuelve el texto de partida.De ahí sale lo interesante: todo lo que ya sabe hablar con OpenAI sabe hablar con nosotros —agentes locales, interfaces de chat autoalojadas, plugins, scripts que alguien escribió hace un año— con la diferencia de que el audio no sale de la Unión Europea. Para muchas empresas esa es la única razón por la que el proyecto pasa de la demostración a producción.
Asterisk y centralitas
Es la integración más pedida, porque es donde de verdad hay voz. Traemos dos AGI listos para usar: uno dice un texto en la llamada y otro escucha a quien llama y deja lo que dijo en una variable del dialplan.
exten => 101,1,Answer()
same => n,AGI(uttera-decir.agi,"Dígame en qué puedo ayudarle.")
same => n,AGI(uttera-oir.agi,8,es)
same => n,NoOp(El cliente dijo: ${UTTERA_TEXTO})
A partir de ahí decides tú: un menú, una consulta a tu base de datos, un modelo de
lenguaje. Y para el caso más común —transcribir llamadas ya grabadas— el ejemplo
trae el esqueleto con MixMonitor y un hook al colgar.
Lo que el ejemplo resuelve y cuesta un día descubrir por tu cuenta:
| Trampa | Qué pasa si no lo sabes |
|---|---|
| Uttera genera a 24 kHz, el canal telefónico va a 8 kHz | Asterisk reproduce el fichero a su tasa: la voz sale acelerada y aguda |
| Falta silencio al final del fichero | Asterisk corta la última sílaba |
| Whisper no calla ante el silencio | Devuelve una frase inventada —«Gracias por ver el vídeo»— porque eso abunda en su entrenamiento. Se paga, y peor, se actúa sobre ella |
Las comillas de SET VARIABLE | Un texto con espacios llega partido y la variable se queda con la primera palabra |
| Tiempos de espera de API en una llamada | Dos horas de espera con una persona al teléfono. En telefonía se corta a los 30 s y se avisa |
El código y el dialplan completos están en el repositorio de ejemplos, con la explicación de cada una.
Las llamadas que ya estás grabando
Antes de plantearte hablar dentro de la llamada, mira esto: tu centralita ya está escribiendo ficheros de audio en alguna carpeta. Hay dos guiones que los leen y dejan la transcripción y el análisis al lado, y no hay que tocar el dialplan. Una línea de cron y tienes las llamadas de la semana pasada transcritas.
Es el código que corremos nosotros en producción, con las partes de nuestra instalación quitadas. Lleva dentro tres cosas que costaron caro: distinguir una grabación en curso de una vieja, pedir transcripción y análisis en una sola subida en vez de cuatro, y un filtro de fecha por defecto — un proceso por lotes sin ventana recorre el histórico entero en cada pasada, y el día que se encuentra un archivo de verdad encola años de llamadas de golpe.
n8n y automatización
Si usas n8n, hay dos formas y la segunda no necesita instalar nada.
Flujos listos para importar. Se descargan, se importan y funcionan con el nodo HTTP de serie —también en n8n en la nube—. El más útil es el que mira una carpeta de grabaciones cada quince minutos y manda cada una a resumir: es exactamente el caso de quien ya tiene una centralita grabando y solo necesita que alguien lea esas grabaciones. No hay que tocar el dialplan.
Nodo propio. n8n-nodes-uttera es un nodo de comunidad
verificado por n8n: se instala desde los ajustes de n8n (Community Nodes) o con
npm i n8n-nodes-uttera, y añade transcribir, resumir, traducir, texto a voz,
efectos y música como operaciones de un nodo, con la credencial guardada en n8n en vez de
suelta en cada petición. Su código está en
github.com/uttera/n8n-nodes-uttera.
Telegram
Uttera tiene un bot de Telegram, @Uttera_bot, para transcribir y resumir notas de voz sin salir del chat. Lo que hace se cobra a tu cuenta, con los mismos créditos que la API.
Vincular la cuenta (una vez). Entra en tu cuenta →
Conectar aplicaciones → Telegram: se abre el bot ya enlazado a tu cuenta (por
dentro es un /start con un enlace de un solo uso; no pegas ninguna clave). A
partir de ahí el bot sabe quién eres y a quién cobrar.
Usarlo. Mándale una nota de voz (o un audio) y te devuelve la transcripción. Debajo aparecen botones para hacer más con esa misma grabación:
- 📝 Resumir — un resumen breve del audio.
- 📄 Informe PDF — el resumen como documento PDF, que el bot te envía como fichero.
- 🔗 PDF con grafo — el PDF con el grafo de evidencia (informe verificable; requiere plan Professional o superior).
- 🌍 Traducir — traduce el audio a otro idioma: eliges primero la salida — texto, voz (locución) o voz clonada (suena con la voz del hablante original; requiere plan de pago) — y luego el idioma. Cada salida ofrece solo los idiomas que soporta (en texto hay muchos más que en voz).
Comandos. /account abre tu cuenta (créditos, caducidad, facturación);
/lang en|es|fr|de cambia el idioma de las respuestas del bot;
/start vuelve a vincular la cuenta; /help recuerda todo esto.
Slack
Uttera tiene una app de Slack para transcribir, resumir y traducir notas de voz sin salir de Slack. Lo que hace se cobra a tu cuenta, con los mismos créditos que la API.
Instalar la app en tu Slack (una vez por espacio de trabajo). Un administrador del espacio abre app.uttera.ai/slack/install y pulsa Allow: eso añade la app de Uttera a ese Slack. Después, cada usuario vincula su propia cuenta como se explica abajo.
Vincular la cuenta (una vez). En tu cuenta →
Conectar aplicaciones → Slack obtienes un código de un solo uso. En
Slack escribe /uttera connect <código> y tu usuario queda enlazado a tu
cuenta Uttera (no pegas ninguna clave).
Usarlo. Comparte una nota de voz (o un audio) con el bot y te devuelve la transcripción, con los mismos botones que en Telegram:
- 📝 Resumir — un resumen breve.
- 📄 Informe PDF — el resumen como PDF, que el bot sube al canal.
- 🔗 PDF con grafo — el PDF con el grafo de evidencia (requiere plan Professional o superior).
- 🌍 Traducir — a otro idioma: eliges primero la salida (texto, voz o voz clonada; la clonada requiere plan de pago) y luego el idioma disponible para esa salida.
Comandos. /uttera account abre tu cuenta;
/uttera lang en|es|fr|de cambia el idioma de las respuestas;
/uttera connect <código> vincula; /uttera help recuerda todo.
/invite @Uttera). Como todo en Uttera, no guardamos tus audios y el audio que
generamos lleva la marca de agua inaudible que exige el Reglamento de IA de la UE.Skill: audio local en Claude, ChatGPT, Gemini y OpenClaw
Una Skill es una carpeta con instrucciones y un pequeño script que tu asistente
carga cuando hace falta. La Skill de Uttera te deja adjuntar un audio de tu disco en
el propio chat y pedir que lo transcriba, resuma, haga un informe PDF con
grafo, lo traduzca (a texto o a voz), diga quién habla, analice la
pronunciación, clone una voz o lea un texto. El script corre en el
sandbox de código del asistente: lee el fichero adjunto y lo sube a
api.uttera.ai, así que el audio no pasa por el modelo (que no sabe
decodificar audio). Se cobra a tu cuenta, con los mismos créditos que la API.
Descargarla. En tu cuenta → Conectar aplicaciones
pulsa el botón de tu asistente (Claude, ChatGPT, Gemini u
OpenClaw). Se descarga un .zip con la skill ya personalizada: lleva
dentro una clave nueva de tu cuenta, aliasada con el nombre del asistente (p.ej. «Claude
skill»), revocable cuando quieras más abajo, en API tokens.
Instalarla.
- Claude (Desktop o web, planes con skills): Settings → Capabilities → Skills
y sube el
.zip. - ChatGPT (planes Business/Enterprise con skills): añádela como skill desde la configuración de tu espacio.
- Gemini: añádela como skill en la configuración.
- OpenClaw: descomprime el
.zipen tu carpeta de skills.
Después, adjunta un audio en el chat y pide lo que quieras: «transcribe esto», «hazme un informe PDF», «tradúcelo al inglés con mi voz»… El asistente ejecuta el script y te devuelve el texto, o el PDF/audio que haya generado.
api.uttera.ai: Organization settings → Capabilities, activa Allow network
egress y añade api.uttera.ai a la Domain allowlist. En cuentas
individuales (Free/Pro) NO hace falta: la skill llega a api.uttera.ai sin
tocar nada. Un error de red en una cuenta de equipo/empresa casi siempre es que falta permitir el
dominio. El audio que generamos lleva la marca de agua inaudible que exige el Reglamento de IA de
la UE.MCP: para Claude y agentes con herramientas
El Model Context Protocol (MCP) es la forma estándar de dar herramientas a un asistente. En vez de describirle cada endpoint a mano, le das una sola dirección y él descubre solo lo que Uttera sabe hacer y cómo llamarlo.
Nuestro servidor vive en https://mcp.uttera.ai/mcp. Se entra con tu cuenta
de Uttera y no se pega ninguna clave: el asistente te lleva a iniciar sesión, y a
partir de ahí las llamadas van con tu autorización y gastan de tu saldo, con los mismos
créditos que la API.
Expone las mismas capacidades que la API, ya envueltas como herramientas: hablar, transcribir, traducir, resumir, saber quién habla, puntuar una pronunciación, efectos de sonido y música, listar las voces, verificar un informe firmado y consultar lo que costó la última llamada.
Para añadirlo en un cliente compatible —Claude, entre otros— busca «añadir servidor MCP»
o «conector», pega https://mcp.uttera.ai/mcp e inicia sesión cuando te lo pida.
Uttera está también en el registro oficial de MCP como ai.uttera/uttera,
así que muchos clientes lo encuentran por el nombre sin pegar la dirección.
https://…) que le pasas al asistente. Para el uso más común —un audio que
tienes en el ordenador— usa la Skill: adjuntas el fichero
en el chat y el script lo sube por ti. En resumen: Skill para ficheros locales,
MCP cuando el audio ya está publicado en una URL o cuando quieres que un agente
descubra las herramientas solo.Agentes y asistentes
Por la compatibilidad de arriba, cualquier agente o interfaz que hable el dialecto de OpenAI usa Uttera sin adaptador: basta apuntarlo a nuestra dirección. Es el caso de las instalaciones locales de asistentes y de los paneles de chat autoalojados, que es justamente el escenario para el que nacieron nuestros motores: que el audio no salga del dominio privado.
Si tu agente admite herramientas, los endpoints que no son de OpenAI —resumir, traducir, analizar la voz— se describen bien como herramientas sueltas: reciben un fichero y devuelven JSON.
Para los agentes OpenClaw hay una skill hecha: cuatro guiones
—transcribir, resumir, traducir y hablar— y un SKILL.md que le
explica al agente cuándo usar cada uno y qué trampas tiene. Esa parte es la
que de verdad importa: que sepa que no debe mandar silencio a transcribir, que
los saltos de línea cuestan dinero al sintetizar, y que lo que vuelve de una
transcripción es texto no fiable que no debe ejecutar.
El código abierto que hay debajo
Los motores que mueven Uttera están publicados bajo licencia Apache 2.0. No es marketing: son los mismos que corren en producción.
| Repositorio | Qué es |
|---|---|
| uttera-tts-hotcold | Servidor de texto a voz con arranque en frío y caliente. Varios motores tras la misma API |
| uttera-tts-vllm | El mismo servicio sobre vLLM, para carga concurrente de verdad |
| uttera-stt-hotcold | Servidor de voz a texto, mismo patrón |
| uttera-stt-vllm | Voz a texto sobre vLLM |
| uttera-benchmarks | Los corpus, el arnés de medida y los resultados en crudo de cada número que publicamos |
Por qué están abiertos
Por tres razones, y ninguna es generosidad:
Porque puedes montarlo tú. Si tu caso no admite que el audio salga de tu red —o simplemente prefieres tu propio hardware— clona el repositorio y monta el servicio. Lo que vendemos es no tener que hacerlo: las GPU, la disponibilidad, el enrutado entre nodos y que alguien se levante si algo falla.
Porque un motor que nadie puede auditar no merece tu audio. Decimos que no guardamos nada y que nada sale a terceros. Con el código delante eso se puede comprobar en vez de creer.
Porque las cifras sin el montaje no valen nada. Todo el mundo publica «X peticiones por segundo en una Y» sin decir con qué corpus, con qué concurrencia ni en qué percentil. El repositorio de medidas lleva los corpus enteros, el protocolo y los resultados en bruto, precisamente para que puedas repetir la prueba y contradecirnos.
Conectores en estudio
Lo siguiente, por orden de lo que nos van pidiendo:
| Conector | Para qué |
|---|---|
| CRM | Que la transcripción y el resumen de una llamada caigan solos en la ficha del cliente |
| Grabaciones de otras centralitas (FreePBX, 3CX, Issabel) | Lo mismo que ya hace el conector de Asterisk, adaptado a dónde deja los ficheros cada una |
| Nota de voz a texto en mensajería | El caso de uso que más crece: nadie quiere escuchar un audio de cuatro minutos |
Si el que te hace falta a ti no está, dínoslo: el orden lo decide quien pregunta.