- Escribe
/webhook manageen nuestro servidor de Discord. - En el menú que aparece, especifica la URL de tu webhook personalizado.
- Antes de hacer clic en el botón “Añadir”, asegúrate de hacer clic en el botón “Probar”.
- El sistema enviará un mensaje de prueba. Si llega, todo está configurado correctamente y el webhook está listo para su uso.
- Tras una verificación exitosa, haz clic en el botón “Añadir” para activar la recepción de datos.
NO admitimos webhooks directos de Discord. El sistema funciona exclusivamente con webhooks personalizados (tus propios controladores/handlers).
Requisitos
Tu endpoint debe aceptar:
- Solicitudes
POSTcon un cuerpo JSON. - Estos encabezados en cada solicitud firmada:
X-Signature-Ed25519(firma Ed25519 codificada en hexadecimal).X-Signature-Timestamp(cadena con la marca de tiempo Unix).
Tu Endpoint Debe:
- Leer los bytes sin procesar (raw bytes) del cuerpo de la solicitud exactamente como se recibieron (no vuelvas a serializar el JSON).
-
Leer
X-Signature-Timestamp. -
Leer
X-Signature-Ed25519. -
Verificar la firma para:
message = timestamp + raw_bodyDondetimestampes el valor del encabezado como cadena, concatenado directamente con los bytes del cuerpo sin procesar. -
Devolver:
- 2xx solo si la firma es válida.
- 4xx si faltan encabezados, no son válidos o si la verificación de la firma falla.
Clave Pública
Usa esta clave pública Ed25519 (base64, SubjectPublicKeyInfo / SPKI):Detalles de Implementación
Datos de Entrada
timestamp: cadena exacta deX-Signature-Timestamp.sigHex: cadena exacta deX-Signature-Ed25519(hexadecimal).rawBody: bytes sin procesar del cuerpo de la solicitud.
Pasos
- Decodificar
sigHexde hexadecimal a bytes. - Construir
messagecomo:- Bytes de
timestampen UTF-8 - Seguidos inmediatamente por
rawBody
- Bytes de
- Verificar la firma Ed25519 usando la clave pública anterior.
Errores Comunes
- No uses un objeto JSON analizado (parsed) para la verificación. Utiliza únicamente los bytes del cuerpo sin procesar.
- No agregues separadores ni espacios entre la marca de tiempo y el cuerpo.
- Trata la firma como hexadecimal, no como base64.
- Asegúrate de que tu framework no consuma el cuerpo antes de capturarlo.
¿Qué eventos se envían?
Actualmente, el juego envía webhooks para:- Mensajes que comienzan con ;
- ¡Esto permite crear comandos personalizados dentro del juego!
- Llamadas de emergencia