Complete reference for the middleware admin panel
The middleware connects Blackboard Learn Ultra (elearn.oc.edu.sa) to the NELC LRS using xAPI statements. Blackboard does not send xAPI natively — this service polls Blackboard, builds statements, queues them in an outbox, and dispatches to NELC.
Blackboard REST API → Poller → Outbox → Dispatcher → NELC LRS → integration.nelc.gov.sa
When ADMIN_TOKEN is set in .env, enter it in the top bar and click Save. The token is stored in your browser local storage. Use a strong value in production — never commit .env to git.
Shows company summary, live stats, and system configuration.
| Stat | Meaning |
|---|---|
| Outbox pending | Statements waiting to send |
| Outbox sent | Successfully delivered to LRS |
| Dead letter | Failed permanently (400/422) — needs review |
| Journeys | Learner×course progress tracked |
| Quarantine | Learners missing valid National ID |
| NELC / Blackboard | Credentials configured |
| Worker | Background poller + dispatcher running |
The header badge shows the active LRS environment (e.g. STAGING).
Organization profile for branding and NELC metadata.
elearn.oc.edu.sa in every xAPI statementOperator display name, email, role, and organization — shown in the sidebar.
Manage NELC LRS connection targets. See Endpoints guide for details.
staging and production cannot be deletedAutomatic intervals: poll every 5 min, dispatch every 30 sec (configurable in .env).
| Action | Purpose |
|---|---|
| Test LRS Connection | Probe active endpoint; updates health status |
| Send Validation Journey | Queue all 7 required verbs for one learner×course |
| Test Blackboard | Verify REST API can list course users |
Validation journey uses National ID in actor.name and course ID for object.id.
Transactional queue with deduplication and retry.
| Status | Meaning |
|---|---|
| PENDING | Waiting for dispatcher |
| RETRY | Failed temporarily — exponential backoff |
| SENT | Accepted by LRS (HTTP 200) |
| DEAD | Permanent failure — fix payload or credentials |
Each row stores its Env column — dispatcher routes to the correct LRS even after switching active environment.
State machine per learner and course URL:
registered → initialized → watched → completed → attempted → rated → earned
Phase 2 automates registered, initialized, and attempted. Others need Phase 3 (Caliper/LTI).
context.platform = elearn.oc.edu.sa (exact)actor.name = 10-digit Saudi National IDearned