Asistente de voz
Convierte texto en voz con ElevenLabs y transcribe audio en tiempo real con AssemblyAI desde la API de AstrApp.
Solo por API: todavía no hay pantalla
Texto a voz (TTS)
Recibe un texto y devuelve el audio. Usa ElevenLabs y, si no responde, VibeVoice en Replicate.
Voz a texto (STT)
Te da un token temporal para transcribir en tiempo real con AssemblyAI y guarda el resultado como conversación.
Convertir texto en voz
| Campo | Requerido | Descripción |
|---|---|---|
text | Sí | Texto a convertir en audio. Máximo 5,000 caracteres. |
voiceId | No | ID de una voz de ElevenLabs. Si no lo mandas, se usa la voz Mariana (XB0fDUnXU5powFXDhCwa). |
provider | No | Con "vibevoice" se salta ElevenLabs y usa VibeVoice directamente. |
curl -X POST https://app.astrapp.lat/api/v1/voice/tts \
-H "Authorization: Bearer sk_live_tu_api_key" \
-H "Content-Type: application/json" \
-d '{ "text": "Hola, ¿en qué puedo ayudarte hoy?" }' \
--output respuesta.mp3Respuesta
La respuesta es el audio. El encabezado X-TTS-Provider te dice quién lo generó:
| Proveedor | Formato | Cuándo |
|---|---|---|
elevenlabs | audio/mpeg | Primera opción. Usa el modelo eleven_multilingual_v2 y respeta el voiceId. |
vibevoice | El del archivo generado (normalmente WAV) | Respaldo en Replicate. Ignora el voiceId. |
Si ningún proveedor responde, la ruta devuelve 503 con "fallback": "browser" en el cuerpo: en ese caso usa la síntesis de voz del navegador.
Transcribir en tiempo real
action en token o save1. Pide un token temporal
Envía { "action": "token" } (es la acción por defecto). Recibes { "token": "…" }, válido por una hora.
curl -X POST https://app.astrapp.lat/api/v1/voice/transcribe \
-H "Authorization: Bearer sk_live_tu_api_key" \
-H "Content-Type: application/json" \
-d '{ "action": "token" }'2. Transcribe con AssemblyAI
Con ese token, tu cliente abre la sesión en tiempo real de AssemblyAI y le envía el audio del micrófono. Así lo hace AstrApp: audio mono PCM de 16 bits a 16 kHz y 400 ms de silencio para cerrar cada frase.
wss://api.assemblyai.com/v2/realtime/ws?sample_rate=16000&token=<token>&end_utterance_silence_threshold=4003. Guarda la transcripción
Con action en save, la transcripción se guarda como una conversación nueva del proyecto, con su evaluación de calidad pendiente y las etiquetas voice_transcription, live y assemblyai. Responde { "success": true, "conversationId": "…" }.
| Campo | Requerido | Descripción |
|---|---|---|
action | Sí | "save" |
projectId | Sí | Proyecto donde se guarda la conversación. |
messages | Sí | Lista no vacía de mensajes con role, content y timestamp opcional. |
Guardar necesita la sesión de la app
save escribe con los permisos de tu sesión. Con API key no hay sesión y la base rechaza la escritura, así que llámala desde la app, con tu sesión iniciada.Si la transcripción no está disponible
/api/v1/voice/transcribe responde 503 en cualquier acción.