Как отправить xAPI statement из курса Storyline
Здесь вы узнаете, как заполнить и отправить утверждение xAPI в LRS.
Создание и настройка LRS
Для того, чтобы собирать утверждения xAPI необходима LRS. Их достаточно много. В этом примере будем использовать Veracity Learning LRS. Чтобы в ней зарегистрироваться необходимо выполнить следующие шаги:

  1. Перейти на сайт lrs.io
  2. Введите имя пользователя, почту и пароль
  3. Перейдите в свой почтовый ящик и подтвердите адрес электронной почты
  4. Нажмите кнопку Create an LRS
  5. Введите LRS name и нажмите кнопку Create
  6. Перейдите к блоку Your LRSs
  7. Нажмите на вашу LRS
  8. Нажмите на красную кнопку No Access Keys!
  9. Нажмите на зеленую кнопку Create New Key
  10. Введите My Key в поле KEY name и нажмите кнопку Save

Теперь LRS создана. В дальнейшем вам понадобятся значения Username и Password (чтобы их получить, просто нажмите на кнопку скопировать).
Настройка файла xapi-statement.js
Настройка функции и ее параметров
Дальше необходимо создать функцию JavaScript, которая будет передавать xAPI statement в LRS. Откройте файл xapi-statement.js и оберните его содержимое в функцию send_statement.

Функция — это именованная отдельно выделенная часть кода, которая решает конкретную задачу. Она создается для того, чтобы не повторять одну и ту же последовательность команд (инструкций) несколько раз.
function send_statement() {
  const player = GetPlayer();
  const userNamejs = player.GetVar("userName");
  const userEmailjs = player.GetVar("userEmail");
  {
    "actor": {
      "name": userNamejs,
      "mbox": "mailto:" + userEmailjs 
    },
  "verb": {
    "id": "http://adlnet.gov/expapi/verbs/completed",
    "display": { "en-US": "completed" }
  },
  "object": {
    "id": "http://example/xapi/firstmodule",
    "definition": {
      "name": { "en-US": "first module" }
    }
    }
  }
}
Затем добавьте параметры функции, чтобы ее можно было использовать в разных ситуациях (например, изменять verb и object).

Важно: обратите внимание, что в свойствах verb и object нужно изменить значения id, display и definition.
function send_statement(verb, verbId, object, objectId) {
  const player = GetPlayer();
  const userNamejs = player.GetVar("userName");
  const userEmailjs = player.GetVar("userEmail");
  {
    "actor": {
      "name": userNamejs,
      "mbox": "mailto:" + userEmailjs 
    },
    "verb": {
      "id": verbId,
      "display": { "en-US": verb }
    },
    "object": {
      "id": objectId,
      "definition": {
        "name": { "en-US": object }
      }
    }
  }
}
Использование ADL xAPI Wrapper
Далее нам нужно присвоить наш xAPI statement переменной. Это необходимый шаг для использования ADL xAPI Wrapper (это оболочка, которая облегчает связь xAPI между курсом Storyline и LRS).

Создадим переменную const statement:
const statement = {
    /* xAPI object (actor, verb, object) будут здесь */
  };
Чтобы использовать функциональные возможности xAPI Wrapper, нужно создать еще одну переменную result, которая является результатом функции ADL.XAPIWrapper.sendStatement(), вызванной с переменной statement. Подробнее об этой функции вы можете узнать в спецификации.
const result = ADL.XAPIWrapper.sendStatement(statement);
Важно: будьте внимательны к имени функции ADL.XAPIWrapper.sendStatement().

Ваш код должен выглядеть следующим образом:
function send_statement(verb, verbId, object, objectId) {
  const player = GetPlayer();
  const userNamejs = player.GetVar("userName");
  const userEmailjs = player.GetVar("userEmail");
  const statement = {
    "actor": {
      "name": userNamejs,
      "mbox": "mailto:" + userEmailjs 
    },
    "verb": {
      "id": verbId,
      "display": { "en-US": verb }
    },
    "object": {
      "id": objectId,
      "definition": {
        "name": { "en-US": object }
      }
    }
  };
  const result = ADL.XAPIWrapper.sendStatement(statement);
}
Создание объекта conf
Последнее, что нужно сделать, это настроить связь между вашей LRS и этим JavaScript файлом. Для этого нужно создать JSON объект conf. Объект conf содержит свойства endpoint и auth. Код выглядит так:
const conf = {
  "endpoint": ,
  "auth":
};
В свойстве endpoint нужно указать ссылку на вашу LRS, ее можно посмотреть здесь:
Важно: URL-адресLRS должен быть в кавычках (" ") и заканчиваться слешем (/).

В свойстве auth нужно указать API-ключа в нашем случае он будет состоять из значений Username и Password. Эти свойства вы можете найти во вкладке Manage LRS Keys.
const conf = {
  "endpoint": "https://my-test-lrs.lrs.io/xapi/",
  "auth": "Basic " + toBase64("Username:Password")
};
Важно:
  • не забудьте пробел в строке "Basic ".
  • кавычки перед Username и кавычки после Passwor должны остаться.
  • функция toBase64 нужна для преобразования типов данных.

Наконец, нам нужно сообщить LRS, что мы обновили конфигурацию. Для этого нужно вызвать функцию ADL.XAPIWrapper.changeConfig() с параметром conf:
ADL.XAPIWrapper.changeConfig(conf);
Теперь все это нужно объединить в файле:
function send_statement(verb, verbId, object, objectId) {
  const player = GetPlayer();
  const userNamejs = player.GetVar("userName");
  const userEmailjs = player.GetVar("userEmail");
  const conf = {
    "endpoint": "https://test-lrs-nikita-12-06.lrs.io/xapi/",
    "auth": "Basic " + toBase64("tuugje:ankeba")
  };
  ADL.XAPIWrapper.changeConfig(conf);
  const statement = {
    "actor": {
      "name": userNamejs,
      "mbox": "mailto:" + userEmailjs 
    },
    "verb": {
      "id": verbId,
      "display": { "en-US": verb }
    },
    "object": {
      "id": objectId,
      "definition": {
        "name": { "en-US": object }
      }
    }
  };
  const result = ADL.XAPIWrapper.sendStatement(statement);
}
Добавление триггеров JavaScript в Storyline
Осталось совсем немного). Нужно создать тригер, который вызывает JavaScript функцию send_statement. Для этого нажмите на кнопку Create a new trigger и выберите следующие параметры:
Функция send_statement принимает 4 параметра: verb, verbId, object и objectId, выполняемый JavaScript код будет выглядеть вот так:
send_statement("completed", "http://adlnet.gov/expapi/verbs/completed", "first module","http://example/xapi/firstmodule");
Важно:
  • все аргументы функции нужно писать в кавычках (здесь мы используем их как значение)
  • между каждым аргументом должна быть запятая
Публикация курса Storyline
Вам нужно опубликовать курс как web объект:
Нажать кнопку open:
Скачать файл JavaScript xAPI Wrapper c официального сайта adl и добавит его в папку проекта:
Затем добавить созданный вами файл xapi-statement.js:
Открыть с помощью вашего редактора кода файл story и после тега </style> добавьте две строчки кода:
<script type="text/javascript" src="xapiwrapper.min.js"></script>
<script type="text/javascript" src="xapi-statement.js"></script>
Они нужны для того, чтобы подключить к курсу файлы xapi-statement.js и xapiwrapper.min.js.
Проверка
Откройте файл story с помощью браузера, введите ваше имя и почту, нажмите кнопки Отправить. Затем перейдите в LRS, откройте вкладку Dashboards и проверьте отправленные вами данные.