Интеграция на основе SDK

Программное обеспечение Supervisor SDK представляет собой JavaScript-библиотеку, которую можно подключить на страницу любой системы тестирования и реализовать бесшовную интеграцию с системой прокторинга. Полная документация SDK доступна по адресу https://demo.proctoring.online/sdk/doc/.

Система тестирования должна соответствовать следующим требованиям:
1. страницы с прокторингом в системе тестирования должны открываться по протоколу HTTPS, на веб-сервере должен быть установлен валидный SSL-сертификат (можно бесплатно выпустить сертификат Let’s Encrypt);
2. страницы теста не должны полностью перезагружаться при переходе между вопросами, код SDK должен запускаться в начале теста и оставаться загруженным до его окончания (допускается перезагрузка страницы со стороны пользователя).

Необходимо учесть, что следующие параметры интеграции могут меняться:
  • адрес сервера: demo.proctoring.online используйте этот сервер только в качестве примера, в продакшене всегда используйте адрес своего сервера прокторинга;
  • провайдер авторизации: jwt по умолчанию название такое, но может быть изменено;
  • секретный ключ для JWT: your-256-bit-secret используется для подписи JWT-токена;
  • секретный ключ для веб-хуков: your-256-bit-secret указывается заголовке "X-Api-Key" веб-хука для проверки подлинности запроса.

1. Сценарий прокторинга

Сценарий взаимодействия участника и проктора с системой прокторинга и СДО в общем случае выглядит следующим образом:
1) участник авторизуется в СДО, открывает нужный тест, и инициируется начало сессии прокторинга;
2) перед началом тестирования участник проходит несколько предварительных этапов прокторинга (опционально): соглашается с правилами проведения мероприятия, проверяет оборудование, делает фото лица, фото документа, подключает мобильную камеру;
3) начинается тест, параллельно запускается сессия прокторинга;
4) во время тестирования осуществляется видеозапись веб-камеры (со звуком) и экрана компьютера, осуществляется автоматическое отслеживание нарушений и непрерывная верификация личности участника;
5) во время сеанса проктор может наблюдать за участниками, система в реальном времени подсказывает, на каких участников стоит обратить внимание;
6) проктор может взаимодействовать с участниками в чате или по видео- и аудиосвязи, может досрочно завершить сессию прокторинга в случае обнаружения грубых нарушений;
7) после завершения экзамена формируется оценка уровня доверия к результатам экзамена и видеопротокол с поминутной детализацией нарушений;
8) результаты передаются в СДО по веб-хуку.
Техническая реализация сценария:
1) На стороне сервера системы тестирования (СДО) нужно реализовать API генерации JWT-токена и передачи его на фронтэнд, где будет происходить инициализация сессии прокторинга через Supervisor SDK в функции init() с использованием этого токена.
2) Токен состоит из следующих частей (см. разделы 2.1 — 2.2):
  • Header — остаётся неизменным;
  • Payload — параметры пользователя и сессии в формате JSON;
  • Signature — формируется на основе данных Payload и секретного ключа.
3) На фронтэнде СДО нужно реализовать механизм получения токена для текущего пользователя и теста по API. Полученный JWT-токен нужно будет подставить в функцию инициализации сессии прокторинга init() в параметр "token" библиотеки Supervisor SDK (см. раздел 2.3).
4) В момент инициализации сессии прокторинга на стороне сервера системы прокторинга создаются (или обновляются) пользователь и сеанс прокторинга с заданными в JWT Payload параметрами. Участник видит интерфейс предварительных шагов перед запуском прокторинга.
5) Следом за выполнением функции init() нужно выполнить функцию start(), которая запустит непосредственно сам сеанс прокторинга для участника. Отображать сам тест участнику можно только после успешного выполнения функции start() (см. раздел 2.4). Иначе участник сможет получить доступ к тесту без прокторинга.
6) После завершения теста необходимо выполнить функцию stop(), чтобы сессия прокторинга тоже завершилась (см. раздел 2.5).
7) После обработки сеанса результаты передаются в СДО по веб-хуку, адрес которого указывается в параметре "api" (в JWT Payload), с помощью POST-запроса в формате "application/json".
Перед началом сеанса каждый пользователь проходит ряд шагов, которые настраиваются заранее и необходимы для выполнения всех условий проведения процедуры прокторинга (каждый шаг можно включить или отключить). Сюда входят: правила проведения мероприятия (требуется согласие пользователя), проверка оборудования, фотографирование лица, фотографирование документа, подключение мобильной камеры. Перед запуском сеанса запускается проверка компьютера, куда входит проверка браузера, веб-камеры, микрофона, сети и захвата экрана. Если технических проблем нет, то проверка проходит в автоматическом режиме, в противном случае пользователю выдается соответствующее сообщение с описанием проблемы и вариантами ее решения. После успешной проверки запускается сеанс прокторинга, в котором осуществляется наблюдение за пользователем.

