Articulate Storyline 2 | Best Practices for xAPI

By Sean Putman (VP Learning and Development, Altair Engineering)

Storyline box

Articulate Storyline 2 will publish content to xAPI version 1.0. It is recommended to get update 5 for Storyline 2 as it will publish the xAPI statement using Name instead of ID which makes the statement human readable and much easier to parse in the visualizations that will be created from the data.

Storyline will output 4 types of activities:

  • modules (slides),
  • cmi.interaction (scored quizzes or surveys),
  • objective,
  • course.

The verbs will map as follows:

  • Modules (slides) use the verb experienced when a slide is viewed;
  • Quizzes and surveys uses the verb answered when a questions is answered,
  • Courses and objectives use
    • passed when a passing score is attained,
    • failed when a passing score is not attained,
    • completed when either a passing score has been attained or when a certain amount of slides has been viewed (depending on what has been set in Storyline)
    • attempted when the course or objective is launched.

Module (Slide) Best Practices

There are important considerations for designers when laying out a course in Storyline. In a normal usage of Storyline one might create an interaction on a slide that opens layers as items are clicked, such as opening a lightbox on a slide to display additional content.

open_content

Button to open content

 

content_open

Content open after clicking button

Best Practice

When designing for xAPI with Storyline the interaction should go on a new slide instead of a layer.  

lightbox_slides

Slides used to create lightbox effect

Rationale

Storyline only reports on the slide views, not on the layer views. By breaking the interaction up over slides you will get views on each of the slides. So when you see the output you will see 3 statements for 1 interaction.

statements

Statements generated by opening the interaction and closing the interaction

Statement 1 will be experiencing the base slide. Statement 2 will be experiencing the interaction. Statement 3 will be experiencing the base slide after closing the interaction. There will be a few extraneous statements, but without setting up the slides in this manner you will not get the interaction data.  

Since we will be using the slides to track the interactions, the slide names are important. The slide names will be what appears in the statement for the object. When we see the statement we see the actor (which will be set later), the verb (which will always be experienced), and the object (which will be the slide name). While this adds a number of slides in your Storyline file, it will enable tracking the path that a user takes through a course and what interactions he/she opens. This practice works for all types of interactions, whether they are click interactions or rollovers.

Quiz (cmi.interaction) Best Practices

Quizzes and scoring work well out of the box from Storyline. Each quiz question generates two statements. The first one will show that the learner experienced the slide.

Statements generated by quiz questions (This example is a True/False question)

Statements generated by quiz questions (This example is a True/False question)

For quiz slides, the slide name will use the question that is entered on the slide. The second statement will be the score of the answered question. The verb for the slide will be answered and the slide question will appear again. With the slide name Storyline will include the score for the answer.  

Best Practice

When creating the results slide, be sure to give the slide a meaningful name as with the other slides.

Rationale

When the statement is created upon completion of the quiz, the name of the results slide will be used in the Name portion of the statement. By default the name will simply be Results Slide.

If a passing grade has been accomplished two statements will be generated stating that the course has been passed.

Passed course statements

Passed course statements

If the quiz is failed; two statements will be generated that the learner failed the course.

failed_statements

Failed course statements

Publishing and Launching the Content

When publishing content simply select Tin Can API for the LMS in the Output Options menu.

tincan_selection

Selection to generate xAPI statements

After clicking the Reporting and Tracking button,enter a meaningful title as this will be the title that appears in the course statements, which include the attempted, the pass, and the fail statements.

lms_fileds

Configuration fields

The Description is not required for the statements alone, but will appear in the JSON output of the xAPI output. If you are using an xAPI capable LMS the Description will be important for the LMS display. The Identifier is important if the course is going into an LMS. If the course will be going into an xAPI-capable LMS it is recommended to leave the system generated ID there if the organization does not have a standard for Identifiers.

It is also important to keep the identifier consistent if you are updating an existing course. The Launch URL is used when hosting the course on an LMS that is not xAPI Compatible. A set of steps on how to setup the launch URL can be found here: http://www.articulate.com/support/storyline-2/publishing-articulate-storyline-2-content-for-tin-can-api#PrivateContentAuthorization  

