Portal de Desarrolladores
Experimental La plataforma de bots y apps está en desarrollo activo. La compatibilidad con servidores autoalojados llegó el 13-08-2026 con menos funciones que la nube. Consulta qué se admite.
← Documentación

Voz

Los bots de voz —incluidos Lavalink y @discordjs/voice— funcionan sin cambios de código. GameVox habla literalmente el protocolo del gateway de voz de Discord y después lleva el flujo AEAD-RTP a su SFU WebRTC nativa como un peer sintético.

Bibliotecas compatibles

  • Lavalink v3 + v4 (Java; bots JVM que lo usan por delante mediante JDA / discord4j / etc.)
  • @discordjs/voice (Node)
  • discord.py con los extras de voz (PyNaCl)
  • JDA con el módulo de audio
  • discord4j
  • Eris con las dependencias de voz opcionales

Endpoints

Por región — el bot se conecta a la región que le indique el despacho VOICE_SERVER_UPDATE.

  • compatible-voice-gateway-us.gamevox.com
  • compatible-voice-gateway-eu.gamevox.com
  • compatible-voice-gateway-ap.gamevox.com

El gateway principal envía la región correcta según la ubicación de la SFU del canal. Tu biblioteca lee endpoint del despacho y se conecta allí, sin enrutamiento manual.

Flujo de conexión

  1. El bot envía op:4 Update Voice State en el gateway principal (gateway.gamevox.com) con channel_id.
  2. El gateway principal envía VOICE_STATE_UPDATE + VOICE_SERVER_UPDATE con un endpoint y un token por sesión.
  3. El bot abre WSS a wss://{endpoint}/?v=8 y envía op:0 Identify con {server_id, user_id, session_id, token}.
  4. El gateway de voz responde op:2 Ready con ssrc, ip, port y los modos de cifrado admitidos.
  5. El bot realiza el descubrimiento de IP por UDP (paquete de 74 bytes de tipo 0x0001 → respuesta de tipo 0x0002).
  6. El bot envía op:1 Select Protocol con el modo de cifrado elegido.
  7. El gateway de voz responde op:4 Session Description con la secret_key de 32 bytes.
  8. El bot transmite Opus por RTP, cifrado con AEAD en el modo negociado.

Modos de cifrado

Se admiten dos modos AEAD-RTPSize, igual que en Discord:

  • aead_aes256_gcm_rtpsize — preferido. AES-256-GCM con el nonce derivado de un contador de 4 bytes añadido a la carga cifrada.
  • aead_xchacha20_poly1305_rtpsize — alternativa para bibliotecas sin AES-NI.

Los modos antiguos (xsalsa20_poly1305, _lite, _suffix) no se ofrecen: Discord los retiró en 2024 y las bibliotecas principales han migrado. Si tu biblioteca está fijada a un modo antiguo, actualízala.

Notas sobre Lavalink

Lavalink lee el endpoint directamente de VOICE_SERVER_UPDATE y abre el UDP por su cuenta. Mientras el endpoint sea accesible (lo es), Lavalink no sabe que no está hablando con Discord.

Versiones probadas: Lavalink v3.7.x y v4.0.x. Si te encuentras un problema propio de una versión, repórtalo en el portal para que podamos fijar tu versión en CI.

Presupuesto de latencia

Objetivo de latencia añadida por el puente: menos de 5 ms, medida desde el UDP entrante hasta la salida de la SFU. Por encima de 5 ms la música suena mal (desfase en los ataques de nota, jitter en los charles). El puente hace paso directo de Opus —sin transcodificar—, así que la cifra principal es descifrar + reempaquetar.

Eventos de habla

op:5 Speaking es bidireccional e idéntico al de Discord. El gateway de voz asocia los SSRC de las personas que hablan con sus IDs de usuario y envía op:5 con {ssrc, user_id} para que el bot pueda correlacionarlos.

Terminar limpiamente

Enviar op:4 Update Voice State con channel_id: null en el gateway principal cierra la sesión. El gateway de voz cierra el socket UDP y elimina el peer sintético de la SFU; quienes escuchan dejan de recibir audio de inmediato.

Todavía no admitido

  • DAVE / E2EE — el modo de voz cifrada de extremo a extremo por canal de Discord. Sin fecha por ahora.
  • Soundboard — los bots no pueden reproducir sonidos del soundboard.
  • Canales de escenario — se aceptan en el cable, pero sin gestión separada de público y ponentes.

← Volver a la documentación