Recetario: Ejemplos del Mundo Real
Recetas prácticas para usar Integration Hub for Moodle con sus capacidades actuales v1.0.
Receta 1: Enviar Notificación a Slack al Iniciar Sesión
Objetivo: Enviar un JSON a un Webhook de Slack cada vez que un usuario inicia sesión.
Requisitos:
- Un Webhook entrante de Slack (ej.
https://hooks.slack.com/services/T000/B000/XXXX).
Pasos:
-
Crear Servicio:
- Ve a Administración del sitio > Servidor > Integration Hub > Servicios.
- Clic en Agregar Servicio.
- Nombre:
Notificaciones Slack - URL Base:
https://hooks.slack.com - Método:
POST - Guardar.
-
Crear Regla:
- Ve a la pestaña Reglas.
- Clic en Agregar Regla.
- Evento:
\core\event\user_loggedin - Servicio:
Notificaciones Slack - Ruta del Endpoint:
/services/T000/B000/XXXX(la parte después de la URL base). - Plantilla JSON:
{
"text": "El usuario {{username}} acaba de iniciar sesión desde la IP {{ip}}!"
} - Guardar.
-
Probar:
- Cierra sesión y vuelve a iniciarla.
- Revisa la pestaña Cola para ver el estado del evento.
Receta 2: Sincronizar Creación de Usuario a CRM Externo (PHP)
Objetivo: Usar la API MIH en tu propio plugin local para sincronizar datos.
Contexto: Estás escribiendo un plugin personalizado (local_myplugin) y quieres llamar a una API externa de forma fiable.
Código:
// En tu observador o script
use local_integrationhub\mih;
$userData = [
'external_id' => $user->id,
'email' => $user->email,
'fullname' => fullname($user),
'dept' => $user->department
];
// Uso: mih::request(slug_servicio, ruta, payload, metodo)
$response = mih::request(
'mi-crm-servicio',
'/api/v1/clientes',
$userData,
'POST'
);
// O estilo fluido:
// mih::send('mi-crm-servicio')->to(...)->with(...)->dispatch();
if ($response->is_ok()) {
mtrace("Usuario sincronizado exitosamente: " . $response->body);
} else {
// Integration Hub maneja los reintentos automáticamente si está configurado,
// pero puedes registrar el fallo inmediato aquí.
mtrace("Sincronización fallida: " . $response->error);
}
Receta 3: Depurar un Webhook Fallido
Problema: Configuraste un webhook pero no llega.
Pasos:
- Ve a Integration Hub > Cola.
- Busca tu tarea.
- Estado: Pendiente: Está esperando ejecutarse (revisa tu Cron).
- Estado: Fallido (Reintentando): Falló pero volverá a intentar. Revisa el contador de "Fallos".
- Ver Payload:
- Clic en el icono de Código (</>) junto a la tarea para ver exactamente qué JSON se generó.
- Dead Letter Queue (DLQ):
- Si la tarea falla demasiadas veces (ej. > 5), se mueve a la sección DLQ al final.
- Puedes ver el mensaje de error (ej.
404 Not Found) y decidir si Reintentar (Replay) o Borrar.
Receta 4: Usar Circuit Breaker para Proteger Moodle
Objetivo: Asegurar que Moodle no se cuelgue si tu ERP externo se cae.
Configuración:
- Ve a Servicios y edita tu servicio ERP.
- Configuración de Resiliencia:
- Umbral:
5(Tras 5 fallos...) - Ventana:
60(...en 1 minuto) - Enfriamiento (Cooldown):
300(Dejar de enviar peticiones por 5 minutos).
- Umbral:
- Comportamiento:
- Si el ERP devuelve
Error 5005 veces seguidas, el Circuit Breaker se ABRE. - Los eventos subsiguientes se "pausan" o fallan inmediatamente según tu código, evitando que Moodle espere timeouts innecesarios.
- Si el ERP devuelve