Инструкция по использованию API образовательной платформы NBICS.NET для разработки сторонних приложений и интеграции в сторонние сайты
1. Регистрация приложения
Для начала работы с API платформы стороннему разработчику понадобится зарегистрировать своё приложение в платформе.
Для этого необходимо связаться с сотрудником компании по телефону 8-800-234-23-29. Сотруднику необходимо сообщить адрес сайта (ApplicationSite) предполагаемого приложения и его название (ApplicationName – не превышает 31 символ). После регистрации приложения сторонний разработчик получит ApplicationPassword. Комбинация ApplicationName и ApplicationPassword является именным ключом для доступа приложения к API платформы.
2. Получение Token
Следующим шагом является получение Token – временного ключа доступа к API платформы.
Для этого необходимо сделать запрос:
/Application/GetToken
Параметры:
ApplicationName – название приложения (макс 31 символ) должно быть уникально в рамках платформы;
ApplicationPassword – пароль приложения для доступа к API платформы.
Тип запроса:
GET/POST
Пример запроса:
/Application/GetToken?ApplicationName=SomeApplicationName&ApplicationPassword=SomeApplicationPassword
Пример ответа:
{
"Token": "SomeToken" // Значение пароля токена
,"ValidTo": "2019-11-26T16:26:05" // Время, до которого действует токен
,"Success": true
,"Message": null // Заполняется в случае ошибки и Success = false
}
Примечание:
Поле ValidTo указывается для удобства отслеживания разработчиком стороннего приложения периода валидности токена.
Если токен устарел (ValidTo < Текущего времени), то необходимо повторно запросить токен с помощью данного запроса.
Период валидности токена – 2 часа с момента его получения.
Токен для приложения существует в единственном экземпляре.
При повторном запросе предыдущий токен уничтожается и генерируется новый.
3. Регистрация пользователя
Для фиксации факта прохождения урока необходимо создать пользователя, который будет проходить урок.
Для этого необходимо сделать запрос:
/Application/RegisterUser
Параметры:
Token – временный ключ, полученный на шаге 2;
Login – уникальный идентификатор пользователя в платформе (предпочтительно Email).
Тип запроса:
GET/POST
Пример запроса:
/Application/RegisterUser?Token=SomeToken&Login=SomeLogin
Пример ответа:
{
"User": {
"Login": "SomeLogin"
,"PasswordHash": "SomePasswordHash"
}
,"Success": true
,"Message": null // Заполняется в случае ошибки и Success = false
}
Примечание:
После регистрации пользователь сразу привязывается к приложению-владельцу токена.
4. Регистрация пользователя с параметрами
Для фиксации факта прохождения урока необходимо создать пользователя, который будет проходить урок.
Для этого необходимо сделать запрос:
/Application/RegisterUserWithData
Параметры:
Token – временный ключ, полученный на шаге 2;
UserData – данные о регистрируемом пользователе.
Пример параметра UserData:
{
Login: "SomeLogin"
,LastName: "Иванов"
,FirstName: "Иван"
,SecondName: "Иванович"
}
Тип запроса:
GET/POST
Пример запроса:
/Application/RegisterUser?Token=SomeToken&UserData={ Login:"SomeLogin", LastName:"Иванов", FirstName:"Иван", SecondName: "Иванович" }
Пример ответа:
{
"User": {
"Login": "SomeLogin"
,"PasswordHash": "SomePasswordHash"
,"LastName": "Иванов"
,"FirstName": "Иван"
,"SecondName": "Иванович"
}
,"Success": true
,"Message": null // Заполняется в случае ошибки и Success = false
}
Примечание:
После регистрации пользователь сразу привязывается к приложению-владельцу токена.
5. Изменение данных пользователя
Для изменения данных уже зарегистрированного пользователя необходимо сделать запрос:
/Application/UpdateUserData
Параметры:
Token – временный ключ, полученный на шаге 2;
UserData – данные о пользователе;
UserDataUpdateMap – перечень свойств, которые необходимо обновить.
Пример параметра UserData:
{
Login: "SomeLogin"
,LastName: "Иванов"
,FirstName: "Иван"
,SecondName: "Иванович"
}
Пример параметра UserDataUpdateMap:
{ LastName: true , SecondName: true , FirstName: true }
Тип запроса:
GET/POST
Пример запроса:
/Application/UpdateUserData?Token=SomeToken&UserData={ Login: "SomeLogin", LastName: "Иванов", FirstName: "Иван", SecondName: "Иванович" }&UserDataUpdateMap={ LastName: true, SecondName: true, FirstName: true }
Пример ответа:
{
"Success": true
,"Message": null
,"ErrorCode": null
}
Коды ошибок:
В случае ошибки в ответе возвращается Success=false, при этом поля Message и ErrorCode содержат информацию об ошибке.
ErrorCode | Message | Значение |
---|---|---|
-1 | User "SomeLogin" not found | Пользователь с заданным логином отсутствует |
6. Проверка существования пользователя в системе
Для проверки существования пользователя в системе, а также его привязок к приложениям:
/Application/CheckExistsUser
Параметры:
Token – временный ключ, полученный на шаге 2;
Login – логин пользователя;
Тип запроса:
GET/POST
Пример запроса:
/Application/CheckExistsUser?Token=SomeToken&Login=SomeLogin
Пример ответа 1:
{ "Applications": ["BitrixIntegrationApp"] ,"Success": true ,"Message": null ,"ErrorCode": 0 }
Пример ответа 2:
{ "Applications": [] ,"Success": false ,"Message": "User SomeUserLogin not found" ,"ErrorCode": -1 }
Коды ошибок:
В случае ошибки в ответе возвращается Success=false, при этом поля Message и ErrorCode содержат информацию об ошибке.
ErrorCode | Message | Значение |
---|---|---|
-1 | User "SomeLogin" not found | Пользователь с заданным логином отсутствует |
7. Получение списка пользователей, привязанных к приложению
Для получения списка всех пользователей, привязанных к приложению, необходимо сделать запрос:
/Application/GetUsers
Параметры:
Token – временный ключ, полученный на шаге 2.
Тип запроса:
GET/POST
Пример запроса:
/Application/GetUsers?Token=SomeToken
Пример ответа:
{ "Users": [{ "Login": "SomeLogin" ,"PasswordHash": "SomePasswordHash" ,"LastName":"Иванов" ,"FirstName":"Иван" ,"SecondName":"Иванович" }] ,"Success": true ,"Message": null // Заполняется в случае ошибки и Success = false }
8. Удаление пользователя из аккаунта приложения
Для удаления пользователя из аккаунта приложения необходимо сделать запрос:
/Application/DeleteUser
Параметры:
Token – временный ключ, полученный на шаге 2;
Login – уникальный идентификатор пользователя в платформе, указанный при его регистрации.
Тип запроса:
GET/POST
Пример запроса:
/Application/DeleteUser?Token=SomeToken&Login=SomeLogin
Пример ответа:
{
"Success": true
,"Message": null
}
9. Создание урока
Для создания урока необходимо сделать запрос:
/EducationHome/CreateLessonConfiguration
Параметры:
Token – временный ключ, полученный на шаге 2;
ConfigurationName – название создаваемого урока;
Login – уникальный идентификатор пользователя в платформе, указанный при его регистрации;
PasswordHash – хеш пароля пользователя, который платформа вернула при его регистрации.
Тип запроса:
GET/POST
Пример запроса:
/EducationHome/CreateLessonConfiguration?Token=SomeToken&ConfigurationName=SomeConfigurationName&Login=SomeLogin&PasswordHash=SomePasswordHash
Пример ответа:
{
"ConfigurationMetaData": {
"Id": -2147382881
,"Parent": null
,"Guid": "2250789c-f83e-41c5-aa95-d8bb865ed038"
,"Name": "Новый урок API"
,"Code": "Novyj-urok-API"
,"Children": []
,"Type": "Configuration"
,"Author": null
,"Editor": null
,"CreationTime": null
,"LastModifyTime": null
,"Index": 0
,"ReadOnly": false
,"Editable": false
,"IsTemplateConfiguration": false
,"CreatedFromTemplate": false
,"Settings": {"WidgetContainers":[],"WidgetEventsPermissions":[]}
,"Description":null
}
,"ErrorCode": 0
,"Success": true
,"Message":null
}
Примечание:
Созданный урок будет привязан к пользователю с указанными в параметрах Login и PasswordHash.
10. Изменение названия урока
Для изменения названия урока необходимо сделать запрос:
/EducationHome/UpdateLessonName
Параметры:
Token – временный ключ, полученный на шаге 2;
LessonGuid – Guid урока (обязателен если не указан LessonCode);
LessonCode – Code урока (обязателен если не указан LessonGuid);
NewName – новое название урока;
ToUpdateLessonCodeFromName – сгенерировать на основе нового названия новый код урока (необязательный параметр, по умолчанию = false).
Тип запроса:
GET/POST
Пример запроса:
/EducationHome/UpdateLessonName?Token=SomeToken&LessonGuid=SomeLessonGuid&NewName=SomeName
Пример ответа:
{
"ConfigurationMetaData": {
"Id": -2147382881
,"Parent": null
,"Guid": "2250789c-f83e-41c5-aa95-d8bb865ed038"
,"Name": "Новый урок API"
,"Code": "Novyj-urok-API"
,"Children": []
,"Type": "Configuration"
,"Author": null
,"Editor": null
,"CreationTime": null
,"LastModifyTime": null
,"Index": 0
,"ReadOnly": false
,"Editable": false
,"IsTemplateConfiguration": false
,"CreatedFromTemplate": false
,"Settings": {"WidgetContainers":[],"WidgetEventsPermissions":[]}
,"Description":null
}
,"ErrorCode": 0
,"Success": true
,"Message":null
}
11. Получение списка уроков
Для получения списка уроков необходимо сделать запрос:
/EducationHome/GetLessonsConfigurationsList
Параметры:
Token – временный ключ, полученный на шаге 2;
Login – уникальный идентификатор пользователя в платформе, к которому привязаны уроки (пользователь является либо владельцем урока, либо его редактором);
PasswordHash – хеш пароля пользователя, который платформа вернула при его регистрации;
LessonsOwners – необязательный список идентификаторов (логинов) пользователей в платформе, уроки которых необходимо вернуть. Если данный параметр задан, то возвращается список уроков указанных пользователей, если не задан, то возвращается список уроков пользователя с идентификатором, переданным в параметре Login.
Тип запроса:
GET/POST
Пример запроса:
/EducationHome/GetLessonsConfigurationsList?Token=SomeToken&Login=SomeLogin&PasswordHash=SomePasswordHash&LessonsOwners=["Login1","Login2"]
Пример ответа:
[{ "Name": "SomeName" ,"Code": "SomeCode" ,"Guid":"SomeGuid" // Редакторы урока - пользователи, которые имеют право редактировать урок ,"Editors":[{"LastName":"LastName1","FirstName":"FirstName1","SecondName":"SecondName1","Login":"Login1"}] } ,{ "Name": "SomeName2" ,"Code": "SomeCode2" ,"Guid":"SomeGuid2" // Редакторы урока - пользователи, которые имеют право редактировать урок ,"Editors":[{"LastName":"LastName2","FirstName":"FirstName2","SecondName":"SecondName2","Login":"Login2"}] }]
12. Удаление урока
Для удаления урока необходимо сделать запрос:
/EducationHome/DeleteLessonConfiguration
Параметры:
ConfigurationCode – код (Code) урока, который необходимо удалить;
Token – временный ключ, полученный на шаге 2;
Login – уникальный идентификатор пользователя в платформе, к которому привязан урок;
PasswordHash – хеш пароля пользователя, который платформа вернула при его регистрации.
Тип запроса:
GET/POST
Пример запроса:
/EducationHome/DeleteLessonConfiguration?Token=SomeToken&Login=SomeLogin&PasswordHash=SomePasswordHash?ConfigurationCode=SomeConfigurationCode
Пример ответа:
{
"Success": true
,"Message": null
}
Примечание:
Для удаления урока необходимо указать Login и PasswordHash пользователя, к которому этот урок привязан.
13. Получение списка редакторов урока
Для получения списка редакторов урока необходимо сделать запрос:
/EducationHome/GetLessonEditors
Параметры:
Token – временный ключ, полученный на шаге 2;
LessonGuid – уникальный идентификатор урока в платформе (обязателен если не указан LessonCode);
LessonCode – код урока в платформе (обязателен если не указан LessonGuid).
Тип запроса:
GET/POST
Пример запроса:
/EducationHome/GetLessonEditors?Token=SomeToken&LessonGuid=SomeLessonGuid
Пример ответа:
{ "Users":[ {"Login":"maitakov","PasswordHash":null,"LastName":"","FirstName":"","SecondName":""}, {"Login":"petrenko","PasswordHash":null,"LastName":"","FirstName":"","SecondName":""} ] ,"Success":true ,"Message":null ,"ErrorCode":null }
Примечание:
Если одновременно указаны LessonCode и LessonGuid, то будет использован LessonGuid.
Список пользователей включает в себя владельца урока и всех его редакторов. Список редакторов уроков также возвращается в методе "Получение списка уроков" (п. 10).
14. Добавление редакторов урока
Для добавления редакторов к уроку необходимо сделать запрос:
/EducationHome/AddLessonEditors
Параметры:
Token – временный ключ, полученный на шаге 2;
LessonGuid – уникальный идентификатор урока в платформе (обязателен если не указан LessonCode);
LessonCode – код урока в платформе (обязателен если не указан LessonGuid);
EditorsToAdd – список пользователей, добавляемых в качестве редакторов урока.
Тип запроса:
GET/POST
Пример запроса:
/EducationHome/AddLessonEditors?Token=SomeToken&LessonGuid=SomeLessonGuid&EditorsToAdd=[{Login: "SomeLogin"}, {Login: "SomeLogin2"}]
Пример ответа:
{ "Success":true ,"Message":null ,"ErrorCode":null }
Примечание:
Если одновременно указаны LessonCode и LessonGuid, то будет использован LessonGuid.
15. Удаление редакторов урока
Для удаления редакторов урока необходимо сделать запрос:
/EducationHome/RemoveLessonEditors
Параметры:
Token – временный ключ, полученный на шаге 2;
LessonGuid – уникальный идентификатор урока в платформе (обязателен если не указан LessonCode);
LessonCode – код урока в платформе (обязателен если не указан LessonGuid);
EditorsToRemove – список пользователей-редакторов, удаляемых из урока.
Тип запроса:
GET/POST
Пример запроса:
/EducationHome/RemoveLessonEditors?Token=SomeToken&LessonGuid=SomeLessonGuid&EditorsToRemove=[{Login: "SomeLogin"},{Login: "SomeLogin2"}]
Пример ответа:
{ "Success":true ,"Message":null ,"ErrorCode":null }
Примечание:
Если одновременно указаны LessonCode и LessonGuid, то будет использован LessonGuid.
При удалении владельца урока (пользователь создавший урок) владельцем становится первый редактор. Единственного редактора урока (он же владелец) удалить нельзя.
16. Встраивание урока в свой сайт
Для получения урока с целью вставки на свой сайт необходимо сделать запрос:
/Application/GetConfigurationFragment
Параметры:
ConfigurationCode – код (Code) урока;
Token – временный ключ, полученный на шаге 2;
Login – уникальный идентификатор пользователя в платформе;
PasswordHash – хеш пароля пользователя, который платформа вернула при его регистрации;
ColorSchemeName – цветовая схема урока (необязательный параметр, возможные варианты: blue (по умолчанию), green, orange, red, purple);
CurrentLocalizationCode – код языка интерфейса урока (необязательный параметр, возможные варианты: ru (по умолчанию), en).
Тип запроса:
GET/POST
Пример запроса:
/Application/GetConfigurationFragment?Token=SomeToken&Login=SomeLogin&PasswordHash=SomePasswordHash&ConfigurationCode=SomeConfigurationCode
Пример ответа:
html-страница
Примечание:
Если Login и PasswordHash принадлежат пользователю-владельцу урока, то урок будет доступен для редактирования, в противном случае – только для прохождения.
17. Статистика прохождения уроков
Для получения статистики прохождения уроков необходимо сделать запрос:
/EducationHome/GetStatistics
Параметры:
Lessons – уроки, по которым необходимо получить статистику (необязательный параметр, если не указан, то будет отобрана статистика по всем урокам);
Users – пользователи, по которым необходимо получить статистику (необязательный параметр, если не указан, то будет отобрана статистика по всем пользователям);
Token – временный ключ, полученный на шаге 2;
LastLoadedDataTime – временная метка последней порции данных статистики, загруженной в предыдущем запросе (необязательный параметр, при указании параметра будет загружена статистика после указанного времени, новая метка возвращается в результате каждого запроса);
Portion– размер порции данных (количество этапов уроков), которое будет выгружено запросом (необязательный параметр, можно указать значение от 1 до 1000, по умолчанию 1000).
Тип запроса:
GET/POST
Пример запроса:
/EducationHome/GetStatistics?Token=SomeToken&Lessons=[{Code:"SomeLessonCode"}]&Users=[{Email:"SomeUserEmail"}]&LastLoadedDataTime=01/27/2020 10:04:42&Portion=10
Пример ответа:
{ "IsDataFull": false, // Если true, то загружены все данные статистики по указанным параметрам, // если нет, то нужно делать ещё запрос, предварительно изменив // параметр LastLoadedDataTime "Data": [{ // идентификатор попытки прохождения урока "LessonTryGuid": "33017099-ecb1-4435-97fd-2a90e921d746" // пользователь, который проходил урока ,"Student": { "ConnectionIds": [], "Id": -2147475976, "Name": null, "Photo": null, "Email": "maitakov@mail.ru", "SharedCount": 0, "IsShared": false, "IsRejected": false, "Type": 0 }, "Configuration": { // урок, который проходил пользователь "Id": -2147375499, "Parent": null, "Guid": "018c016d-6421-49a9-9f4a-6a7cd55544e5", "Name": null, "Code": "NewLessonMaitakov", "Children": [], "Type": "Configuration", "Author": null, "Editor": null, "CreationTime": null, "LastModifyTime": null, "Index": 0, "ReadOnly": false, "Editable": false, "IsTemplateConfiguration": false, "CreatedFromTemplate": false, "Settings": { "WidgetContainers": [], "WidgetEventsPermissions": [] }, "Description": null }, // этап урока, который проходил пользователь "Phase": { // идентификатор этапа "Guid": "2b694061-1712-40da-ba26-246ade18a2fd", // название этапа "Name": "Новый этап", // тип этапа. Возможны варианты: Construction, Process, Classification, // Test, PDFDocument, Iframe "Type": "Test", // результат прохождения этапа: // true - этап пройден успешно, false - этап не пройден "Success": true, // количество баллов, которое пользователь // набрал в данном этапе (возможно дробное значение) "StudentSuccessTestCount": 3.0, // процент успешного прохождения этапа, начиная с которого // этап считается пройденным (устанавливается автором урока) "SuccessPercent": 100, // признак, что этап ожидает ручной оценки преподавателем "WaitForManualCheck": false, // количество этапов в уроке "LessonPhasesCount": 1, // общее количество баллов, которое можно набрать в данном этапе "TotalTestCount": 3, // порядковый номер этапа в уроке в момент прохождения "PhaseIndexInLesson": 0, // время начала прохождения этапа "StartTime": "2020-01-27T09:14:28", // время окончания прохождения этапа "EndTime": "2020-01-27T09:14:32", // статистика по этапу типа "Тест" "TestStatistics": { // Вопросы, на которые отвечал студент "Questions": [{ // Возможные ответы на вопрос "Answers": [{ "Guid": "cd6a441b-9bde-47d5-84c1-20908106318a", "Text": "1" }, { "Guid": "dbc0cf2c-7822-4b9d-bc92-0ff42e1fa0fc", "Text": "2" }, { "Guid": "5894b5dd-5406-456e-952a-09affb4cc608", "Text": "3" }, { "Guid": "4da324dd-0c47-45e5-ad89-42a8a2b77717", "Text": "4" }], // Guid`ы правильных ответов (их может быть несколько) "RightAnswersGuids": ["dbc0cf2c-7822-4b9d-bc92-0ff42e1fa0fc"], // Блоки частей вопроса (текста и пропусков) для типа вопроса // Gaps "Blocks": [ { // Text, Gap (текст или пропуск) "Type":"Text", "Guid":"d7df5875-d4b4-447e-8a81-2d465e948ba2", "Text":"Начало текста" }, { "Type":"Gap", "Guid":"aa3497db-bd19-4aa4-ac06-3e83dd9d6cba", // Input, select (ввод текста или выбор из вариантов) "Mode":"Input", "RightAnswersGuids":[], "IsCaseSensitive":false, // Правильные варианты вводимого текста "Elements":[{ "Guid":"f733af6b-ac0f-473e-a6e8-3e6516a5d530", "Text":"1" },{ "Guid":"4a2ae4d4-957a-4dc7-8852-4800e08cc516", "Text":"2" }] }, { "Type":"Text", "Guid":"6ebb671b-6fd1-4133-89e1-a1ce10114576", "Text":"продолжение текста" }, { "Type":"Gap", "Guid":"4a124798-8c9e-4b3c-8b9f-2bf65d4ac596", "Mode":"Select", "RightAnswersGuids": [ "bdfec37a-a84e-4b9a-b86b-4c5b40aa1e93" ], "IsCaseSensitive":false, // варианты ответов "Elements":[ { "Guid":"26845223-29d6-4208-94f1-592607b9fec5", "Text":"Вариант 1" }, { "Guid":"bdfec37a-a84e-4b9a-b86b-4c5b40aa1e93", "Text":"Вариант 2" }] } ], "Guid": "8ddf1537-3422-45f6-a94a-ac07aee7eae1", // Количество баллов, которые получит студент // при правильном ответе на вопрос "PointsForRightAnswer": 3.0, // Текст правильного ответа (для вопросов типа "Текст") "RightTextAnswer": "", // Текст вопроса "Text": "1+1=?", // Тип вопроса: // Single - один правильный ответ из многих // Multiple - несколько правильных ответов из многих // Gaps - заполнение пропусков // Text - текстовый ответ "Type": "Single" }], // Ответы, которые дал студент "StudentAnswers": [{ // идентификаторы ответов, которые дал студент "AnswersGuids": ["dbc0cf2c-7822-4b9d-bc92-0ff42e1fa0fc"], // максимальное количество баллов, // которое можно набрать за этот вопрос "MaxPointsForQuestion": 3.0, // идентификатор вопроса, на который был дан ответ "QuestionGuid": "8ddf1537-3422-45f6-a94a-ac07aee7eae1", // количество баллов, // которое набрал студент за этот вопрос "StudentPoints": 3.0, // тип вопроса "Type": "Single", "Blocks": [ { // тут тип всегда = Gap "Type":"Gap", "Guid":"aa3497db-bd19-4aa4-ac06-3e83dd9d6cba", "Mode":"Input", "StudentAnswer": { "Text":"2", "Guid":"4a2ae4d4-957a-4dc7-8852-4800e08cc516" } }, { "Type":"Gap", "Guid":"4a124798-8c9e-4b3c-8b9f-2bf65d4ac596", "Mode":"Select", "StudentAnswer": { "Text":"Вариант 2", "Guid":"bdfec37a-a84e-4b9a-b86b-4c5b40aa1e93" } }] }] } } }], // временная метка (самое позднее время окончания этапа в рамках текущего запроса), // необходимо для порционной выгрузки статистики. // этот параметр в таком же формате необходимо // передать в следующем запросе, чтобы выгрузить все этапы, // которые были пройдены после этого времени. "LastLoadedDataTime": "01/27/2020 09:14:32", // Результат запроса "Success": true, // Сообщение, появляется в случае ошибки "Message": null }
Примечание:
Все параметры фактически фильтруют запрашиваемую статистику. Таким образом, можно отбирать данные по конкретному пользователю и уроку, начиная с определённого этапа.
Необходимо отбирать данные порционно и при этом сохранять параметр "LastLoadedDataTime", который необходимо использовать в следующем запросе (это снимает необходимость каждый раз запрашивать всю статистику целиком).
Без указания параметра "LastLoadedDataTime" сервер вернёт первые Portion (по умолчанию 1000) этапов. Более 1000 этапов сервер не возвращает.
18. Агрегированная статистика прохождения уроков
Для получения агрегированной по урокам статистики прохождения уроков необходимо сделать запрос:
/EducationHome/GetStatisticsAggregatedByLesson
Параметры:
Lessons – уроки, по которым необходимо получить статистику (необязательный параметр, если не указан, то будет отобрана статистика по всем урокам);
Users – пользователи, по которым необходимо получить статистику (необязательный параметр, если не указан, то будет отобрана статистика по всем пользователям);
Token – временный ключ, полученный на шаге 2;
GetOnlyFinalResult – отбор только конечного результата без самих попыток (необязательный параметр, по умолчанию равен "true");
Тип запроса:
GET/POST
Пример запроса:
/EducationHome/GetStatisticsAggregatedByLesson?Token=SomeToken&Lessons=[{Code:"SomeLessonCode"}]&Users=[{Email:"SomeUserEmail"}]
Пример ответа:
{ "Data":[{ // Уроки "Lessons": [{ // Попытки (отбираются при GetOnlyFinalResult = false) "Tries": [] // Идентификатор урока ,"Guid": "659c6dc3-4478-4bc8-af3a-58f08ba3c174" // Код урока (тоже уникальный) , "Code": "Kofemashiny" // Название урока ,"Name": "Кофемашины" // Урок пройден успешно (Success == true && SomeTryWaitForManualCheck = false) // или урок ожидает проверки (Success == true && SomeTryWaitForManualCheck = true) // или урок не пройден (Success == false) ,"Success": true // Время завершения первой успешной попытки прохождения урока , "SuccessTime": "2022-10-20T09:26:00" // Урок ожидает проверки ,"SomeTryWaitForManualCheck": false }] // Студент ,"Student": { "ConnectionIds": [] ,"Id": -2147445699 ,"Name": null ,"FamilyName": null ,"Patronymic": null ,"Entity": null ,"Photo": null ,"Email": "efe65e86d23086336f37b6c73a47745e/16281" ,"SharedCount": 0 ,"IsShared": false ,"IsRejected": false ,"Type": 0 } }
19. Удаление статистики прохождения уроков
Для удаления статистики прохождения уроков необходимо сделать запрос:
/EducationHome/DeleteUsersStatistics
Параметры:
Lessons – уроки, по которым необходимо удалить статистику (необязательный параметр, если не указан, то будет удалена статистика по всем урокам);
Users – пользователи, по которым необходимо удалить статистику (необязательный параметр, если не указан, то будет удалена статистика по всем пользователям);
Token – временный ключ, полученный на шаге 2;
TimeFrom – временная метка, начиная с которой будет удаляться статистика (необязательный параметр, если не указан, то будет удалена статистика за всё время).
Тип запроса:
GET/POST
Пример запроса:
/EducationHome/DeleteUsersStatistics?Token=SomeToken&Lessons=[{Code:"SomeLessonCode"}]&Users=[{Email:"SomeUserEmail"}]&TimeFrom=04/06/2020 15:01:00
Пример ответа:
{ "Success": true ,"Message": null ,"ErrorCode": null }
Примечание:
Все параметры фактически фильтруют удаляемую статистику. Таким образом, можно удалять данные по конкретному пользователю и уроку, начиная с определённого времени.
20. Подписка на события урока (встроенного в iframe) родительской страницей (страница, в которой находится iframe)
Урок, встраиваемый с помощью iframe в сторонний сайт, может отправлять некоторые события родительскому для iframe окну.
Чтобы подписаться на какое-либо событие необходимо вставить следующий код (или его модификацию) на языке JavaScript в страницу, в которую встроен iframe:
var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
var eventer = window[eventMethod];
var messageEvent = eventMethod === "attachEvent" ? "onmessage" : "message";
eventer(messageEvent, function (e) {
let Event = e.data || e.message;
console.log(Event);
});
Пример структуры параметра Event:
{
Type: "LessonFinished", // тип события
Data: {
Success: true, // успешность прохождения урока
Code: "Novaya-konfiguraciya12345678921", // код урока
Name: "Новая конфигурация", // название урока
Guid: "29904894-0928-4c4d-99c7-339f2bd1bd7c", // guid урока
SuccessPhasesCount: 7, // количество успешно пройденных этапов
TotalPhasesCount: 7, // количество этапов всего
TotalPhasesWithProgressCount: 1, // количество этапов с заданиями
TotalProgressPercent: 100 // общий процент выполнения урока
}
}
Примечание:
При успешном прохождении урока (Success = true) общий процент выполнения урока (TotalProgressPercent) не всегда будет равен 100.