Webhooks
El soporte de webhooks en Chamilo está actualmente limitado al plugin BigBlueButton (BBB). En lugar de enviar webhooks a sistemas externos, Chamilo actúa como un receptor de webhooks: expone endpoints que BigBlueButton invoca cuando ocurren eventos en las salas, y utiliza esos eventos para construir métricas de actividad por participante.
Cómo funciona
Cuando se lleva a cabo una reunión en BBB, el servidor de BBB envía notificaciones de eventos en tiempo real a una URL de callback firmada en tu instalación de Chamilo. Chamilo procesa cada evento y almacena métricas agregadas (tiempo de habla, tiempo de cámara, mensajes, reacciones, levantadas de mano) en la tabla de base de datos conference_activity.
Servidor BigBlueButton
│ POST (firmado)
▼
Endpoint de webhook de Chamilo
│
▼
conference_activity (métricas JSON)
│
▼
Panel de control de webhooks (/plugin/Bbb/webhook_dashboard.php)Endpoints
Endpoint PHP legado
POST /plugin/Bbb/webhook.php?au={accessUrlId}&mid={meetingId}&ts={timestamp}&sig={hmac}Maneja todos los eventos de las salas de BBB. Valida la firma HMAC, luego inserta o actualiza una fila de ConferenceActivity y actualiza el campo JSON de métricas.
Endpoint moderno de Symfony
Definido a través de API Platform en la entidad ConferenceActivity. Requiere los encabezados de firma para el registro de actividad; las solicitudes sin una firma válida son aceptadas, pero no se escribe ninguna fila de actividad.
Configuración (Plugin BBB)
En Administración → Plugins → BigBlueButton, están disponibles las siguientes configuraciones de webhooks:
webhooks_enabled
true / false
Habilitar o deshabilitar el registro de webhooks
webhooks_scope
per_meeting / global
Registrar un hook por reunión o un único hook global para todas las reuniones
webhooks_hash_algo
sha256 / sha1
Algoritmo HMAC para la verificación de firma
webhooks_event_filter
cadena separada por comas
Lista opcional de nombres de eventos de BBB a recibir (vacío = todos los eventos)
Cuando se crea una reunión y los webhooks están habilitados, Chamilo invoca la API hooks/create de BBB para registrar la URL de callback. La URL incluye una firma HMAC limitada en el tiempo.
Validación de firma
El endpoint legado utiliza parámetros de cadena de consulta:
El
saltes el valor de sal configurado en el plugin BBB.Las solicitudes con más de 15 minutos de antigüedad son rechazadas para limitar ataques de repetición.
El endpoint moderno utiliza encabezados:
Las solicitudes con más de 5 minutos de antigüedad son rechazadas.
Ejemplo: Evento de Webhook de BigBlueButton
BBB envía un cuerpo JSON que contiene un arreglo de eventos. Cada evento tiene un data.id (nombre del evento) y un objeto data.attributes.
Solicitud desde BBB:
Qué hace Chamilo:
Valida la firma HMAC y la marca de tiempo.
Busca el
ConferenceMeetingporremote_id.Busca (o crea) una fila abierta de
ConferenceActivitypara esa reunión y usuario.Registra
temp.talk_started_at = 1715520123en el JSON de métricas.
Cuando llega el evento correspondiente user-talking-stopped, Chamilo calcula los segundos transcurridos y los suma a totals.talk_seconds.
Eventos rastreados y métricas
user-joined / participantjoined
Fila de actividad creada
user-talking-started / uservoiceactivated
Temporizador iniciado para totals.talk_seconds
user-talking-stopped / uservoicedeactivated
totals.talk_seconds incrementado
camera-share-started / webcamsharestarted
Temporizador iniciado para totals.camera_seconds
camera-share-stopped / webcamsharestopped
totals.camera_seconds incrementado
chat-message-posted / publicchatmessageposted
counts.messages incrementado
user-reaction-changed / useremojichanged
counts.reactions + desglose por emoji
user-hand-raised / userraisedhand
counts.hands incrementado
user-left / participantleft
Temporizadores abiertos vaciados, fila de actividad cerrada
Estructura de Datos de Métricas
Las métricas se almacenan como una columna JSON en ConferenceActivity:
Los campos temp contienen marcas de tiempo de inicio de temporizadores en curso; se borran cuando llega el evento de parada correspondiente o cuando el participante abandona la sesión.
Panel de Control de Webhooks
Un panel de control para administradores está disponible en /plugin/Bbb/webhook_dashboard.php. Muestra métricas en tiempo real e históricas por participante para una reunión específica: tiempo de conexión, tiempo de habla, tiempo de cámara, cantidad de mensajes, cantidad de reacciones y levantadas de mano. Los datos pueden exportarse como CSV.
Registro y Limpieza de Hooks
La clase BbbLib proporciona métodos para gestionar el registro de hooks en el servidor BBB:
ensureHookForMeeting($remoteId)
Registra (o confirma) un hook por reunión después de que un usuario se une
ensureGlobalWebhook()
Registra un único hook global que cubre todas las reuniones
cleanupWebhooks($meetingId)
Elimina los hooks registrados por Chamilo del servidor BBB
BbbPlugin::checkWebhooksHealth()
Valida que el endpoint hooks/list de BBB sea accesible
Ampliación a Otras Fuentes de Eventos
Actualmente, no existe un sistema genérico de webhooks salientes en Chamilo (es decir, no hay una forma integrada de realizar un POST a una URL externa cuando un usuario se inscribe o completa un curso). Si necesitas ese comportamiento, las opciones incluyen:
Escribir un plugin que escuche eventos de Symfony y despache llamadas HTTP (consulta Plugins y Sistema de Eventos).
Usar la API REST para sondear cambios de estado desde un sistema externo.
Última actualización
¿Te fue útil?