QUERY_EXPORT_TYPE_COURSE_LESSON_PRACTICE_ATTEMPT_FIND_MANY
Это тип отчёта для метода query-export/generate: передайте его
в поле type, а описанные ниже поля — в variables.
Выгружает список попыток выполнения практических заданий с оценками, статусами и информацией о студенте.
Колонки отчёта
- ID пользователя
- Фамилия Имя
- Способ входа
- Номер телефона
- ID курса
- Название курса
- Куратор/проверяющий
- Урок
- Статус
- Кол-во верных ответов
- Общее кол-во вопросов
- Набранное кол-во баллов
- Общее кол-во баллов
- Процент полученных баллов
- Номер попытки
- Всего попыток
- Дата отправки
- Дедлайн
- После дедлайна
- Дата создания
- Последняя активность
В экспорте формата JSON дополнительно отдаются технические поля:
email, attemptId, practiceId,
studentSex, dateOfBirth, addedDate, lessonId, totalTasks, maxPointsAmount, pointsAmount,
statusHistoryLogs, attemptUpdatedAt.Переменные (variables)
object
required
Параметры фильтрации.
Show Свойства filter
Show Свойства filter
integer[]
Фильтр по ID практик.
integer[]
Фильтр по ID пользователей.
integer[]
Фильтр по ID кураторов.
integer[]
Фильтр по ID курсов.
integer[]
Фильтр по ID продуктов.
integer[]
Фильтр по ID уроков.
integer[]
Фильтр по ID запусков.
boolean
Фильтр по завершенности попытки.
integer[]
Фильтр по ID сообщений (комментариев проверки).
string[]
Фильтр по статусам попыток. Массив из значений:
Created, OnReview, Verified, AutoVerified, OnCorrection, Failed, Stacked.string
Поиск по тексту (до 50 символов). Ищет по имени студента.
object
object
Параметры сортировки. Значения:
ASC (по возрастанию) или DESC (по убыванию).Show Свойства sort
Show Свойства sort
string
Сортировка по ID.
ASC | DESC.string
Сортировка по дате создания.
ASC | DESC.string
Сортировка по дате обновления.
ASC | DESC.string
Сортировка по дате отправки на проверку.
ASC | DESC.string
Сортировка по порядковому номеру.
ASC | DESC.string
Сортировка по статусу попытки.
ASC | DESC.string
Сортировка по проценту правильности.
ASC | DESC.curl --location 'https://api.exode.biz/saas/v2/query-export/generate' \
--header 'Seller-Id: {{ sellerId }}' \
--header 'School-Id: {{ schoolId }}' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_TOKEN' \
--data '{
"type": "QUERY_EXPORT_TYPE_COURSE_LESSON_PRACTICE_ATTEMPT_FIND_MANY",
"variables": {
"filter": {
"courseIds": [5],
"statuses": ["OnReview", "Verified"],
"sentToReviewAtDateRange": {
"from": "2025-01-01T00:00:00Z",
"to": "2025-06-30T23:59:59Z"
}
},
"sort": {
"sentToReviewAt": "DESC"
}
}
}'
const axios = require('axios');
const exportPracticeAttempts = async () => {
try {
const response = await axios.post('https://api.exode.biz/saas/v2/query-export/generate', {
type: 'QUERY_EXPORT_TYPE_COURSE_LESSON_PRACTICE_ATTEMPT_FIND_MANY',
variables: {
filter: {
courseIds: [5],
statuses: ['OnReview', 'Verified'],
sentToReviewAtDateRange: {
from: '2025-01-01T00:00:00Z',
to: '2025-06-30T23:59:59Z'
}
},
sort: {
sentToReviewAt: 'DESC'
}
}
}, {
headers: {
'Seller-Id': '{{ sellerId }}',
'School-Id': '{{ schoolId }}',
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_TOKEN'
}
});
const { uuid } = response.data.payload;
console.log('Execution UUID:', uuid);
} catch (error) {
console.error('Error:', error.response?.data || error.message);
}
};
exportPracticeAttempts();
<?php
$url = 'https://api.exode.biz/saas/v2/query-export/generate';
$data = [
'type' => 'QUERY_EXPORT_TYPE_COURSE_LESSON_PRACTICE_ATTEMPT_FIND_MANY',
'variables' => [
'filter' => [
'courseIds' => [5],
'statuses' => ['OnReview', 'Verified'],
'sentToReviewAtDateRange' => [
'from' => '2025-01-01T00:00:00Z',
'to' => '2025-06-30T23:59:59Z'
]
],
'sort' => [
'sentToReviewAt' => 'DESC'
]
]
];
$headers = [
'Seller-Id: {{ sellerId }}',
'School-Id: {{ schoolId }}',
'Content-Type: application/json',
'Authorization: Bearer YOUR_TOKEN'
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode === 200 || $httpCode === 201) {
$result = json_decode($response, true);
echo "Execution UUID: " . $result['payload']['uuid'] . "\n";
} else {
echo "Error: HTTP $httpCode\n";
echo $response;
}
?>
import requests
url = 'https://api.exode.biz/saas/v2/query-export/generate'
data = {
'type': 'QUERY_EXPORT_TYPE_COURSE_LESSON_PRACTICE_ATTEMPT_FIND_MANY',
'variables': {
'filter': {
'courseIds': [5],
'statuses': ['OnReview', 'Verified'],
'sentToReviewAtDateRange': {
'from': '2025-01-01T00:00:00Z',
'to': '2025-06-30T23:59:59Z'
}
},
'sort': {
'sentToReviewAt': 'DESC'
}
}
}
headers = {
'Seller-Id': '{{ sellerId }}',
'School-Id': '{{ schoolId }}',
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_TOKEN'
}
try:
response = requests.post(url, json=data, headers=headers)
response.raise_for_status()
result = response.json()
print(f"Execution UUID: {result['payload']['uuid']}")
except requests.exceptions.RequestException as e:
print(f'Error: {e}')
ИдентификаторыКурсов = Новый Массив;
ИдентификаторыКурсов.Добавить(5);
Статусы = Новый Массив;
Статусы.Добавить("OnReview");
Статусы.Добавить("Verified");
ДиапазонДат = Новый Структура;
ДиапазонДат.Вставить("from", "2025-01-01T00:00:00Z");
ДиапазонДат.Вставить("to", "2025-06-30T23:59:59Z");
Фильтр = Новый Структура;
Фильтр.Вставить("courseIds", ИдентификаторыКурсов);
Фильтр.Вставить("statuses", Статусы);
Фильтр.Вставить("sentToReviewAtDateRange", ДиапазонДат);
Сортировка = Новый Структура;
Сортировка.Вставить("sentToReviewAt", "DESC");
Переменные = Новый Структура;
Переменные.Вставить("filter", Фильтр);
Переменные.Вставить("sort", Сортировка);
Данные = Новый Структура;
Данные.Вставить("type", "QUERY_EXPORT_TYPE_COURSE_LESSON_PRACTICE_ATTEMPT_FIND_MANY");
Данные.Вставить("variables", Переменные);
// Serialize body to JSON
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, Данные);
ТелоЗапроса = ЗаписьJSON.Закрыть();
Соединение = Новый HTTPСоединение("api.exode.biz", 443, , , , 30, Новый OpenSSLSecureConnection);
Запрос = Новый HTTPЗапрос("/saas/v2/query-export/generate");
Запрос.Заголовки.Вставить("Seller-Id", "{{ sellerId }}");
Запрос.Заголовки.Вставить("School-Id", "{{ schoolId }}");
Запрос.Заголовки.Вставить("Content-Type", "application/json");
Запрос.Заголовки.Вставить("Authorization", "Bearer YOUR_TOKEN");
Запрос.УстановитьТелоИзСтроки(ТелоЗапроса);
Ответ = Соединение.ВызватьHTTPМетод("POST", Запрос);
Если Ответ.КодСостояния = 200 Тогда
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
Результат = ПрочитатьJSON(ЧтениеJSON);
Сообщить("Экспорт запущен");
Иначе
Сообщить("Ошибка: HTTP " + Ответ.КодСостояния);
Сообщить(Ответ.ПолучитьТелоКакСтроку());
КонецЕсли;
{
"success": true,
"code": 200,
"payload": {
"total": 100,
"completed": 100,
"status": "Completed",
"result": {
"fileUrl": "https://static.exode.biz/generated/reports/79d46a97-a149-432b-bac7-45f6732b9115.xlsx",
"fileName": "79d46a97-a149-432b-bac7-45f6732b9115.xlsx",
"fileSize": 6748
}
}
}
Обновлено: 2026-07-22 12:24 UTC