UtteraUttera

Transcribir las llamadas de tu Asterisk, paso a paso

15 de septiembre de 2026

Si tienes un Asterisk, ya estás grabando llamadas. Y casi con seguridad esas grabaciones están en un disco sin que nadie las escuche, porque escucharlas cuesta tanto tiempo como duraron.

Hay dos formas de arreglar eso, y conviene empezar por la fácil.

Por aquí se empieza: las llamadas que ya tienes grabadas

No hace falta tocar Asterisk. Tu centralita escribe .wav en una carpeta; apuntas un guion a esa carpeta y tienes las llamadas de la semana pasada transcritas y resumidas.

git clone https://github.com/uttera/uttera-examples.git
cd uttera-examples/asterisk/recordings
export UTTERA_API_KEY=sk-echo-...
./transcribe-recording.sh /var/spool/asterisk/monitor/una-llamada.wav

Si eso funciona, bulk-reprocess.sh hace la carpeta entera. Es el escenario más común con diferencia y el que da valor el primer día: buscar una frase dentro de nueve horas de grabación deja de ser una tarea imposible.

El código está en uttera-examples/asterisk.

La otra forma: hablar y oír dentro de la llamada

Aquí ya se mete uno en el dialplan. Hay dos AGI: uno dice un texto en la llamada, y otro oye lo que dice quien llama.

cp agi/uttera_agi.py /var/lib/asterisk/agi-bin/
chmod +x /var/lib/asterisk/agi-bin/uttera_agi.py
ln -s uttera_agi.py /var/lib/asterisk/agi-bin/uttera-decir.agi
ln -s uttera_agi.py /var/lib/asterisk/agi-bin/uttera-oir.agi
apt install sox

Y la clave va en el entorno del servicio, nunca en el dialplan:

# systemctl edit asterisk
[Service]
Environment=UTTERA_API_KEY=sk-echo-...
Environment=UTTERA_VOZ=nova

Esto no es purismo. Una clave escrita en el dialplan acaba en la copia de seguridad de la configuración, en el control de versiones y en la salida de dialplan show — o sea, a la vista de cualquiera que tenga consola de Asterisk, que rara vez es la misma gente que debería ver una credencial de facturación.

Las cinco cosas que cuestan un día averiguar

Están todas resueltas en el código publicado. Se escriben aquí porque leerlas cuesta cinco minutos y descubrirlas cuesta una tarde.

1. La conversión de audio no es opcional. La síntesis genera a 24 kHz y el canal telefónico va a 8 kHz. Si le pasas el WAV tal cual a Asterisk, lo reproduce a su tasa y la voz sale acelerada y aguda, como un dibujo animado. Por eso sox convierte a .sln —PCM crudo a 8 kHz—, que es exactamente lo que el canal espera.

2. Hay que añadir silencio al final. Sin unas décimas de cola (pad 0 0.4), Asterisk corta la última sílaba al cerrar el fichero. El mensaje se entiende igual casi siempre, y por eso es un fallo que sobrevive meses sin que nadie lo reporte.

3. STREAM FILE va sin extensión. Se le da el nombre base y él elige el formato que encuentre. Con extensión, no suena nada y no hay error.

4. Whisper no se calla ante el silencio. Si le mandas una grabación vacía no devuelve cadena vacía: se inventa una frase, normalmente algo como «Gracias por ver el vídeo», porque eso abunda en los datos con los que se entrenó. El AGI descarta las grabaciones por debajo de 2.000 bytes antes de mandarlas. Te ahorra pagar por una alucinación y, sobre todo, te ahorra que tu automatización actúe sobre una frase que nadie dijo.

5. Las comillas de SET VARIABLE y VERBOSE. El analizador de AGI parte por espacios: un texto sin comillas llega partido y la variable se queda con la primera palabra. Y una comilla dentro del texto descoloca el resto de la línea. Hay que escaparlas antes de mandarlo.

Y una diferencia de criterio que importa

Los tiempos de espera de telefonía no son los de una API.

Uttera mantiene la conexión abierta hasta dos horas, porque una grabación de tres horas tiene que poder terminar. Pero dentro de una llamada hay una persona con el teléfono en la oreja, y ahí dos horas no son un margen de seguridad: son un absurdo.

Por eso estos AGI cortan a los 30 segundos. Si no hay respuesta para entonces, la llamada ya está estropeada, y lo que toca es decirlo y seguir el flujo, no dejar a alguien escuchando silencio.

Es el tipo de decisión que no está en ninguna documentación de API y que decide si una integración de voz es usable o no.

Qué hacer con el texto una vez lo tienes

Lo obvio es archivarlo y poder buscar. Lo que de verdad cambia el trabajo del día es el resumen: de cada llamada sale una nota escrita con los acuerdos y los siguientes pasos, en vez de depender de que alguien se acuerde de escribirla.

Y si esa nota va a acabar en un CRM o en un agente, manda el resumen y no la transcripción: son entre veinte y treinta veces menos tokens.

Otras centralitas

Los guiones de recordings/ no tienen nada de Asterisk: leen ficheros de una carpeta. Si tu FreePBX, 3CX o Issabel escribe las grabaciones en un directorio, funcionan igual apuntándolos ahí. Si te atascas con el tuyo, escríbenos a support@uttera.ai y lo miramos.

¿Algo que añadir o que corregir? Escríbenos a support@uttera.ai. Si nos corriges, editamos la entrada y te damos crédito.

← Todas las entradas