Saltar al contenido
megapromotingVamos a hablar

Experiencia · Transcripción y traducción

Voz a texto, en rumano y ruso, con el consentimiento registrado antes del primer segundo de audio.

Transcribimos audio en tiempo real o desde archivo, traducimos entre rumano y ruso en conversaciones con clientes y entregamos el texto con marcas de tiempo, exportación de audio y un rastro de consentimiento. Ejecutamos el reconocimiento del habla a través de proveedores, mediante nuestra gateway; el modelo propio de rumano es investigación, no producto.

Ya construidoDouă implementări proprii, ambele deschise și citate. Prima e o aplicație de transcriere în flux, cu backend Express de 3.378 de linii în 25 de fișiere și 37 de teste pe care le-am rulat azi — toate trec; ea conține partea pe care nimeni nu o construiește din entuziasm: o poartă de consimțământ care refuză captura când nu există acord înregistrat. A doua rulează în producție, la clienți reali: mesajele vocale primite pe canalele de mesagerie sunt transcrise, iar răspunsul scris de un operator în română este rescris în limba clientului înainte de a pleca. Ce NU intră în „delivered” și e scris ca atare în pagină: modelul propriu de recunoaștere și sinteză în română este cercetare — nu are demonstrație publică, nu are interfață de programare, iar pe acuratețe în română pierde față de sistemele comerciale mari. Serviciul se vinde pe ce rulează, nu pe ce studiem.

La transcripción parece un problema resuelto hasta que la pones en rumano, con dos hablantes que se interrumpen, cifras dichas deprisa y un cliente que pasa al ruso a mitad de la frase. Entonces aparecen los tres problemas reales: qué modelo eliges para la lengua que tienes delante, cómo sabes dónde termina un turno de habla, y quién te dio permiso para grabar. Nos ocupamos de los tres, y al último lo tratamos como un problema de código, no como un párrafo de política.

En nuestra aplicación de transcripción en flujo, el navegador nunca recibe la clave del proveedor. Pide al backend un token de un solo uso, válido por defecto durante un cuarto de hora, con el que abre la conexión de transcripción; la ruta que emite el token está cerrada por defecto y solo puede abrirse mediante una configuración explícita fuera de producción, precisamente porque es la ruta por la que se consumen fondos. Sobre la transcripción bruta corre un análisis con modelo de lenguaje, con una lista de modelos de reserva en orden, para que la indisponibilidad de uno no detenga la sesión.

La gate de consentimiento es la parte a la que prestamos especial atención. Antes de aceptar un fragmento de audio, el servidor pide una fila de acuerdo no revocado para la sesión respectiva. Si no existe, responde con 451 y un mensaje en rumano. Si la base de datos no responde, rechaza todo — 503, no «deja pasar». Las sesiones ya verificadas pasan por una caché de diez minutos, para que una caída breve no interrumpa una grabación en curso. Está escrito para que no pueda eludirse por un error de configuración.

La parte que ya está con clientes es otra y es menos espectacular: en los canales de mensajería, un mensaje de voz recibido se convierte en texto, y la lengua se elige votando sobre los últimos ocho mensajes de la conversación, no adivinando por el audio. En sentido inverso, cuando un compañero responde en rumano, su texto se reescribe en la lengua del cliente con instrucciones estrictas — no añade información, no inventa precios ni plazos, no contradice al operador, y trata el texto del operador estrictamente como datos a transmitir, nunca como instrucciones para el modelo.

Qué incluye

El trabajo, por componentes

El acuerdo, verificado antes del audio

La puerta de consentimiento exige una fila no revocada en el registro de acuerdos para la sesión actual. Sin ella: 451, con mensaje en rumano. Con la base de datos caída: 503, es decir, rechazo, no paso. Las sesiones ya verificadas pasan por una caché de 10 minutos, para que la verificación no golpee la base con cada fragmento de audio.

Token de un solo uso, la clave permanece en el servidor

La página pide al backend un token para la transcripción en tiempo real, válido por defecto 900 segundos, y con él abre la conexión con el proveedor. La clave de la cuenta nunca llega al navegador. La petición al proveedor tiene un timeout de 30 segundos, y si se supera devuelve un error explícito, no una espera infinita.

Transcripción en flujo, con el idioma elegido según el contexto

