LMS Automation Rules

Overview

LMS Automation Rules let administrators configure event-driven automations without writing code. Each rule defines:

  1. A Trigger — the learner event that fires the rule
  2. A Condition (optional) — a filter on event context (e.g. score >= 80)
  3. An Action — what happens when the trigger fires and the condition passes

Rules are evaluated asynchronously — matched rules are enqueued to LMSRuleQueue and executed by the lms_rule_worker cron job.

Managing Rules

  1. Navigate to Admin → LMS Automation Rules
  2. Click Add Rule and configure trigger, condition, and action
  3. Toggle rules on / off with the enable button
  4. The 30d column shows fired / skipped / error counts for the past 30 days
  5. Use Re-queue on a dead-letter entry to retry a failed delivery

Cross-navigation: Workflow Webhooks → Admin → Workflow Webhooks

Supported Triggers

Trigger Status Notes
lesson.completed Live Fires when a learner marks a lesson complete
badge.earned Available Fires when an Open Badge is issued
workflow.completed Available Fires when a workflow instance reaches End
user.created Available Fires on new account registration
certificate.awarded Available Fires when a course certificate is issued
deadline.approaching Available Cron-based deadline reminder
course.enrolled Available Fires on course enrolment
course.completed Available Fires on full course completion
path.completed Available Fires on learning path completion
cohort.joined Available Fires when a learner joins a cohort
quiz.passed Pending Quiz pass event not yet wired
quiz.failed Pending Quiz fail event not yet wired

“Available” triggers appear in the rule editor. “Pending” triggers appear greyed-out; creating rules for them is possible but they will not fire until the underlying event dispatch is wired.

Conditions

Operator Description Required context key
(none) Always fires
score_gte Score >= threshold intScore
score_lt Score < threshold intScore
is_first_completion Only the first time this rule fires for this learner

Actions

Action type Description Config keys
send_email Email the learner or a fixed address to, subject, body
award_badge Issue an Open Badge to the learner badge_id
notify_manager Email notification to the association admin subject, body
webhook HTTP POST to an external URL url, secret
enrol_course Enrol the learner on a course course_id
add_to_cohort Add the learner to a cohort cohort_id

Webhook Action Payload

When the action type is webhook, the rule engine POSTs:

{
  "event":           "lesson.completed",
  "timestamp":       "2026-05-23T14:00:00+01:00",
  "intLessonId":     42,
  "strLessonTitle":  "Introduction to PHP",
  "intAssociationId": 7
}

Signed with X-WF-Signature: sha256=… if a secret is configured. See Webhooks for verification code. Note: learner login IDs are not included (GDPR data minimisation).

Execution Flow

Learner event fires
  → fn_Platform_Event_Fire()       [lib/libgeneral/fn_general_events.php]
  → fn_LMSRule_Dispatch()          [lib/liblmsrule/fn_lmsrule_dispatch.php]
     → Evaluate condition
     → fn_LMSRule_Enqueue()        INSERT INTO LMSRuleQueue
          ↓
cron/jobs/lms_rule_worker.php  (runs every minute)
  → fn_LMSRule_ExecAction()        send email / issue badge / POST webhook / etc.
  → UPDATE LMSRuleQueue status
  → INSERT INTO LMSRuleLog