If you will be uploading to Grassblade or a compatible LMS the Launch URL can be left as the default. To launch using a URL you need to add the endpoint (the LRS URL), authorization (LRS authorization), actor information(name and email address), the activity id (Identifier in the publish window), and the registration. An example and description can be found here: https://www.articulate.com/tincanapi/  

Before publishing click the Tracking button to set up how you want to identify a pass/fail on the course.

Pass/fail settings for output

Pass/fail settings for output

You can use slide views or quiz results. Once the setup is complete the course is published and a .zip file is created. 

If you are using a compatible LMS or Grassblade xAPI Companion the zip file can be uploaded directly to the system.  

There is a launcher available from Saltbox http://launcher.saltbox.com that allows the content to be launched without customizing the URL by hand. The link from the launcher can then be used in other systems.

JSON Examples

module (slide)

Sean Putman http://adlnet.gov/expapi/verbs/experienced ‘Introduction’

{
    "version": "1.0.0",
    "context": {
        "registration": "36fc1ee0-2849-4bb9-b697-71cd4cad1b6e",
        "contextActivities": {
            "grouping": {
                "id": "http://learnxapi.com/gb_xapi_content/storylin-test/"
            },
            "parent": {
                "id": "http://learnxapi.com/gb_xapi_content/storylin-test/"
            }
        }
    },
    "actor": {
        "objectType": "Agent",
        "mbox": "mailto:sputman34@gmail.com",
        "name": "Sean Putman"
    },
    "object": {
        "definition": {
            "type": "http://adlnet.gov/expapi/activities/module",
            "description": {
                "und": "Introduction"
            },
            "name": {
                "und": "Introduction"
            }
        },
        "objectType": "Activity",
        "id": "http://learnxapi.com/gb_xapi_content/storylin-test/6JojMjaKx7d"
    },
    "verb": {
        "id": "http://adlnet.gov/expapi/verbs/experienced"
    },
    "id": "87707e55-922e-43da-862a-eff0ce15dec4",
    "stored": "2015-08-20T13:06:24.427Z",
    "timestamp": "2015-08-20T13:06:24.427Z",
    "authority": {
        "account": {
            "homePage": "http://learnxapi.net/grassblade-lrs/xAPI/",
            "name": "15-557d7b8d7eda474"
        },
        "objectType": "Agent"
    }
}

cmi.interaction (Scored quiz question)

Sean Putman http://adlnet.gov/expapi/verbs/answered ‘How many JavaScript files need to be linked at the head of the file?’ with score 10

{
    "verb": {
        "id": "http://adlnet.gov/expapi/verbs/answered"
    },
    "context": {
        "registration": "36fc1ee0-2849-4bb9-b697-71cd4cad1b6e",
        "contextActivities": {
            "parent": {
                "id": "http://learnxapi.com/gb_xapi_content/storylin-test/6SgWpHHaW4W"
            },
            "grouping": {
                "id": "http://learnxapi.com/gb_xapi_content/storylin-test/"
            }
        }
    },
    "result": {
        "success": true,
        "response": "choice_5xwQ29qlMwQ",
        "score": {
            "raw": 10
        }
    },
    "actor": {
        "objectType": "Agent",
        "name": "Sean Putman",
        "mbox": "mailto:sputman34@gmail.com"
    },
    "object": {
        "objectType": "Activity",
        "definition": {
            "type": "http://adlnet.gov/expapi/activities/cmi.interaction",
            "description": {
                "und": "How many JavaScript files need to be linked at the head of the file?"
            },
            "interactionType": "choice",
            "correctResponsesPattern": [
                "choice_5xwQ29qlMwQ"
            ],
            "choices": [
                {
                    "description": {
                        "und": "1"
                    },
                    "id": "choice_6C9vkmlEA18"
                },
                {
                    "description": {
                        "und": "2"
                    },
                    "id": "choice_62Dc0ni5gRm"
                },
                {
                    "description": {
                        "und": "3"
                    },
                    "id": "choice_5xwQ29qlMwQ"
                },
                {
                    "description": {
                        "und": "4"
                    },
                    "id": "choice_6DwuO8P3NfO"
                }
            ],
            "name": {
                "und": "How many JavaScript files need to be linked at the head of the file?"
            }
        },
        "id": "http://learnxapi.com/gb_xapi_content/storylin-test/6VX40i6RX5q/5lAeCdoURWb"
    },
    "version": "1.0.0",
    "id": "eba3283b-1614-4e8f-9cbd-b2c0eed25b1b",
    "stored": "2015-08-19T19:38:32.993Z",
    "timestamp": "2015-08-19T19:38:32.993Z",
    "authority": {
        "account": {
            "homePage": "http://learnxapi.net/grassblade-lrs/xAPI/",
            "name": "15-557d7b8d7eda474"
        },
        "objectType": "Agent"
    }
}