En producción, en los canales de mensajería, el idioma del mensaje de voz se decide por voto sobre los últimos ocho mensajes de la conversación — ruso si domina, en caso contrario rumano — y solo después se llama al reconocimiento, con la pista de idioma transmitida explícitamente. El formato del archivo se reconoce por los primeros 12 bytes, no por la extensión, porque los mensajes de voz de los canales Meta llegan como `ogg` independientemente de cómo se llamen.

Traducción operador → cliente, con los límites escritos en el prompt

Cuando un compañero responde en rumano en un hilo interno, el mensaje hacia el cliente se reescribe en el idioma del cliente. Las reglas son explícitas en el código: no añade información, no inventa detalles, precios, horas ni promesas, no contradice al operador, y el texto del operador se trata estrictamente como datos a transmitir, nunca como instrucciones para el modelo — una medida contra la inyección de comandos, no una formulación de estilo.

Análisis sobre el transcript, con modelos de reserva en orden

Sobre el texto resultante se ejecuta un análisis con un modelo de lenguaje, con una lista ordenada de modelos alternativos en el código, para que una indisponibilidad degrade la calidad, no detenga la sesión. El modelo de análisis se puede cambiar desde la configuración, sin puesta en marcha de nuevo.

Exportación de audio en tres formatos, con fallo explícito

WAV se produce sin herramientas externas. FLAC y MP3 requieren `ffmpeg`; si falta, el servidor responde 501 con el motivo, y si el proceso se bloquea se detiene tras 60 segundos y devuelve 504 con los primeros dos mil caracteres del error. Una exportación que falla dice por qué.

Contabilización separada de cuota y de costo

Los minutos consumidos se descuentan de forma atómica mediante un procedimiento en la base de datos, y el costo se escribe en un registro separado, por proveedor. Son dos cosas distintas y se rompen de forma diferente: si la fila de costo no se puede vincular a la sesión, se guarda sin vincular, para que la información de costo no se pierda.

Tres umbrales de tráfico, por usuario y no por dirección

La emisión de tokens, el análisis y la exportación tienen límites separados, y la clave de conteo es el usuario autenticado cuando existe, no la dirección IP — de otro modo un solo usuario agresivo detrás de una red común agotaría la cuota de todos sus compañeros.

Transcripción en los canales de mensajería, dentro del flujo existente

El mensaje de voz recibido de un cliente se convierte en texto en la misma conversación, sin que nadie abra otra herramienta. El reconocimiento y la síntesis pasan por nuestro gateway, no directamente al proveedor, así que el consumo aparece en el mismo lugar que el resto.

Qué aspecto tiene

El recorrido, paso a paso.

01

Establecemos el derecho a grabar, antes de cualquier código

Quién habla, quién está informado, quién consiente, quién conserva la grabación y durante cuánto tiempo. El resultado no es un documento que se queda en un cajón, sino la configuración del gate: qué significa exactamente «acuerdo existente» en la situación del cliente y qué ocurre cuando falta.

02

Elegimos la cadena según el idioma y las condiciones de sonido

El rumano y el ruso se comportan de forma distinta, igual que un micrófono de escritorio frente a una llamada telefónica comprimida. La elección del modelo, del índice de idioma y de la estrategia de segmentación se hace sobre muestras del material real del cliente, no sobre una demostración limpia.

03

Montamos el flujo de principio a fin y lo rompemos a propósito

Token, conexión, transcripción, análisis, exportación. Luego comprobamos los casos que realmente ocurren: acuerdo ausente, base de datos caída en mitad de la sesión, token caducado, `ffmpeg` ausente, proveedor no disponible. Cada uno debe dar un mensaje que diga qué se ha roto.

04

Entregamos con los contadores y los límites activados

El conteo de minutos, el registro de costes, los umbrales de tráfico por usuario y los registros. Sin ellos, el primer incidente se discute de memoria.

IntrareVerificareDeciziePublicareNimic nu trece mai departe neverificat.ORDINEA E ARGUMENTUL
Cinci pași, în ordinea în care se execută: acordul verificat în registru (fără el, drumul se oprește aici); jetonul de unică folosință emis de server, cu cheia rămasă pe server; transcrierea în flux la furnizor; analiza peste transcript, cu modele de rezervă în ordine; exportul textului și al audio-ului. Primul pas e singurul care poate opri tot restul, și e desenat ca poartă, nu ca etapă.

