Iniciar sesión

API e integraciones

Controla una sala de Cliqer Timer desde tus propias herramientas por HTTP y recibe un webhook firmado cuando el show avanza.

Cada sala tiene una API HTTP. Inicia y detén temporizadores, muestra mensajes, añade tiempo y lee la escaleta desde un script, un sistema de control de show o cualquier cosa capaz de hacer una petición web. Un webhook avisa a tu sistema cuando un temporizador empieza o termina.

La página de claves de API con un botón Crear clave y todavía sin claves
Claves de API de la cuenta, en Team de tu panel.

Primeros pasos

Crea una clave de API

Abre Claves de API y haz clic en Crear clave. Cópiala ahora: solo se muestra una vez. Consulta Team y claves de API.

Encuentra el id de la sala

Es la parte que va después de /timer/r/ en la dirección de la sala de control, por ejemplo https://cliqer.io/timer/r/<room>/control.

Haz una llamada

Envía la clave con cada petición. ping comprueba que la sala existe.

La API controla la misma sala que la sala de control: una llamada desde tu herramienta se ve en todas las pantallas a la vez.

Peticiones

Todas las llamadas son https://cliqer.io/api/timer/v1/<room>/<action>. Funcionan GET, POST, PUT y PATCH. Los parámetros van en la query string, o en un cuerpo JSON con POST, PUT y PATCH; si ambos traen uno, prevalece el cuerpo. Los guiones en el nombre de la acción también funcionan, así que add-time equivale a add_time. /api/timer/v0/ acepta las mismas llamadas.

Envía la clave de una de estas formas, que se comprueban en este orden:

DóndeEjemplo
Cabecera AuthorizationAuthorization: Bearer <key>
Cabecera x-api-keyx-api-key: <key>
Parámetro de consulta api_key?api_key=<key>. Evítalo siempre que puedas: las direcciones acaban en los registros.
curl -X POST https://cliqer.io/api/timer/v1/<room>/add_time \
  -H "Authorization: Bearer $CLIQER_KEY" \
  -H "content-type: application/json" \
  -d '{"timer_id": "<timer>", "amount": "2m"}'

Claves y permisos

La clave de API de tu cuenta puede hacerlo todo en las salas de las que eres propietario. Una sala también puede tener sus propias claves, cada una con algunos de estos tres permisos:

PermisoPermite
LecturaLas acciones get_ y export.
Dirección del showTransporte, tiempo, blackout, En el aire y mensajes.
EdiciónEliminar, importar, intents en bruto y el webhook.

Una llamada que necesita un permiso que la clave no tiene recibe 401. El secreto de una clave de sala se muestra una sola vez, al crearla. Para usar la API necesitas que tu plan la incluya, consulta Planes y límites.

Acciones

timer_id elige un temporizador por su id; index lo elige por posición, contando desde 1. Si se envían ambos, prevalece timer_id. Omite los dos para actuar sobre el temporizador actual.

AcciónDevuelve
get_roomTítulo, fecha, zona horaria y ajustes.
get_statusLo que se está ejecutando ahora.
get_timersLa escaleta.
get_messagesLos mensajes.
get_questionsLas preguntas del público.
get_connectionsLos dispositivos conectados.
get_logsEl registro de la sala. limit, offset.
exportLa sala completa como descarga cliqer-timer-<room>.json.

Las cantidades son 30s, 5m, 1h, 250ms o un número de segundos sin unidad. seconds sirve en lugar de amount, y un signo menos va hacia atrás. Los interruptores como on, autostart y replace interpretan 0, false, off y no como desactivado y cualquier otro valor como activado. Omite on en blackout para alternarlo.

Respuestas

Todas las respuestas son JSON: {"ok": true, "message": "<action>", "data": ...} si todo va bien, {"ok": false, "message": "...", "code": "..."} si falla.

EstadoMensajeMotivo
400Either timer_id OR index are requiredselect sin temporizador.
400amount is required, like 30s, 5m or 1hCantidad ausente o ilegible.
400Refused: invalidLa sala no ha podido aplicarlo.
401Access Denied: Valid API key requiredSin clave, una clave incorrecta o falta un permiso.
403The API is not in this planEl plan de la sala no incluye API.
403Refused: forbidden, Refused: readOnly, Refused: limitReachedNo permitido, una sala de solo lectura o un límite del plan.
404Room not found, Unknown action <name>, Timer not foundComprueba el id de la sala, la acción o el id del temporizador.
409Refused: staleEpochLa sala cambió mientras se procesaba la llamada. Vuelve a enviarla.
429Too many requests. Please try again later.Límite de frecuencia.
503Refused: authorityOfflineLa sala está en la papelera. Restáurala primero.

Límite de frecuencia: 100 llamadas por minuto por clave; las llamadas sin clave se cuentan por dirección. Cada respuesta incluye RateLimit-Limit, RateLimit-Remaining y RateLimit-Reset (segundos hasta que vuelve a empezar el minuto).

Webhooks

Configura la dirección

Llama a webhook con una url https. La respuesta contiene un secret que empieza por whsec_. Guárdalo: solo se muestra una vez.

Recibe eventos

Cliqer Timer envía un POST a esa dirección cuando ocurre algo en la sala.

Comprueba la firma

Verifica cada petición antes de confiar en ella.

Bórralo

Llama a webhook sin url. Se eliminan tanto la dirección como su secreto.

EventoCuándo
timerStartedUn temporizador se inicia.
timerEndedUn temporizador llega a cero.
wrapUpYellowUn temporizador llega a su punto de aviso amarillo.
wrapUpRedUn temporizador llega a su punto de aviso rojo.
messageShownSe muestra un mensaje.

El cuerpo es {"event", "roomId", "timestamp", "payload"}. La cabecera x-cliqer-timestamp contiene la hora Unix en segundos, y x-cliqer-signature contiene sha256= seguido del HMAC-SHA256 en hexadecimal de <timestamp>.<body> con tu secreto como clave.

# Recompute the signature of a saved body.
printf '%s.%s' "$TIMESTAMP" "$(cat body.json)" \
  | openssl dgst -sha256 -hmac "$WHSEC" -hex

Firma el cuerpo en bruto exactamente como llegó, antes de analizar el JSON. La ventana de cinco minutos la decides tú; evita que se reenvíe una petición antigua.

La entrega es un único intento con un tiempo de espera de 5 segundos. No se siguen redirecciones, y se descarta cualquier dirección que resuelva a una red privada. Si un evento perdido te importa, consulta get_status para ponerte al día.

Enlaces cortos

GET https://cliqer.io/api/timer/link/<code> convierte el código de un enlace corto en su sala: {"ok": true, "data": {"roomId", "link"}}, o 404 Link not found si el código es desconocido, se ha revocado o ha caducado, o si la contraseña es incorrecta. Para un enlace con contraseña, envíala en la cabecera x-link-password, nunca en la dirección.

Companion y Stream Deck

No existe un módulo de Companion ni un plugin de Stream Deck para las salas de Cliqer Timer. El módulo Generic HTTP de Bitfocus Companion puede llamar a las acciones anteriores. El temporizador propio de la app de escritorio de Cliqer tiene su API REST y compatibilidad con Stream Deck, consulta Timer (escritorio) y Timer en el host.

Preguntas frecuentes

Siguiente

Sin conexión y fiabilidad

Qué pasa cuando se cae la red.

Planes y límites

Qué planes incluyen la API.