Caso de uso

Texto a voz para aplicaciones

En una app, el texto a voz no suele ser una función estrella: es una capa de accesibilidad y comodidad. Sirve para que un artículo se pueda escuchar, para que una notificación se lea sola o para que un usuario con baja visión no dependa de la pantalla.

La regla que no se puede saltar

La API key nunca va en el cliente. Ni en el bundle de JavaScript, ni en el APK, ni en un archivo de configuración que se descargue al arrancar. Una clave incrustada en el cliente es una clave pública: se extrae con las herramientas de desarrollo o descompilando el binario, y quien la tenga consume tu cupo.

La arquitectura correcta tiene tres saltos: la app pide el audio a tu backend, tu backend llama a MatuVoice con la clave, y devuelve el audio ya generado. La clave se queda en el servidor.

Proxy mínimo

// Endpoint propio: la app llama aquí, no a MatuVoice
export async function POST(request) {
  const user = await requireUser(request);
  const { text } = await request.json();

  if (text.length > 1000) {
    return Response.json({ error: "texto demasiado largo" }, { status: 400 });
  }

  const upstream = await fetch("https://matuvoice.matubyte.com/v1/speech", {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.MATUVOICE_API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ text, voice: user.preferredVoice }),
  });

  return new Response(upstream.body, {
    headers: { "Content-Type": "audio/mpeg" },
  });
}

Ese proxy es también el sitio natural para validar la sesión, limitar la longitud del texto y aplicar un tope por usuario, cosas que la API no puede saber por ti.

Cachear lo que se repite

Mucho contenido de una app no cambia entre usuarios: la descripción de un producto, un artículo, un mensaje de onboarding. Generar ese audio una sola vez y guardarlo evita pagar el mismo texto cientos de veces.

Una clave de caché sencilla es el hash del texto junto al identificador de la voz y la velocidad. Si esos tres valores coinciden, el audio ya existe y no hace falta volver a sintetizar.

Dejar elegir la voz

Si la lectura en voz alta es una función visible, conviene que el usuario pueda escoger el personaje y guardarlo en su perfil. El acento de la voz influye bastante en si la función se usa o se ignora. Las opciones disponibles están en el catálogo de voces.

Preguntas frecuentes

¿MatuVoice sirve para aplicaciones móviles?

Sí, siempre que la llamada a la API se haga desde tu backend. La app pide el audio a tu servidor y tu servidor llama a MatuVoice, de modo que la API key nunca viaja dentro del binario.

¿Puedo llamar a la API directamente desde el navegador?

Técnicamente sí, porque el endpoint responde con CORS, pero no es recomendable: cualquiera podría extraer la clave de las herramientas de desarrollo y consumir tu cupo. La opción segura es un proxy en tu backend.