objective

Sean Putman http://adlnet.gov/expapi/verbs/passed ‘xAPI Statements from Storyline’

{
    "verb": {
        "id": "http://adlnet.gov/expapi/verbs/passed"
    },
    "context": {
        "registration": "36fc1ee0-2849-4bb9-b697-71cd4cad1b6e",
        "contextActivities": {
            "parent": {
                "id": "http://learnxapi.com/gb_xapi_content/storylin-test/"
            },
            "grouping": {
                "id": "http://learnxapi.com/gb_xapi_content/storylin-test/"
            }
        }
    },
    "result": {
        "completion": true,
        "success": true,
        "score": {
            "scaled": 1
        },
        "duration": "PT0H20M41.62S"
    },
    "actor": {
        "objectType": "Agent",
        "name": "Sean Putman",
        "mbox": "mailto:sputman34@gmail.com"
    },
    "object": {
        "objectType": "Activity",
        "definition": {
            "type": "http://adlnet.gov/expapi/activities/course",
            "description": {
                "und": ""
            },
            "name": {
                "und": "xAPI Statements from Storyline"
            }
        },
        "id": "http://learnxapi.com/gb_xapi_content/storylin-test/"
    },
    "version": "1.0.0",
    "id": "8695b755-4cc8-4578-b514-f24f87dd522e",
    "stored": "2015-08-19T19:38:34.870Z",
    "timestamp": "2015-08-19T19:38:34.870Z",
    "authority": {
        "account": {
            "homePage": "http://learnxapi.net/grassblade-lrs/xAPI/",
            "name": "15-557d7b8d7eda474"
        },
        "objectType": "Agent"
    }
}

objective

Sean Putman http://adlnet.gov/expapi/verbs/passed ‘xAPI Statements from Storyline’

{
    "actor": {
        "objectType": "Agent",
        "mbox": "mailto:sputman34@gmail.com",
        "name": "Sean Putman"
    },
    "result": {
        "completion": false
    },
    "verb": {
        "id": "http://adlnet.gov/expapi/verbs/attempted"
    },
    "context": {
        "registration": "36fc1ee0-2849-4bb9-b697-71cd4cad1b6e",
        "contextActivities": {
            "grouping": {
                "id": "http://learnxapi.com/gb_xapi_content/storylin-test/"
            },
            "parent": {
                "id": "http://learnxapi.com/gb_xapi_content/storylin-test/"
            }
        }
    },
    "object": {
        "definition": {
            "type": "http://adlnet.gov/expapi/activities/course",
            "description": {
                "und": ""
            },
            "name": {
                "und": "xAPI Statements from Storyline"
            }
        },
        "objectType": "Activity",
        "id": "http://learnxapi.com/gb_xapi_content/storylin-test/"
    },
    "version": "1.0.0",
    "id": "b05fd1fb-65d5-4104-8b8a-60bdf4b8fd8e",
    "stored": "2015-08-20T13:06:23.90Z",
    "timestamp": "2015-08-20T13:06:23.90Z",
    "authority": {
        "account": {
            "homePage": "http://learnxapi.net/grassblade-lrs/xAPI/",
            "name": "15-557d7b8d7eda474"
        },
        "objectType": "Agent"
    }
}

 SEAN PUTMAN (VP, Learning and Development, Altair Engineering)

DSC_4801b-3 Sean Putman, the Vice President of Learning Development for Altair Engineering and the Owner of Intellectus Learning, has been an instructor, instructional designer, and developer for over 15 years. He has spent his career designing and developing training programs, both instructor-led and online, for many different industries.  Sean has also spent the last few years focusing on the use and deployment of the Experience API and its affect on learning interventions.  Sean has spoken at many industry conferences on xAPI and related topics.

Speak Your Mind

*