Ir al contenido

Ruleta

Herramienta de sorteos con overlay para OBS. Los participantes se gestionan desde el panel y el resultado se muestra en stream.

Solo dashboard
AutenticaciónRequiere sesión OAuth del panel (cookie HttpOnly). No uses la API Key de bot en el navegador del overlay.

Abre Ruleta en el panel, genera la URL del overlay y controla el sorteo desde ahí.

API del overlay

El panel genera un enlace firmado (overlayToken, scope overlay:read, válido 30 días) y sincroniza el estado entre el dashboard y OBS.

Generar enlace

POSThttps://ttv.losperris.dev/api/dashboard/overlay-link
ParámetroTipoRequeridoDescripción
toolStringroulette
curl --request POST \

  --url 'https://ttv.losperris.dev/api/dashboard/overlay-link' \

  --header 'Content-Type: application/json' \

  --cookie 'tu_sesion_dashboard' \

  --data '{"tool":"roulette"}'
	{"url": "https://ttv.losperris.dev/overlay/roulette?overlayToken=eyJ..."}
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Cache-Control: public, s-maxage=10, stale-while-revalidate
X-RateLimit-Limit: 30
X-RateLimit-Remaining: 29
X-RateLimit-Reset: 1710000060

{

  "url": "https://ttv.losperris.dev/overlay/roulette?overlayToken=eyJ..."

}
	{"success": false,"error": {"message": "Usuario no encontrado","code": "UNAUTHORIZED"}}
HTTP/1.1 401 Unauthorized
Content-Type: application/json; charset=utf-8
X-RateLimit-Limit: 30
X-RateLimit-Remaining: 29
X-RateLimit-Reset: 1710000060

{

  "success": false,

  "error": {

    "message": "Usuario no encontrado",

    "code": "UNAUTHORIZED"

  }

}

Estado compartido

GEThttps://ttv.losperris.dev/api/dashboard/overlay-state/roulette

Lee el estado publicado por el panel. El overlay en OBS usa el token de la URL; el panel usa la sesión del dashboard.

	{"state": {"chatters": [{ "user_login": "viewer1", "user_name": "Viewer1" }],"isOpen": true,"isSpinning": false,"wheelRotation": 0,"wheelTransition": "none","winner": null,"lastSpinCount": 0,"spinSeq": 0,"updatedAt": 1752012234567}}
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Cache-Control: public, s-maxage=10, stale-while-revalidate
X-RateLimit-Limit: 30
X-RateLimit-Remaining: 29
X-RateLimit-Reset: 1710000060

{
  "state": {
    "chatters": [{ "user_login": "viewer1", "user_name": "Viewer1" }],
    "isOpen": true,
    "isSpinning": false,
    "wheelRotation": 0,
    "wheelTransition": "none",
    "winner": null,
    "lastSpinCount": 0,
    "spinSeq": 0,
    "updatedAt": 1752012234567
  }
}
	{ "state": null }
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Cache-Control: public, s-maxage=10, stale-while-revalidate
X-RateLimit-Limit: 30
X-RateLimit-Remaining: 29
X-RateLimit-Reset: 1710000060

{ "state": null }
	{"success": false,"error": {"message": "Usuario no encontrado","code": "UNAUTHORIZED"}}
HTTP/1.1 401 Unauthorized
Content-Type: application/json; charset=utf-8
X-RateLimit-Limit: 30
X-RateLimit-Remaining: 29
X-RateLimit-Reset: 1710000060

{

  "success": false,

  "error": {

    "message": "Usuario no encontrado",

    "code": "UNAUTHORIZED"

  }

}
PUThttps://ttv.losperris.dev/api/dashboard/overlay-state/roulette
ParámetroTipoRequeridoDescripción
stateObjectJSON con el estado de la herramienta (máx. 64 KB, máx. 200 claves).
	{ "success": true }
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Cache-Control: public, s-maxage=10, stale-while-revalidate
X-RateLimit-Limit: 30
X-RateLimit-Remaining: 29
X-RateLimit-Reset: 1710000060

{ "success": true }
	{"success": false,"error": {"message": "Solo el panel puede publicar el estado del overlay.","code": "FORBIDDEN"}}
HTTP/1.1 403 Forbidden
Content-Type: application/json; charset=utf-8
X-RateLimit-Limit: 30
X-RateLimit-Remaining: 29
X-RateLimit-Reset: 1710000060

{

  "success": false,

  "error": {

    "message": "Solo el panel puede publicar el estado del overlay.",

    "code": "FORBIDDEN"

  }

}
  1. Copia la URL del overlay desde el panel.
  2. Añádela como fuente Navegador en OBS (fondo transparente).
  3. Añade participantes manualmente, por importación o con Activos del chat.
  4. Pulsa Girar en el panel para lanzar la animación en OBS.
  • Dos modos de entrada: quien chatea (y chatters activos) o keyword configurable (p. ej. !sorteo).
  • Filtros por rol (subs, mods, VIPs, viewers).
  • Re-sortear sin el ganador actual.
  • Historial local de ganadores recientes.
  • Animación con aceleración y frenado progresivo; overlay OBS sincronizado.