Los datos

Qué tocamos, dónde están y cuánto se quedan

Las preguntas que hace cualquiera que tenga un delegado de protección de datos — hechas aquí antes de que las haga él.

Registro de acuerdos
Una fila por sesión, con el espacio de trabajo, el identificador de la sesión y el momento de la revocación, vacía mientras el acuerdo es válido. La comprobación busca exactamente la ausencia de revocación. Es la única fuente de verdad para el derecho a capturar audio, y se consulta antes de cada sesión, no solo en el registro.
Audio, transcript y análisis
El audio bruto pasa por la conexión de transcripción hacia el proveedor; lo que se conserva con nosotros es el transcript, las marcas de tiempo y el resultado del análisis, además de las exportaciones que solicita el usuario. Qué se conserva exactamente y durante cuánto tiempo se establece por proyecto, antes de la primera grabación — para un consejo, una reunión médica y una llamada comercial las respuestas no son las mismas.
Adónde va el audio y a quién
A los proveedores de reconocimiento del habla y al modelo de análisis, a través de nuestro gateway. Su lista se escribe en el contrato antes del arranque, con el nombre de cada uno, porque un subprocesador no declarado es un problema jurídico, no una omisión técnica.
Registro de consumo
Los minutos consumidos se descuentan de forma atómica en la base de datos, y el coste se escribe por separado, por sesión y por proveedor. Son dos registros distintos precisamente para que un error en uno no falsifique el otro.
Lo que no tocamos
No entrenamos modelos con las grabaciones del cliente y no usamos la salida de un proveedor de voz para construir o probar un modelo competidor — está expresamente prohibido en los términos del proveedor que usamos, y es un límite que respetamos incluso allí donde sería técnicamente cómodo.

Un caso

Una sesión que no arranca, y por qué ese es el comportamiento correcto

La situación

Un escenario de reunión con varios participantes, en el que la transcripción debía iniciarse desde el navegador, y la grabación debía conservarse. La situación en la que se rompen la mayoría de las herramientas de transcripción: alguien pulsa «grabar» antes de que el acuerdo de los participantes quede registrado en alguna parte.

Qué construimos

Puse la verificación del consentimiento en la ruta de la solicitud, no en una pantalla de aviso. El servidor busca una fila de consentimiento no revocado para la sesión actual antes de aceptar el primer fragmento de audio. También escribí deliberadamente el comportamiento ante fallo: si la base de datos que guarda los consentimientos no responde, la solicitud se rechaza con 503, no se deja pasar. Las sesiones ya verificadas permanecen diez minutos en una caché, para que un corte breve no interrumpa una grabación en curso. La ruta que emite tokens al proveedor quedó cerrada por defecto, con apertura posible solo mediante una configuración explícita fuera de producción.

Qué salió

Sin consentimiento registrado, la captura devuelve 451 con un mensaje en rumano y el evento se registra con la sesión y el espacio de trabajo. El comportamiento está cubierto por pruebas que se ejecutan sin base de datos, mediante la inyección de la verificación. La suite del backend tiene 37 pruebas; en la ejecución de hoy pasan todas.

Qué no dice el caso

La aplicación no está publicada — funciona en nuestros servidores, no tiene una página en la que puedas registrarte, y el derecho a grabar una conversación determinada sigue siendo del cliente: nosotros lo imponemos técnicamente, no lo otorgamos. Y hay otra limitación: la puerta verifica la existencia del consentimiento, no su calidad jurídica. Si el texto del consentimiento está mal redactado, el código lo aplicará fielmente.

Preguntas

Lo que nos pregunta la gente antes de llamar

¿En qué idiomas transcribís?

Trabajamos con rumano y ruso, porque son los idiomas en los que aparecen nuestros problemas reales y que podemos comprobar con material propio. Otros idiomas son técnicamente posibles mediante los mismos proveedores, pero antes de prometer algo hacemos una prueba con tus grabaciones: un idioma funciona o no funciona según el audio, no según la lista de la página del proveedor.

¿Tenéis un modelo propio de reconocimiento del habla en rumano?