Ниже представлены интерфейсы, которые можно отображать пользователю перед началом сеанса прокторинга. Интерфейсы отображаются поверх текущей страницы системы тестирования и не требуют подготовки специального места для их отображения.
а) Правила проведения мероприятия;
а) Правила проведения мероприятия;
б) Проверка оборудования;
б) Проверка оборудования;
в) Фотография лица;
в) Фотография лица;
г) Фотография документа;
г) Фотография документа;
д) Подключение мобильной камеры.
д) Подключение мобильной камеры.
После успешного прохождения данных шагов запускается режим наблюдения. В этом режиме пользователю можно отображать видео с его камеры (превью), уведомления о проблемах (нарушениях, обнаруженных системой автоматически), а также можно предоставить доступ к чату для связи с проктором. Проктор может выходить на связь с пользователем в любое время через чат или видео- и аудиосвязь. Проктор может завершить сеанс досрочно, указав заключение (положительное или отрицательное) и комментарий, в этом случае пользователю отображается соответствующее сообщение. Страница сеанса должна быть открыта в единственном экземпляре, система следит за этим самостоятельно. Если в браузере будет открыто несколько страниц с прокторингом, то предыдущие страницы автоматически блокируются и прокторинг в них останавливается без завершения самого сеанса. Продолжить прохождение сеанса можно будет только в последней открытой вкладке.
а) Видео с камеры (в кружке) и чат с проктором (текст, аудио, видео);
а) Видео с камеры (в кружке) и чат с проктором (текст, аудио, видео);
б) Блокировка контента в режиме инцидента;
б) Блокировка контента в режиме инцидента;
в) Сеанс завершен со стороны проктора;
в) Сеанс завершен со стороны проктора;
г) Страница была повторно открыта в соседней вкладке.
г) Страница была повторно открыта в соседней вкладке.
Уведомления о проблемах (нарушениях) отображаются пользователю автоматически, чтобы дать ему возможность исправить ситуацию, если проблема появилась непреднамеренно. Если пользователь не отреагировал на сообщения в течение минуты, то доступ к контенту автоматически блокируется до устранения проблемы (это поведения управляется опцией "addons[].lock").
Режим защиты от копирования контента запрещает копировать текст и картинки со страницы через буфер обмена и контекстное меню, запрещает сохранение страницы через диалог печати.

После завершения теста сессия прокторинга останавливается и все интерфейсы скрываются. Результаты по прокторингу передаются в систему тестирования по API с сервера прокторинга.

2. Интеграция SDK

2.1 Стандарт JSON Web Token (RFC 7519)

Для безопасной передачи параметров сессии прокторинга с защитой от изменения со стороны пользователя используется токены по стандарту JSON Web Token (RFC 7519). Интеграция заключается в реализации на стороне системы тестирования механизма генерации токенов JWT и использовании функций библиотеки SDK для управления сессией прокторинга.

JSON Web Token (JWT) — это JSON объект, который определен в открытом стандарте RFC 7519. Он считается одним из безопасных способов передачи информации между двумя участниками. Для его создания необходимо определить заголовок (header) с общей информацией по токену, полезные данные (payload), такие как id пользователя, его роль и т.д. и подписи (signature).

На схеме ниже изображен принцип взаимодействия пользователя с системами тестирования и прокторинга, используя JWT.
Общий сценарий взаимодействия следующий:

