cmi5
cmi5 official documentation: https://github.com/AICC/CMI-5_Spec_Current/blob/quartz/cmi5_spec.md
xAPI official documentation: https://github.com/adlnet/xAPI-Spec/blob/master/xAPI-Communication.md
Overview
cmi5 is a profile (extension) of xAPI that defines how content is launched from an LMS.
xAPI (Experience API) is a modern e-learning standard (communication protocol) for tracking learning experiences.
Together they enable an integration system for tracking learning activity.
Supported features
- SSO
- handling the LRS activity record for the following cmi5 defined statements
initializedpassedcompletedterminated
Setup requirements
- LRS auth scheme (Basic or Bearer) - type of authentication used for the communication with LRS
Error reporting
To help us to provide support in case of any issues, please attach following data to error report:
- requirements
- error message
- date and time of error occurrence (with time zone)
- nice to have
- cmi5 launch URL parameters
- screen recording
- app error screenshots
- browser console error screenshots
- HAR file logs (see the instructions on how to provide)
Frequently asked questions
-
Is it possible to configure the cmi5 integration so that no personally identifiable information is stored on Masterplan’s end?
Can the data exchange work entirely based on anonymized user IDs generated by the integrating LMS?
In general, xAPI with the cmi5 extension (launch) mechanism has anonymity built into its operation.
To answer it more precisely in a technical context:
When a course is launched by an external LMS, it must be done according to the specification using a URL that must include anactorparameter. In the case of SCORM Cloud, we get, for example, the following value for actor:{"account": {"name": "TZG7A4U8JR|cypress@masterplan.com", "homePage": "http://cloud.scorm.com"}, "objectType": "Agent"}
We then take the name and homePage from this value and, using backend operations, create a unique Masterplan platform user ID, which is also their email address. An example value is:6cf6ffcf-8cee-4ca0-ab95-f392fdf9d2d0+c1068cb7d2748fc70017587e7b7966e3@masterplan-stage-no-email.com
We need to create a user on our side, so the learner can normally launch the platform and go through the course. But, at no point, do we know anything more about him than these two values in theactorfield. If the integrating LMS generates them as random values, unrelated to a real identity, we’ll simply use them to generate our ID. After that, we will use these (name and homePage) to construct the statements we’ll be sending back to their LRS. How the integrating LMS associates these with their users’ real identities is up to them. {#link-sf} -
How exactly does the progress sync back to the integrating LMS without us holding their real names, emails, or other personal data?
It always works the same way for the data transferred between LMSes and LRS. As the content provider, we simply send information back to the integrating LMS’s LRS that AU (in our case, a course) has been completed. We do this in the form of a statement, structured by the xAPI/cmi5 specifications. This allows an LMS compliant with this specification to read this statement from the LRS and then associate this data with data stored in their system, such as the user’s identity and the content they completed. -
How can certificates be synchronized/transferred to the integrating LMS?
In the xAPI/cmi5 standard, we can only send information as a statement to the LRS. It’s then up to the integrating LMS to handle it.
We will likely be able to send the certificate information to the LRS, as an xAPI statement type (it’s not part of MVP though). Then, the integrating LMS would have to get this data from LRS and process on their side.
But if they have something else in mind for the transfer (e.g., sending PDFs with certificates, etc.), it probably should not be associated with the xAPI/cmi5 integration type. -
How does it work with the different language available within a course?
The course language will be set based on the user’s language. When launching the course through cmi5, we create a user account on the MP platform and assign German as the default language. Then this can be changed in the settings, and the course language will be adjusted accordingly (if available).
In the future, we might add language settings for users created via cmi5, using settings inherited from the LMS that launches the course (agent profile API). However, not every LMS might offer this capability through its integrated LRS. -
How does the content launch look in cmi5? Would it be a placeholder within the integrating LMS, or would it open a new webpage to Masterplan.com?
In the cmi5 course (package) structure there is parameterlaunchMethod
From the cmi5 spec: Used by the integrating LMS when launching the AU (Masterplan course in a web-browser environment) to determine whether the AU requires its own window, or whether the LMS can choose the window context for the AU. By default, this parameter takes value “AnyWindow”, which indicates that the AU does not care about the window context. All browser window options are acceptable, such as in a Frameset, in a New Window, a browser redirect, etc.
When preparing cmi5 packages, we will use the default value described above. This means we will only provide a way to launch content for the integrating LMS (without the requirement about the display window). It’s up to the integrating LMS how they handle the result (display it in a new window, in an iframe, etc.). -
If the cmi5 launch opens a new page of Masterplan, would it be able to show only the specific course or optionally also the full platform using that approach? That’s at least what is possible with SCORM
Yes, we’ll be launching a specific course (topic), as we’ll be creating packages for specific courses. Regarding the entire platform, this is possible in SCORM, but the CMi5 standard has a strict requirement that only one completed statement can be sent per Assignable Unit (AU). While it’s easy to determine when to trigger this completion status when AU is a single course, it becomes a bit more complex when we’re launching an entire platform. Therefore, we’ll likely start with the mechanics of a single course (topic) in MVP and see what the second scenario looks like before including this possibility.