meta data for this page
LMS Automation Rules
Overview
LMS Automation Rules let administrators configure event-driven automations without writing code. Each rule defines:
- A Trigger — the learner event that fires the rule
- A Condition (optional) — a filter on event context (e.g. score >= 80)
- 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
- Navigate to Admin → LMS Automation Rules
- Click Add Rule and configure trigger, condition, and action
- Toggle rules on / off with the enable button
- The 30d column shows fired / skipped / error counts for the past 30 days
- 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
Related Pages
- Webhooks — Workflow Webhooks and Collection API Webhooks
- Open Badges —
award_badgeaction - Workflow Canvas —
workflow.completedtrigger