Aller au contenu
Studeia Docs
AI-assisted translation — last updated 2026-05-31. For original (pt-BR or en-US), use the language switcher.

Automations (mini-n8n natif)

Moteur d'automations intégré : Déclencheur → Condition → Action. 21 événements et 9 actions (notify, tag, webhook, enroll, send_email). Prévention SSRF, rate limiting, limite de profondeur de chaîne.

Par Équipe Studeia 2026-05-31 5 min
Resposta curta

Les automations natives de Studeia éliminent les tâches répétitives : selon le schéma Déclencheur → Condition → Action, vous déclenchez des actions (notifier, appliquer un tag, créer une annonce, inscrire, envoyer un e-mail, appeler un webhook) à partir d'événements de la plateforme, de planifications ou de webhooks. Vous disposez de 21 événements et 9 types d'action, configurés via un assistant en 4 étapes avec historique d'exécutions — un « mini-n8n » intégré à votre LMS, sans code.

Schéma Déclencheur → Condition → Action

Trigger (event, scheduled, ou webhook)
  ↓
Condition (logic AND/OR, avec rules sur user.*, event.*)
  ↓
Action (une ou plusieurs, exécutées séquentiellement)

Déclencheurs (3 types)

1. event

Déclenché par des événements de la plateforme via emitAutomationEvent() dans after().

{ "type": "event", "config": { "eventName": "lesson_completed", "filters": {} } }

Les 21 événements pris en charge : lesson_completed, module_completed, course_completed, quiz_submitted, assignment_submitted, enrollment_created, enrollment_completed, forum_post_created, forum_reply_created, grade_posted, announcement_created, live_class_scheduled, live_class_started, student_inactive, tag_added_to_user, tag_removed_from_user, webhook_received, scheduled_trigger, ainsi que les événements de gamification badge_earned, level_up, contest_ended.

2. scheduled

Basé sur le cron.

{
  "type": "scheduled",
  "config": {
    "mode": "interval|daily|weekly|cron",
    "hours": 24,
    "time": "08:00",
    "timezone": "America/Sao_Paulo"
  }
}

Traité par GET /api/cron/automations (CRON_SECRET).

3. webhook

Point de terminaison public authentifié par un token hexadécimal de 64 caractères.

URL: /api/automations/webhook/[token]
GET  → health check
POST → déclenche l'automation (le body JSON devient event.data)

Conditions

{
  "logic": "and",
  "rules": [
    { "field": "user.role", "operator": "eq", "value": "student" },
    { "field": "event.score", "operator": "gte", "value": 80 }
  ]
}

Opérateurs : eq, neq, gt, gte, lt, lte, contains, not_contains, in, not_in.

Champs accessibles :

  • user.* — id, name, email, role, tags
  • event.* — champs de l'événement (courseId, score, lessonTitle, etc.)

Les groupes imbriqués (AND/OR) sont pris en charge.

Actions (9 types)

ActionFonction
send_notificationNotification in-app (trigger_user ou users_with_tag)
add_tagAjouter un UserTag
remove_tagSupprimer un UserTag
create_announcementCrée une annonce + notifie les apprenants (cours ou tenant)
send_webhookPOST/PUT vers une URL externe (avec prévention SSRF)
send_web_requestGET/POST/PUT/DELETE vers une API externe
enroll_userInscrit trigger_user à un cours
trigger_automationEnchaîne une autre automation (profondeur max 5)
send_emailE-mail via le service institutionnel (SMTP/Resend/SendGrid), par slug de gabarit ou subject+HTML inline ; cible trigger_user, users_with_tag, course_students ou adresse personnalisée

Interpolation de gabarit

Les chaînes dans les actions prennent en charge les {{placeholders}} :

  • {{user.name}}, {{user.email}}, {{user.role}}
  • {{event.courseId}}, {{event.score}}, {{event.lessonTitle}}

Sécurité

  • Isolation des tenants : toutes les requêtes filtrent par tenantId. L'automation d'un tenant n'est JAMAIS exécutée pour un utilisateur d'un autre tenant.
  • Prévention SSRF : url-validator.ts bloque les IPs privées, localhost, les endpoints de métadonnées (169.254.169.254). IPv4 + IPv6.
  • Timeout HTTP : 10s via AbortController.
  • Token webhook : hexadécimal 64 caractères, renouvelable.
  • Profondeur de chaîne : max 5 niveaux de trigger_automation récursif.
  • Rate limit : maxRunsPerHour/maxRunsPerDay par automation (Redis INCR, fallback DB count).

Exemple : notifier un parent quand son enfant mineur est inactif depuis 5 jours

{
  "name": "Alerte inactivité — mineurs",
  "trigger": {
    "type": "event",
    "config": { "eventName": "student_inactive" }
  },
  "conditions": {
    "logic": "and",
    "rules": [
      { "field": "user.role", "operator": "eq", "value": "student" },
      { "field": "user.isMinor", "operator": "eq", "value": true },
      { "field": "event.inactiveDays", "operator": "gte", "value": 5 }
    ]
  },
  "actions": [
    {
      "type": "send_notification",
      "config": {
        "recipient": "users_with_tag",
        "tag": "parent_of_{{user.id}}",
        "title": "{{user.name}} inactif depuis {{event.inactiveDays}} jours",
        "message": "Nous vous encourageons à vous connecter. Accédez à [lien]."
      }
    }
  ]
}

Interface utilisateur

/institution/automations :

  • Liste avec filtres (statut, type de déclencheur), bascule, recherche
  • Assistant en 4 étapes (Déclencheur → Conditions → Actions → Récapitulatif)
  • Historique des exécutions avec lignes extensibles (statut, durée, actionResults JSON)

Voir aussi

FAQ

Studeia dispose-t-il d'automations intégrées ?

Oui. Moteur 'mini-n8n' natif : Déclencheur → Condition → Action. 3 types de déclencheur (événement de la plateforme, planifié, webhook public) avec 21 événements. 9 types d'action (notification in-app, ajout/suppression de tag, création d'annonce, envoi de webhook, envoi de requête web, inscription d'un utilisateur, déclenchement d'une automation, envoi d'e-mail). Assistant UI en 4 étapes + historique des exécutions.

Puis-je déclencher un webhook quand un apprenant termine un quiz ?

Oui. Déclencheur : événement quiz_submitted. Condition optionnelle (ex : score >= 80). Action : send_webhook vers votre URL. Prend en charge l'interpolation de gabarit : {{user.name}}, {{event.score}}, {{event.lessonTitle}}.

Y a-t-il un rate limiting ?

Oui. Par automation : maxRunsPerHour + maxRunsPerDay. Vérifié via Redis INCR avec fallback DB count. En cas de dépassement : l'exécution est marquée comme skipped + log.

Puis-je enchaîner des automations ?

Oui. L'action trigger_automation appelle une autre automation. Profondeur de chaîne maximale : 5 niveaux (protection contre les boucles infinies).

Veja tambem

Automations (mini-n8n natif)