How Riff delivered a seamless learner experience with LTI and Open edX
Riff LTI support

How Riff Learning used LTI and Open edX to deliver a seamless learner experience

About Riff Learning

Riff Learning Inc develops AI-powered video and chat applications that measure how people interact, particularly when they are collaborating online. Whether people are working in teams, learning together in cohorts, or having a brainstorming session, the Riff Platform provides real-time and post-meeting feedback that helps people gain awareness of their communication patterns and how their interactions affect others.

Using LTI to deliver a seamless learning experience

Riff wanted their learners to be able to use Open edX with the Riff Platform in a seamless manner so they could have their profiles shared between the two platforms, allowing for consistent team and cohort allocation, without requiring a second login.

There were already two solutions for navigating between external tools and Open edX. The main options were: 1) to integrate with SAML, a Single Sign-On protocol, in order to exchange team information via REST APIs or 2) to use the Learning Tools Interoperability (LTI) protocol.

LTI is a standard that links content and resources between learning platforms. Its primary purpose is to connect the learning management system (LMS) to a service provider that complements or supplements the learning experience in some way. Common tools include simulations, video conferencing software, discussion boards, multimedia content or assessments.

Ultimately, Appsembler and Riff decided that the LTI method was the preferred approach and delivered a seamless experience for Riff’s learners.

Open edX has an LTI Consumer XBlock that allows integration with external services. This XBlock has a fixed set of user profile and login parameters without an existing mechanism for extending that set, except by creating a fork of the XBlock.

Forking this XBlock was not really an option since both Appsembler and Riff wanted to make the changes available for both edX and the broader community by contributing the changes upstream; however the team and cohort parameters are not needed by edX, so an alternative solution was needed. The LTI Consumer XBlock needed to be extensible.

Extending the LTI Consumer XBlock

Appsembler engineer Omar Al-Ithawi partnered with the edX architecture team, to discuss what the architecture and design of the extended LTI Consumer XBlock might look like.

With changes developed by the Appembler team, the LTI Consumer XBlock is now extensible to allow for any platform maintainer to write parameter processors (plugins) to allow passing additional LTI parameters, without having to change the XBlock itself.

What the LTI XBlock looks like

riff LTI test

Depending on the LTI module setting, a button could be used to open the external integrated learning tool. The learner would click on the button that links to the external tool, in this case the Riff Platform:

Riff LTI button

Opening the Riff Learning tool via LTI allows the learner to be logged in seamlessly and the external tool knows the identity of the learner and in which channel (aka team) the learner is in:

Riff Edu Slack

Riff also supports using LTI to link directly to its video platform, which supports learners connecting with other members of the course using video conferencing.

Riff LTI support

Defining an LTI Parameter Processors

The parameter processor is a Python function that expects an XBlock instance, and returns a dict of additional parameters for the LTI. If a processor throws an exception, the exception is logged and suppressed to make the XBlock more reliable. If a processor returns None or any other false value, no parameters will be added.

A processor can define a list of default parameters lti_xblock_default_params, which is useful in case the processor had an exception.

Configuring the Parameter Processors Settings

Using the standard XBlock settings interface the developer can provide a list of processor functions: Those parameters are not sent by default. The course author can enable that on per XBlock instance (aka module) by setting the Send extra parameters to true in Studio.
To configure parameter processors add the following snippet to your Ansible variable files:

EDXAPP_XBLOCK_SETTINGS:
lti_consumer:
parameter_processors:
- 'customer_package.lti_processors:team_and_cohort'
- 'example_package.lti_processors:extra_lti_params'

Privacy and Personally Identifiable Information

The extra parameters can include personally identifiable information, which might not be acceptable to share with 3rd party LTI provider. Therefore, the LTI XBlock doesn’t send the parameters by default and it has to be enabled explicitly to protect learners privacy.

What’s next?

Several community members have already forked the LTI XBlock to add additional parameters. With this new architecture, it’s possible to use the upstream version and write plugins instead, which allows the platform maintainers to follow up with the latest platform releases with one less fork to maintain.

Want to learn more? Check out the upstream pull request that Omar wrote, and feel free to use the opensource LTI plugin that we used to pass team and cohort info.

If you’d like to learn more about Appsembler, get in touch!

Written by: Beth Porter, CEO at Riff Learning & Omar Al-Ithawi, Appsembler