Activities: xAPI Launch Link

mod_tincanlaunch
Maintained by Picture of Andrew Downes Andrew Downes
Launch externally xAPI (Tin Can) activities from Moodle and track on any LRS. Compatible with Storyline, Captivate and others!
246 sites
409 downloads
16 fans
This plugin lets you launch xAPI activities from a Moodle course and then track them with any LRS. You don't need to upload the activities to Moodle - just host them anywhere on the internet. This is compatible with activities implementing the Rustici launch method as described here: https://github.com/RusticiSoftware/launch/blob/master/lms_lrs.md This includes Articulate Storyline and Adobe Captivate content. 
 
Get the code and give it a go here: https://github.com/garemoko/moodle-mod_tincanlaunch
 
Suggestions, bug reports, code reviews and contributions are very welcome! Watch this space for more xAPI related Moodle plugins in future. 

NOTE:  Please don't add comments or questions here. Use Github instead: https://github.com/garemoko/moodle-mod_tincanlaunch

Sets

This plugin is part of set Tin Can.

Screenshots

Screenshot #0
Screenshot #1
Screenshot #2

Contributors

Picture of Andrew Downes
Andrew Downes (Lead maintainer)
Please login to view contributors details and/or to contact them

Comments RSS

Show comments
  • Picture of Craig Ferguson
    Tue, 16 Aug 2016, 6:19 AM
    This plugin is great, I've got it connected to my LRS (GrassBlade) and everything is working perfectly.

    I wish just wondering about the anatomy of the launch link that gets produced - specifically, what is the "Registration" value and how is it determined? From reading the documentation that Rustici has provided, it seems like this is supposed to provide the xAPI statements with information about the activity's context, is that correct? If so, can it be altered? Is there a formula for determining what the Registration should be?

    Craig
  • Picture of Andrew Downes
    Tue, 16 Aug 2016, 9:05 PM
    Hi Craig,
    That's not how registration works; it's just a unique id representing a particular attempt/save.

    Andrew
  • Picture of Dwain Beckford
    Tue, 29 Nov 2016, 10:41 PM
    Hi Andrew, thanks for your work on this plugin and making it available to us. I have a small question here. How do I go about adding new fields to the tin Can statements. For example I want to add a field under account for the actor. I found that the actor part of the statement is created by the function tincanlaunch_getactor($tincanlaunch->id). I added a new field but it is not recorded in the statement sent to the LRS. Do I need to add the field in any other areas?
  • Picture of Andrew Downes
    Wed, 30 Nov 2016, 2:37 AM
    Hi Dwain,
    For purposes of interoperbility xAPI statements have a specific defined structure and if you (successfully) add in extra fields that are not supported, then the statements will be rejected by the LRS (if you use a good LRS).

    There's probably a better way to do whatever it is you're trying to do. Can you give the full background of what you're trying to achieve?

    Andrew
  • Picture of Abhinav Bakshi
    Sat, 17 Dec 2016, 2:04 PM
    For those interested in setting up Moodle with TinCan API, and/or facing problems with the setup, I have written a step-by-step tutorial at https://gist.github.com/abhi9bakshi/5760243fcadc4bb8bec7d156c2f302fc.
  • Picture of Andrew Downes
    Tue, 20 Dec 2016, 4:57 PM
    Thanks for sharing these detailed instructions! One clarification for anybody reading those is that Learning Locker is not required for this plugin; you can use any LRS. I'm a contractor with Watershed LRS and normally use that for testing.
  • Picture of Thom Olden
    Fri, 6 Jan 2017, 9:24 PM
    Hi Andrew, I've a similar question to Dwain. I'm using this plugin to send statements to my LRS. Which is working. But I want to add a context field so the statement contains additional information about the user. I'm reading some fields of the user profile which I want to put in the context field. But I've no idea where to add the context to the statement, where the statement is actually send. I'm hoping you can point me in the right direction.
  • Picture of Andrew Downes
    Mon, 9 Jan 2017, 6:58 PM
    Hi Thom,
    Really metadata data about the user doesn't belong in xAPI statements and is out of scope of xAPI. In a lot of cases, metadata about people is held in things like HR systems and it doesn't make sense for that data to go into the LRS via the application providing the learning experience.

    At Watershed LRS we have our own People and Groups API specifically for this kind of data. We use this people and groups information to associate personas into people (e.g. mrdownes@hotmail.com is the same person as andrew.downes@watershedlrs.com), to filter and organize reports, and to manage permissions.

    The Moodle-Watershed plugin (https://moodle.org/plugins/report_watershed) facilitates this by enabling you to select standard and custom learner profile fields to turn them into groups in Watershed and assign people to those groups as a regular cron task. The plugin also features SSO from Moodle to Watershed and automatic creation of detailed reports for the most popular Moodle courses. These automatically generated reports are tailored to the modules used within those courses. I'd be very happy to give you a demo on a call if you like, just email andrew.downes@watershedlrs.com. Watershed pricing is here: https://www.watershedlrs.com/product/pricing

    For other LRSs, all I can suggest is to develop a similar plugin to integrate with whatever groups functionality that LRS has.
  • Picture of Thom Olden
    Wed, 11 Jan 2017, 5:27 PM
    We're using Learning Locker to store the statements. We provide courses to different institutions and report back on department level. So I figured we could send that data as context so we can filter the statements on that. But that is not a good solution?
  • Picture of Andrew Downes
    Wed, 11 Jan 2017, 8:59 PM
    Hi Thom,
    In theory, this is a bad solution because you are associating metadata that really relates to the user to the statement, which is not quite right.

    In practice, your solution could work for statements sent directly from Moodle to an LRS because Moodle knows the metadata and can attach it to every statement. There's a bit of extra bloat in the statements, but it should work.

    The problems come with statements generated by other applications, such as learning activities outside of Moodle or e-learning courses loaded into Moodle and launched using this launch plugin. Here you have two problems to solve: 1. How do you get Moodle to communicate the user profile data to those applications and 2. How do you modify the applications sending the statements to append this data to their statements. Both of these are complex problems that require custom solutions for each application involved.

    The approach we take with the Watershed plugin of sending person metadata to the LRS via a separate mechanism avoids both of these problems. There's no need for other applications to know about the learner other than their identifier because that data does not need to be include in statements. This works not just for your current applications but for unknown future applications as well.

    I hope that's helpful. Let me know if you have any further questions.

    Andrew
  • Picture of Thom Olden
    Mon, 23 Jan 2017, 6:31 PM
    Hi Andrew,

    first of all I'd like to thank you for your help!

    Due to the lack of time remaining for my internship, we have decided to drop this. I just have one question left. You said my solution (adding a context field and filtering the statements on that) could work. But I read on several sites that it is not possible to filter on the context property. "Groups of statements can be fetched filtered by agent, verb, activity, registration and time period (using ‘since’ and ‘until’). No other filters are possible". This makes me confused. Is it impossible to filter on the context? Or is it possible (but does it require some coding)?
  • Picture of Andrew Downes
    Mon, 23 Jan 2017, 7:16 PM
    We're talking about different things. What you've quoted relates to filtering in xAPI GET Statements requests. I'm talking about filtering of reports in a Learning Analytics Platform. That all depends on the functionality of the platform you are using. With Watershed you can filter by any statement property.
  • Picture of Thom Olden
    Mon, 23 Jan 2017, 11:30 PM
    My bad! This clarifies it for me, thanks you so much! I will include Watershed in my report.
  • Picture of TheD 2000
    Mon, 24 Apr 2017, 5:59 PM
    Hi there, this looks like a great plugin. I am struggling to find correct settings for the 'Basic Login' and 'Basic Password' fields in SCORM Cloud. I can see the Identifier, Show Secret Key and PENS but none of these seem to work. Any helps would be greatly appreciated!!!
1 2 3
Please login to post comments