1) Пользователь системы тестирования авторизуется в ней, используя предусмотренные системой тестирования механизмы авторизации.
2) Перед началом каждой отдельной сессии прокторинга система тестирования формирует JWT, используя заранее определенный секретный ключ, который не должен быть доступен пользователям. Способ хранение ключа выбирается самой системой тестирования.
3) .JWT передается пользователю, а пользователь инициирует сессию в системе прокторинга через SDK с использованием полученного от системы тестирования токена JWT. В JWT хранится идентификатор пользователя (поле username), идентификатор сеанса прокторинга (поле identifier) и другие параметры сеанса.
4) Сервер системы прокторинга получает JWT, проверяет его валидность, а затем запускает сессию прокторинга для данного пользователя.

Дополнительную информацию по принципам работы JWT можно посмотреть в статье "Пять простых шагов для понимания JSON Web Tokens (JWT)".

2.2 Формирование токена

Формирование токена должно выполняться на сервере, а на клиент должена передаваться только токен (набор символов). Для создания токена достаточно:

1) Сформировать полезные данные (payload) в формате JSON, описывающие пользователя и конкретный сеанс этого пользователя в следующем формате:
<!--JWT payload-->

{
  "username": "a34c1a1a-53ef-4728-8dc5-9c4779a8586e",
  "nickname": "John Doe",
  "identifier": "565b30b8-5cfb-42e2-a292-478d20630d1b",
  "template": "default",
  "subject": "Tutorial: proctoring",
  "tags": [ "male" ]
}
2) Сгенерировать токен на сервере системы тестирования на основе полезных данных (payload), используя библиотеку (см. информацию на сайте https://jwt.io). Алгоритм шифрования - HS256, тип токена — JWT. Для сервера demo.proctoring.online секретный ключ для генерации токенов — "your-256-bit-secret". Используя данные выше, должен получиться следующий токен:
<!--Token-->

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImEzNGMxYTFhLTUzZWYtNDcyOC04ZGM1LTljNDc3OWE4NTg2ZSIsIm5pY2tuYW1lIjoiSm9obiBEb2UiLCJpZGVudGlmaWVyIjoiNTY1YjMwYjgtNWNmYi00MmUyLWEyOTItNDc4ZDIwNjMwZDFiIiwidGVtcGxhdGUiOiJkZWZhdWx0Iiwic3ViamVjdCI6IlR1dG9yaWFsOiBwcm9jdG9yaW5nIiwidGFncyI6WyJtYWxlIl19.1sHajdMz3n82hQEsfJTE3bii6mV3nOtTLkxTe6qwzuI
Описание параметров, которые можно использовать в JWT payload, приведено в таблице 2.1. Старайтесь использовать необходимый минимум параметров, обычно это: exp, username, nickname, template, identifier, subject, tags, api. Остальные параметры имеет смысл использовать только в случае, если будет предусмотрено их изменение на стороне системы тестирования. Если требуется указывать разные параметры сеансов для разных случаев, то используйте механизм шаблонов.

Таблица 2.1 — Описание параметров

Валидация токена

Параметр
Тип
Описание
exp*
Number
UNIX-время (в секундах), после которого токен станет недействительным

Параметры профиля пользователя

Параметр
Тип
Описание
username*
String
уникальный идентификатор пользователя (допускаются символы: A-Za-z0-9_-), для каждого пользователя должен быть только один идентификатор
role
String
роль пользователя ("student" или "proctor"), по умолчанию "student"
nickname
String
отображаемое имя пользователя
group
String
группа пользователя
labels
String[]
дополнительная информация, может использоваться для поиска пользователя
lang
String
язык интерфейса ("en" или "ru"), по умолчанию используется язык браузера
referrer
String
страница переадресации после выхода из системы прокторинга (для IFRAME или проктора), по умолчанию указывается страница с которой пришел пользователь

Параметры сеанса прокторинга

Параметр
Тип
Описание
identifier*
String
уникальный идентификатор сеанса прокторинга (допускаются символы: A-Za-z0-9_-), для каждого отдельного сеанса должен быть свой идентификатор
template*
String
идентификатор шаблона для текущего сеанса (допускаются символы: A-Za-z0-9_-)
subject
String
название сеанса (для отображения в интерфейсах)
timeout
Number
таймаут неактивности пользователя в минутах, после которого сеанс будет завершен автоматически
lifetime
Number
время жизни сеанса в минутах после его запуска
openAt
Date
дата, до которой нельзя начать сеанс (в формате ISO-8601**)
closeAt
Date
крайняя дата доступности сеанса для прохождения, после которой он будет завершен автоматически (в формате ISO-8601**)
members
String[]
список логинов наблюдателей сеанса
tags
String[]
теги для поиска сеанса
url
String
ссылка на страницу теста в случае интеграции через IFRAME
api
String
адрес API для передачи результатов по данному сеансу на сторонний сервер
* — обязательные параметры
** — формат ISO-8601 (в UTC): YYYY-MM-DDTHH:mm:ss.sssZ

2.3 Инициализация сеанса

В общем виде работа с SDK для пользователя с ролью "Участник" сводится к вставке небольшого JavaScript-кода на каждой странице, где нужно использовать прокторинг. Важно, чтобы скрипт "supervisor.js" загружался с того же сервера прокторинга, к которому идет подключение в коде, иначе при обновлении сервера прокторинга версия SDK и сервера будет различаться, что приведет к проблемам в работе прокторинга.
Необходимо передать токен на клиент в браузер и использовать его в функции init() следующим образом:
<!--HTML-->

<script src="//demo.proctoring.online/sdk/supervisor.js"></script>
<script>
  // создать экземпляр класса Supervisor
  var supervisor = new Supervisor({
    url: 'https://demo.proctoring.online'
  });
  // инициализация сессии прокторинга
  // в поле token можно указать строку, функцию или промис
  supervisor.init({
    // указать провайдер авторизации, по умолчанию 'jwt'
    provider: 'jwt',
    // получить строку с токеном JWT от вашего сервера
    // на стороне вашего сервера должен быть реализован API
    token: fetch('/api/token').then(function(response) {
      if (response.ok) return response.text();
      else throw Error('Failed to get JWT');
    })
  }).then(function() {
    // запустить сессию прокторинга сразу после инициализации
    return supervisor.start();
  }).then(function() {
    // запустить тест в системе тестирования
  }).catch(function(err) {
    // в случае ошибки отобразить соответствующее сообщение
    alert(err.toString());
    // выполнить переадресацию на главную страницу,
    // чтобы не дать начать тест без прокторинга
    location.href = '/';
  });
</script>
Обычно сеанс можно возобновить, например, при обновлении страницы в браузере. В этом случае следует использовать те же идентификаторы identifier и username в полезной нагрузке токена и повторно вызвать функцию init().

2.4 Запуск сеанса

После успешного выполнения функции init() следует запустить сеанс прокторинга функцией start(). Функции выполняются асинхронно и возвращают промис, поэтому вызов функции start() нужно осуществлять только после успешного завершения работы функции init().
После успешного запуска сеанса вызывается событие "start", на которое можно подписаться следующим образом:
<!--HTML-->

<script>
  // подписаться на событие запуска сеанса
  supervisor.on('start', function() {
    console.log('started');
  });
</script>

2.5 Завершение сеанса

Вместе с завершением тестирования также необходимо вызвать функцию stop() для завершения сеанса прокторинга. Без этого последняя минута может не сохраниться, а сеанс будет завершен автоматически лишь спустя некоторое время, указанное в таймауте.
<!--HTML-->

<script>
  // завершить сеанс прокторинга
  supervisor.stop()
    .then(function() {
      // разлогиниться на сервере
      return supervisor.logout();
  });
</script>
После завершения сеанса (сеанс может завершиться со стороны участника, проктора или автоматически по таймауту и дедлайну) вызывается событие "stop", на которое можно подписаться следующим образом:
<!--HTML-->

<script>
  // подписаться на событие завершения сеанса
  supervisor.on('stop', function() {
    console.log('stopped');
  });
</script>

2.6 Ссылки на основе токена

Токен также можно использовать для инициализации и начала сессии прокторинга по ссылке без использования функций SDK, если по какой-то причине использовать SDK на странице теста не удается. Для этого достаточно сформировать ссылку в следующем формате:
<!--URL-->

https://demo.proctoring.online/api/auth/jwt?token=<JWT>
Пояснения:
  • demo.proctoring.online — адрес сервера системы прокторинга,
  • jwt — имя провайдера авторизации,
  • — токен JWT.
При переходе по ссылке участник окажется в системе прокторинга, а после прохождения теста и выхода из системы прокторинга, будет перенаправлен обратно в систему тестирования. Страница теста в этом случае открывается в IFRAME системы прокторинга, а ее адрес берется из поля "url". Чтобы страница корректно открылась в IFRAME требуется поддержка протокола HTTPS с валидным SSL-сертификатом, а также правильно настроенные заголовки Content-Security-Policy и X-Frame-Options на страницах теста (либо не передавать эти заголовки вообще). Также в Chrome 80+ внесены изменения в политику установки файлов куки Set-Cookie, которая для кросс-доменных куков требуется добавить два параметра "SameSite=None; Secure". Вот пример опций заголовка ответа, который разрешает открывать стороннюю страницу в IFRAME на странице системы прокторинга и использовать куки в IFRAME:
<!--HTTP Header-->

Set-Cookie: <cookie-name>=<cookie-value>; SameSite=None; Secure
Content-Security-Policy: frame-src https://*.proctoring.online

2.7 Data-атрибуты для автоматической инициализации

Для простых вариантов использования SDK предусмотрена автоматическая инициализация и запуск сеанса, а также передача полезной нагрузки с помощью data-атрибутов скрипта (тега "script").
В таблице 2.2 перечислены поддерживаемые data-атрибуты.

Таблица 2.2 — Data-атрибуты для автоматической инициализации
Параметр
Описание
data-supervisor
Присутствие атрибута указывает на то, что требуется использовать автоматическую инициализацию SDK. Поддерживается два значения: start — осуществляется инициализация и запуск сессии прокторинга; init — осуществляется только инициализация сессии без запуска.
data-provider
Указывает какой провайдер использовать при инициализации, например, signup, login или plain.
data-referrer
Указывает на какую страницу сделать переадресацию после выхода.
data-*
Другие возможные поля полезной нагрузки, которые можно передавать для указанного провайдера.
Данный способ инициализации может использоваться совместно с другими интеграциями, например, LTI или ссылками JWT. В этому случае в ссылке на авторизацию указывается дополнительный параметр "redirect", который должен содержать адрес страницы (/api/auth/?redirect=/path/to/sdk), на которой размещен код с автоматической инициализацией SDK с одним единственным data-атрибутом "data-supervisor". Пример кода:
<!--HTML-->

<script src="https://demo.proctoring.online/sdk/supervisor.js" data-supervisor="start"></script>
Для запуска предварительных этапов прокторинга (такие как проверка оборудования) без запуска сеанса прокторинга можно использовать атрибут "data-supervisor" со значением "init". Пример кода:
<!--HTML-->

<script src="https://demo.proctoring.online/sdk/supervisor.js" data-supervisor="init"></script>
Для запуска сеанса прокторинга на странице системы тестирования с ручной регистрацией на мероприятие можно использовать провайдер "signup". Пример кода:
<!--HTML-->

<script src="https://demo.proctoring.online/sdk/supervisor.js" data-supervisor="start" data-provider="signup"></script>

3. Наблюдение и доступ к протоколам для прокторов

Наблюдать за сеансами в реальном времени и просматривать протоколы может пользователь с ролью "Проктор", авторизовавшись в системе прокторинга по токену JWT, по логину и паролю или открыв протокол по уникальной ссылке. В интерфейсе наблюдения проктор видит только те сеансы, в которых он является участником.

Проктор может зайти в систему прокторинга по логину и паролю, для этого через админку должны быть заранее созданы учетные записи прокторов, а их логины должны быть добавлены в необходимые сеансы (поле "members").

Можно сформировать специальные ссылки для перехода к конкретному протоколу сеанса. По таким ссылкам можно открыть протокол сеанса не являясь пользователем системы. Чтобы разрешить открывать сеансы по ссылке без авторизации нужно для конкретного сеанса включить опцию "addons[].shared" (также можно эту опцию включить в шаблоне). В этом случае рекомендуется использовать сложные идентификаторы сеанса, которые защищены от перебора. Ссылка на протокол формируется следующим образом:
<!--URL-->

https://demo.proctoring.online/api/report/<identifier>
Пояснения:
  • demo.proctoring.online — адрес сервера системы прокторинга,
  • — идентификатор сеанса.
Авторизовать конкретного проктора с автоматическим созданием аккаунта в системе прокторинга можно по ссылке с токеном JWT. Пример заполнения полей токена JWT для авторизации проктора:
<!--JWT payload-->

{
  "username": "proctor1",
  "role": "proctor"
}
Пример ссылки для авторизации проктора через JWT:
<!--URL-->

https://demo.proctoring.online/api/auth/jwt?token=<JWT>
Пояснения:
  • demo.proctoring.online — адрес сервера системы прокторинга,
  • jwt — имя провайдера авторизации,
  • — токен JWT.
Помимо этого, в JWT можно указать идентификатор сеанса (поле "identifier"), тогда у проктора сразу после авторизации откроется протокол указанного сеанса.

4. Получение результатов прокторинга

Система прокторинга может передавать результаты сеансов прокторинга в систему тестирования с помощью веб-хука в формате JSON. Это полезно, когда требуется прямо в системе тестирования объединить результаты тестирования и результаты прокторинга. Результаты передаются сразу после завершения сеанса со стороны участника или проктора, при автоматическом завершении сеанса по таймауту или при выставлении (или изменении) заключения проктора после проверки протокола уже какое-то время после завершения сеанса.

Передача результатов осуществляется HTTP-запросом методом POST к серверу системы тестирования со стороны сервера системы прокторинга по URL, который указывается в поле "api" каждого сеанса. Тип контента (заголовок "Content-Type") — "application/json". Ограничение доступа к API должно осуществляться по ключу, передаваемому в заголовке HTTP-запроса (по умолчанию это заголовок "X-Api-Key"). Запрос с одним "identifier" может выполняться несколько раз с разными данными, поэтому необходимо предусмотреть их обновление в системе тестирования при повторном получении данных от системы прокторинга. Если все хорошо, то код ответа должен быть 200, содержание тела ответа не учитывается и обычно оставляется пустым. В случае ошибки API должен возвращать код ответа отличный от 200.

Таблица 4.1 — Описание параметров
Поле
Тип
Описание
identifier*
String
Идентификатор сеанса
status
String
Статус сеанса: started - запущен, в процессе работы; skipped - пропущен, не был начат до дедлайна; stopped - завершен, но не оценен проктором; accepted - оценен проктором положительно; rejected - оценен проктором отрицательно.
duration
Number
Фактическая продолжительность сеанса (в минутах)
startedAt
Date
Дата и время фактического начала сеанса
stoppedAt
Date
Дата и время фактического окончания сеанса
score
Number
Автоматическая оценка доверия (0 - 100)
averages
Object
Список средних показателей за сеанс по каждой метрике в отдельности в формате "метрика:значение"
student
String
Логин участника, который проходил этот сеанс
proctor
String
Логин проктора, который выставил заключение
comment
String
Комментарий проктора по сеансу
signedAt
Date
Дата и время выставления заключения
conclusion
String
Заключение проктора в соответствии со шкалой оценивания
link
String
Ссылка на протокол сеанса
* — обязательные поля, остальные поля могут не передаваться или принимать значение "null".

Опционально можно включить в запрос веб-хука дополнительные файлы:
  • фотографию лица участника (JPEG);
  • фотографию документа участника (JPEG);
  • файл PDF-отчета по сеансу.

В этом случае тип контента (заголовок "Content-Type") поменяется на "multipart/form-data", а сам контент будет в себя включать JSON файл с результатами плюс дополнительные файлы в бинарном формате.
Проверить работы API передачи результатов через веб-хуки можно через сервис webhook.site. Для этого в создаваемом через JWT сеансе в поле "api" нужно указать URL, который указан на странице данного сервиса. После чего начать и завершить сеанса, а через несколько минут после завершения сеанса придет запрос на указанный URL. Вы сможете увидеть параметры запроса в интерфейсе данного сервиса.

5. Настройка интеграции в системе прокторинга

Чтобы подключить интеграцию с системой дистанционного обучения в системе прокторинга необходимо импортировать следующую конфигурацию хоста по аккаунтом менеджера:
<!--JSON-->

{
  "id": "<Host_ID>",
  "key": "<License_Key>",
  "params": {
    "webhooks": {
      "sdk": {
        "authorizer": "jwt",
        "integrator": "generic",
        "secretOrKey": "secret",
        "callbackURL": "query.redirect",
        "profile": {
          "username": "payload.username",
          "role": "payload.role",
          "nickname": "payload.nickname",
          "lang": "payload.lang",
          "group": "payload.group",
          "referrer": "payload.referrer||payload.referer",
          "labels": "payload.labels"
        },
        "register": {
          "identifier": "payload.identifier||payload.id",
          "template": "payload.template||'default'",
          "subject": "payload.subject",
          "timeout": "payload.timeout",
          "lifetime": "payload.lifetime",
          "members": "payload.members",
          "invites": "payload.invites",
          "metrics": "payload.metrics",
          "weights": "payload.weights",
          "addons": "payload.addons",
          "threshold": "payload.threshold",
          "locale": "payload.locale",
          "timezone": "payload.timezone",
          "url": "payload.url",
          "api": "payload.api",
          "tags": "payload.tags",
          "openAt": "payload.openAt||payload.scheduledAt",
          "closeAt": "payload.closeAt||payload.deadline",
          "rules": "payload.rules",
          "expires": "payload.expires"
        },
        "submit": {
          "uri": "room.api",
          "method": "POST",
          "body": {
            "identifier": "room.identifier",
            "link": "`https://${room.host}/api/report/${room.identifier}`",
            "status": "room.status",
            "duration": "room.duration",
            "startedAt": "room.startedAt",
            "stoppedAt": "room.stoppedAt",
            "score": "room.score",
            "student": "room.student.username",
            "proctor": "room.proctor.username",
            "comment": "room.comment",
            "signedAt": "room.signedAt",
            "conclusion": "room.conclusion",
            "averages": "room.averages",
            "verified": "room.student.verified"
          },
          "headers": {
            "x-api-key": "secret"
          }
        }
      }
    },
    "sdk": {
      "iframe": {
        "sandbox": "allow-scripts allow-forms allow-modals allow-same-origin allow-popups allow-downloads"
      }
    }
  },
  "comment": ""
}
где поля "secretOrKey" и "x-api-key" нужно заменить на случайно сгенерированную последовательность символов (латинские буквы разного регистра и цифры, рекомендуемая длина 24 символа); "id" — идентификатор хоста (если его не указывать, создастся новый хост); "key" — лицензионный ключ данного хоста.

6. Чек-лист для проверки интеграции

Для проверки правильности интеграции SDK используйте следующий проверочный список:
1.Скрипт SDK supervisor.js должен загружаться с того же сервера, к которому идет подключение, иначе версии сервера и SDK будут отличаться, что приведет к ошибкам в работе SDK. Сервер demo.proctoring.online может использоваться только для разработки и проверки интеграции.

2.Инициализация прокторинга функцией init() обычно выполняется непосредственно перед началом тестирования с прокторингом. В процессе инициализации пользователю могут отображаться интерфейсы с предварительными шагами (правила мероприятия, проверка оборудования, фотографирование, подключение мобильной камеры). Функция init() может вернуть ошибку, в этом случае начинать тест нельзя.

3.Прокторинг запускается функцией start() в момент начала тестирования. В процессе запуска прокторинга может быть запрошен доступ к камере, микрофону и экрану. После успешного запуска прокторинга на экране может отображаться кружок с камерой участника. Обучение или какие-то предварительные действия не должны включаться в сессию прокторинга, только сам тест (с ограничением по времени), иначе это может негативно сказаться на оценке доверия. Функция start() может вернуть ошибку, в этом случае начинать тест нельзя.

4.При обновлении страницы (F5 или закрытие и открытие заново) тест и сессия прокторинга должны восстанавливаться аналогично первому запуску через последовательный вызов функций init() и start(), в этом случае идентификаторы сеанса (поле identifier) и пользователя (поле username) не должны меняться.

5.После завершения теста сессия прокторинга должна быть завершена функцией stop(), а затем рекомендуется вызвать функцию logout().

6.При завершении сессии прокторинга доступ к тесту также должен быть закрыт. Сессия прокторинга может завершиться по инициативе участника, проктора или автоматически по таймауту и дедлайну. Для обработки этого сценария можно использовать подписку на событие stop.

7.Для проверки работы API передачи результатов (веб-хуки) можно использовать сервис webhook.site.