En investigación, no en producto, y es importante no confundir ambas cosas. La dirección propia no tiene demostración pública, no tiene interfaz de programación y no tiene telefonía, y en la precisión del reconocimiento en rumano nuestras mediciones muestran que quedamos por detrás de los grandes sistemas comerciales. Publicamos esto porque es nuestra conclusión, obtenida en nuestro propio banco de pruebas. El servicio que vendemos hoy funciona con proveedores, a través de nuestra pasarela.

¿Quién tiene derecho a grabar una conversación y qué hacéis si no lo tiene?

El derecho se establece según la situación, con el cliente, antes de la instalación — no es algo que nosotros podamos transferir. Lo que hacemos es imponerlo en el código: sin un consentimiento registrado para la sesión actual, el servidor rechaza la captura con 451 y un mensaje en rumano. Si la base de datos que guarda los consentimientos no responde, también rechaza, con 503. No existe una configuración que transforme la falta de consentimiento en un paso silencioso.

¿Mi clave del proveedor llega al navegador?

No. La página pide al backend un token de un solo uso para la sesión de transcripción, válido por defecto durante 900 segundos, y con él abre la conexión. La clave de la cuenta se queda en el servidor. Además, la ruta que emite tokens está cerrada por defecto y solo puede abrirse mediante una configuración explícita fuera de producción, porque es la ruta que consume dinero.

¿Qué precisión tiene la transcripción?

Depende más del audio que del modelo: micrófono, solapamientos, cifras, nombres propios, ruido de fondo. No te damos un porcentaje antes de escuchar tu material, porque un porcentaje sacado de una ficha de producto no dice nada sobre tus sesiones. Lo que hacemos es una prueba con grabaciones reales, con los errores sobre la mesa — por lo general falla en las cifras y en los nombres, no en las frases.

¿Traducís conversaciones en tiempo real entre operador y cliente?

Sí, y ya funciona en producción en un sentido: el colega escribe la respuesta en rumano, y el mensaje sale al cliente en el idioma del cliente. Las reglas son estrictas en el código — sin información añadida, sin precios ni plazos inventados, sin contradecir al operador. El sentido inverso, del cliente al operador, hoy se resuelve mediante la transcripción de mensajes de voz; la traducción automática del texto del cliente hacia el operador no está activada en todas partes y lo decimos antes, no después.

¿Qué formatos de audio aceptáis y qué recibo a cambio?

El formato se reconoce por el contenido del archivo, no por la extensión — WAV, OGG, MP3 y M4A se tratan explícitamente, y los mensajes de voz de los canales de mensajería suelen llegar como OGG. Recibes la transcripción, el análisis si se solicita, y el audio exportado: WAV sin dependencias, FLAC y MP3 si `ffmpeg` existe en el servidor. Si no existe, el servidor lo dice con un código dedicado, no falla de forma genérica.

¿Usáis nuestras grabaciones para entrenar vuestros modelos?

No. Además, tampoco usamos la salida de los proveedores de voz para entrenar o probar un modelo competidor — sus términos de uso lo prohíben explícitamente, y nosotros los respetamos también en nuestra propia dirección de investigación, donde nos habría resultado cómodo no hacerlo.

¿Qué pasa cuando el proveedor de transcripción cae en medio de una reunión?

La sesión se detiene con un error que nombra la causa, no con una pantalla vacía. Para el análisis hay una lista ordenada de modelos de reserva en el código, así que allí la indisponibilidad degrada la calidad en lugar de detener el flujo. Para el reconocimiento del habla en tiempo real no tenemos redundancia automática entre proveedores, y es una limitación real, no una omisión.

En qué se basan las afirmaciones anteriores (14 fuentes)
  1. Termenii furnizorului de voce interzic antrenarea sau testarea unui model concurent pe ieșirea lorhttps://elevenlabs.io/use-policy · 2026-09-06

13 de ellas son código y archivos de nuestros repositorios. No publicamos su nombre ni la línea: juntos, en una sola página, describirían con demasiada precisión cómo están construidos sistemas que no son solo nuestros. Los repasamos contigo, en el repositorio, a petición — la verificación sigue siendo posible, solo que se hace en una conversación.

¿Qué te gustaría que funcionara mejor?

Cuéntanos tu proceso. Juntos decidimos qué merece la pena construir, qué podemos conectar y cómo verificamos el resultado.

Vamos a hablar