Saltar al contenido principal

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:

  1. 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.
  2. 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.
  3. 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:

  1. Ve a Integration Hub > Cola.
  2. Busca tu tarea.
    • Estado: Pendiente: Está esperando ejecutarse (revisa tu Cron).
    • Estado: Fallido (Reintentando): Falló pero volverá a intentar. Revisa el contador de "Fallos".
  3. Ver Payload:
    • Clic en el icono de Código (</>) junto a la tarea para ver exactamente qué JSON se generó.
  4. 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:

  1. Ve a Servicios y edita tu servicio ERP.
  2. Configuración de Resiliencia:
    • Umbral: 5 (Tras 5 fallos...)
    • Ventana: 60 (...en 1 minuto)
    • Enfriamiento (Cooldown): 300 (Dejar de enviar peticiones por 5 minutos).
  3. Comportamiento:
    • Si el ERP devuelve Error 500 5 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.