Интеграция с Moodle

Автор: Николай СапуновОбновлено: август 202617 мин чтения
Содержание статьи +

Кратко

Moodle – самая распространённая система управления обучением (LMS) с открытым исходным кодом и стандарт де-факто в российских вузах. За словами «интеграция с Moodle» стоят четыре совершенно разных пути: запустить ваш инструмент внутри курса по образовательному стандарту LTI, передать самодостаточный контент пакетом SCORM или xAPI, написать нативный плагин Moodle на PHP или управлять Moodle снаружи через web-services API. Для видеопродукта, в том числе интерактивного, почти всегда подходит LTI 1.3 с сервисами LTI Advantage: инструмент размещается и обновляется в одном месте, безопасно запускается на любом сайте Moodle и сам возвращает оценки в журнал. Плагин нужен, только если новое поведение должно появиться внутри экранов Moodle, а web-services API – если внешней системе нужно читать или записывать данные Moodle. Самые дорогие ошибки – выбрать тяжёлый путь (свой плагин) там, где хватило бы лёгкого (LTI-запуска), и считать списки студентов и оценки второстепенными данными, хотя это персональные данные по 152-ФЗ.

Почему это важно

Если вы продаёте или разрабатываете обучающий видеопродукт, «а он работает с Moodle?» – один из первых вопросов, который задаст вуз, колледж или учебный центр. На Moodle построены электронные информационно-образовательные среды (ЭИОС) многих российских университетов, да и в мире это одна из самых массовых LMS. Статья написана для L&D-директора, основателя EdTech-компании или продакт-менеджера, которому нужно решить, как интегрироваться, поставить задачу инженерам и заложить бюджет, не усложняя проект без нужды. Неверно выбранный путь превращает двухнедельную интеграцию запуска в многомесячную разработку плагина, который потом приходится сопровождать на каждом релизе Moodle. Все утверждения здесь опираются на документацию Moodle и спецификации стандартов, но понятны и неинженеру.

Что стоит за словами «интеграция с Moodle»

За этой фразой скрыта развилка, и команды, которые её не замечают, делают не то, что нужно. «Интеграция» может означать одну из четырёх почти не пересекающихся задач.

Во-первых, это может быть запуск вашего инструмента, работающего на ваших серверах, внутри курса Moodle: учащийся нажимает ссылку в курсе и попадает в ваш видеоплеер уже авторизованным. Во-вторых, поставка упакованного контента, который Moodle хранит и воспроизводит: вы передаёте Moodle файл, а он отслеживает прохождение. В-третьих, изменение поведения самого Moodle: новый тип активности, отчёт или кнопка, то есть код, который выполняется внутри Moodle. В-четвёртых, чтение и запись данных Moodle из другой системы: например, ваше бэк-офисное приложение каждую ночь забирает из Moodle данные о прохождении курсов.

У каждой задачи своя технология, своя стоимость и своя команда. Ниже разберём все четыре и покажем, какую выбрать для видеопродукта. Большинство споров об «интеграции с Moodle» в итоге сводится к тому, какая из них вам действительно нужна.

Moodle в двух словах: open-source LMS, созданная для расширения

Прежде чем разбирать пути, вспомним свойство Moodle, из которого вытекают все четыре. Moodle – система управления обучением (LMS) с открытым исходным кодом: бесплатная платформа, которую вузы, колледжи и компании разворачивают на своих серверах, чтобы вести курсы, тесты и оценки. Код открыт, поэтому любой может установить Moodle, изменить и расширить его. Отсюда и множество способов интеграции: можно подключиться снаружи через стандарты, а можно залезть внутрь и поменять код. Российскому заказчику собственная установка к тому же позволяет просто хранить персональные данные студентов на своих серверах или в российском облаке.

Архитектура Moodle построена вокруг плагинов, то есть самостоятельных дополнений, расширяющих ядро. В документации разработчика Moodle перечислено много типов плагинов: модули активностей (новый вид активности в курсе), блоки, темы, плагины аутентификации, записи на курс (enrolment), репозиториев, отчётов и другие. Два из четырёх путей – упакованный контент и собственные плагины – опираются как раз на эту модель. Два других, LTI и web-services API, служат входами в Moodle для систем, которые остаются снаружи: через LTI запускаются инструменты, через API идёт обмен данными.

Рисунок 1. Четыре способа интеграции с Moodle. LTI и web-services API связывают Moodle с внешними системами, а упакованный контент и плагины работают внутри него. Выбирайте путь под задачу, а не самый мощный.

Путь 1 – LTI: запуск вашего инструмента внутри Moodle (выбор по умолчанию для видео)

Проще и надёжнее всего встроить видеоинструмент, в том числе интерактивный, в Moodle через Learning Tools Interoperability (LTI) – образовательный стандарт, по которому внешний инструмент безопасно запускается внутри любой совместимой LMS, а его контент никуда не копируется. Инструмент остаётся на ваших серверах, а Moodle открывает его по подписанному запросу. Если читать только про один путь, то про этот: для видеопродукта, который работает на ваших серверах, LTI почти всегда правильный выбор по умолчанию. (О самом стандарте – см. LTI: объяснение.)

Актуальную версию, LTI 1.3, Moodle поддерживает уже несколько лет, причём в обеих ролях. Когда Moodle выступает как Platform (LMS, в которой работает учащийся и откуда начинается запуск), администратор добавляет ваш инструмент в разделе Site administration → Plugins → Activity modules → External tool → Manage tools через пункт «Configure a tool manually». Документация Moodle прямо описывает, что изменилось в LTI 1.3: вместо прежних общих «consumer key и secret» стороны обмениваются набором параметров подключения – client ID, platform ID, authentication request URL, access-token URL и URL публичного набора ключей (JWKS). Внутри всё по стандарту: JSON Web Token (JWT), подписанный асимметричными ключами, bearer-токены OAuth 2 для вызова сервисов и поток OpenID Connect для старта запуска. После этого преподаватель добавляет в курс активность «External tool», и учащийся попадает прямо в ваш плеер.

Moodle может быть и Tool, то есть запускаемой стороной. С помощью плагина записи на курс «Publish as LTI tool» сайт Moodle открывает курс или отдельную активность для запуска из другой платформы. Так вуз делится специализированным курсом с LMS партнёра или корпоративного заказчика. Для разработчика видеоинструмента это не главное, но полезно знать, что Moodle умеет играть обе роли.

LTI становится выбором по умолчанию для видео из экономических соображений – ради них стандарт и появился. Вы один раз реализуете запуск и передачу оценок, проверяете их на реальной установке, и дальше каждый сайт Moodle работает через этот же код. С тремя сервисами LTI Advantage инструмент позволяет преподавателю выбрать конкретное видео (Deep Linking), читает список участников курса (Names and Role Provisioning Services) и записывает оценки в журнал Moodle (Assignment and Grade Services). Одна оговорка из проектных заметок Moodle: когда инструмент передаёт оценки, организация обычно хочет сама решать, в какие колонки журнала они попадут. Поэтому передачу оценок планируйте как настраиваемую функцию, которую согласуют с заказчиком, а не как автоматический поток.

Рисунок 2. LTI работает в обе стороны. В роли Platform Moodle запускает из курса ваш видеоинструмент, в роли Tool публикует курс или активность для другой платформы. В обоих случаях используется подписанный запуск LTI 1.3.

Путь 2 – Упакованный контент: SCORM, xAPI и H5P

Во втором пути живой инструмент вообще не подключается. Вы передаёте Moodle самодостаточный пакет, а Moodle его хранит, воспроизводит и отслеживает. Этот путь подходит, когда контент должен находиться внутри сайта Moodle, например потому, что вуз хочет, чтобы курс работал независимо от ваших серверов.

SCORM – давний стандарт, который упаковывает курс в zip-архив, чтобы LMS могла его воспроизвести и отследить. В Moodle это полноценный встроенный тип активности. Администратор или преподаватель загружает SCORM-пакет, активность SCORM воспроизводит его и записывает фиксированный набор данных SCORM: completion, score и time. Важна версия: по документации Moodle поддерживается SCORM 1.2 (он проходит тесты соответствия ADL), а SCORM 2004 – нет: его API реализован лишь частично, а ошибки по 2004 закрываются без исправления. Поэтому для Moodle собирайте пакет SCORM 1.2. И помните об ограничении, о которое часто спотыкаются команды: SCORM отслеживает фиксированную модель данных внутри запуска из LMS, а не каждое действие учащегося. Для подробного посекундного трекинга видео нужен xAPI. (См. SCORM: объяснение.)

xAPI (Experience API) – более новый стандарт, который записывает обучение простыми утверждениями «субъект–глагол–объект», например «Мария завершила модуль 3». В Moodle он попадает двумя способами. Во-первых, через H5P, открытый формат интерактивного контента, который теперь встроен в ядро Moodle. Его активности отправляют xAPI-утверждения: например, H5P Interactive Video отправляет их, пока учащийся смотрит ролик, отвечает на встроенные вопросы и досматривает до конца, а Moodle по этим утверждениям ставит оценку в журнал. Во-вторых, через сторонний плагин xAPI log store (logstore_xapi): он превращает события самого Moodle в xAPI-утверждения и по расписанию пакетами отправляет их во внешнее хранилище учебных записей (LRS), то есть в базу xAPI-утверждений. Для российской аудитории LRS должен находиться в России: на ваших серверах или в российском облаке (об этом ниже). Так данные о работе с видеоинструментом выходят за пределы Moodle и попадают в кросс-платформенную аналитику. Для видео составляйте утверждения по xAPI Video Profile, чтобы played, paused, seeked и completed фиксировались единообразно (см. трекинг видео через xAPI Video Profile). Если вы ещё выбираете стандарт упаковки или запуска, посмотрите сравнение SCORM, xAPI, cmi5 и LTI: там для каждого стандарта указана задача, которую он решает лучше всего.

Рисунок 3. Как движутся данные о работе с видео. Активность H5P или видеоплеер отправляет xAPI-утверждения; Moodle ставит по ним оценку и через xAPI log store пакетами передаёт их во внешний LRS в российском контуре для кросс-платформенной аналитики.

Путь 3 – Плагины: изменение поведения самого Moodle

Третий путь ведёт внутрь Moodle. Плагин – это дополнение на PHP, которое устанавливается на сайт Moodle и выполняется как его часть. Плагин умеет то, что недоступно внешнему запуску: добавить новый тип активности, собственный отчёт, репозиторий, который подтягивает видео из вашего CDN, или кнопку на странице курса. Раз плагин работает внутри Moodle, у него глубокий доступ к системе: в этом и его сила, и его цена.

Выбирайте плагин, только если интеграция действительно должна стать частью интерфейса и модели данных Moodle. Настоящие задачи для плагина – нативная видеоактивность, которая ведёт себя так же, как встроенные; плагин репозитория, через который преподаватель просматривает вашу видеотеку прямо в окне выбора файлов; отчёт, который выводит вашу аналитику вовлечённости на административной странице Moodle. Цена такого решения в сопровождении: плагин – это ваш PHP-код, который нужно перепроверять на каждом крупном релизе Moodle (а крупные версии выходят регулярно) и обновлять, когда меняются внутренние API платформы. Распространять и поддерживать его тоже придётся вам, при желании через каталог плагинов Moodle.

Частая ошибка – браться за плагин там, где LTI-запуск решил бы задачу при куда меньших затратах на сопровождение. Плагин навсегда привязывает вас к циклу релизов Moodle, а LTI-инструмент размещается в одном месте и работает в разных LMS. Пишите плагин, когда работа «внутри Moodle» – жёсткое требование, а не пожелание.

Путь 4 – Web-services API: управление Moodle снаружи

Четвёртый путь нужен, когда другой системе (вашему бэк-офису, хранилищу данных, корпоративному порталу) надо программно читать или записывать данные Moodle. Для этого в Moodle есть web-services API: администратор включает веб-сервисы, создаёт сервис с перечнем разрешённых функций и выдаёт токен, а внешний код обращается с этим токеном к REST-эндпоинту https://<your-moodle>/webservice/rest/server.php. Через API можно создавать пользователей, записывать их на курсы, читать данные о прохождении курсов, получать оценки и многое другое.

Этот путь ничего не запускает и не меняет экраны Moodle, он только переносит данные в обе стороны. Для видеопродукта типичная задача – синхронизировать записи на курсы и прохождения с внешней кадровой или контентной системой. Обращайтесь с токеном как с паролем: оставьте в сервисе только нужные функции, передавайте токен только по HTTPS и регулярно меняйте. Как и списки участников и оценки в LTI, всё, что вы получаете через API о реальных учащихся, – персональные данные по 152-ФЗ. Решите, что и зачем вы храните, до первого вызова API.

Российская специфика: когда Moodle – это ЭИОС вуза

Закон об образовании связывает электронное обучение с электронной информационно-образовательной средой организации (ч. 3 ст. 16 273-ФЗ), и во многих вузах ядро этой среды – Moodle. Для того, кто интегрирует видео, отсюда следуют три практических вывода.

Первый – роли по 152-ФЗ. Вуз – оператор персональных данных студентов, а ваш инструмент, который получает через LTI или API их ФИО, роли и оценки, обычно обрабатывает эти данные по поручению вуза (ч. 3 ст. 6). В договоре нужно поручение с перечнем данных, действий и целей, а хранить данные можно только в базах на территории РФ (ч. 5 ст. 18, с 1 июля 2025 года).

Второй – идентификация. Единый вход через LTI переносит в ваш инструмент учётную запись, известную Moodle, но личность не подтверждает. Для промежуточной и итоговой аттестации ПП № 1678 (в ред. ПП № 517) позволяет вузам, колледжам и организациям ДПО идентифицировать учащихся через ЕСИА и ЕБС – самостоятельно или через сервис прокторинга. Это отдельная интеграция, а не настройка LTI.

Третий – тип заказчика. Школам и колледжам, которые обрабатывают ПДн учеников, закон предписывает использовать государственные информационные системы и мессенджер MAX (ч. 3.1 ст. 16 273-ФЗ, п. 9 ПП № 1678). Поэтому там видеоинтеграция с Moodle будет лишь дополнением, и её роль стоит согласовать до старта. А если вы продаёте инструмент вузу или колледжу, учтите п. 21 ПП № 1678: ПО в составе ДОТ должно создаваться и использоваться по законодательству РФ и (или) входить в реестр российского ПО. Это инженерные рекомендации, а не юридическая консультация.

Расчёт интеграции на примере

Допустим, вы продаёте инструмент для оценивания на основе интерактивного видео и хотите, чтобы он работал внутри Moodle, а оценки попадали в журнал.

Предположим, вы выбрали плагин, потому что он кажется «более встроенным». Нативная активность Moodle, доведённая до промышленного качества, – серьёзный проект: по осторожной оценке, около шести инженеро-недель. И расходы на этом не заканчиваются, потому что каждый крупный релиз Moodle может поменять внутренние API:

Путь плагина     = 6 инженеро-недель на разработку
                 + повторное тестирование и исправления на каждом крупном релизе Moodle, постоянно
                 + вы поддерживаете только Moodle – для ЭИОС на другой платформе
                   или корпоративной LMS нужна отдельная работа

Теперь путь LTI. Вы один раз реализуете LTI 1.3 и Assignment and Grade Services (один поток запуска, одну проверку JWT, один клиент передачи оценок) и проверяете всё на реальных установках:

Путь LTI          = 1 реализация (запуск + AGS)        ≈ 4–6 инженеро-недель
                  + сопровождение одного стандарта, а не каждого релиза Moodle
Новый сайт Moodle = регистрация и тестовый запуск     ≈ 1–2 часа, не недели
Другие LMS        = тот же код работает в любой LMS с поддержкой LTI 1.3

На старте затраты сопоставимы, но дальше пути быстро расходятся: плагин привязывает вас к циклу релизов одной платформы, а LTI-инструмент размещается в одном месте и запускается из любой совместимой LMS. Для видеопродукта, рассчитанного больше чем на одного клиента, это решающая разница.

Когда какой путь использовать

Четыре пути отвечают на четыре разных вопроса, поэтому выбирать проще всего, начав с того, что именно должна делать интеграция.

ПутьЧто делаетСтандарт / механизмПоддержка стандартовЛучше всего, когда
LTI-запускЗапускает ваш инструмент в курсе MoodleLTI 1.3 + LTI Advantage (OIDC, JWT, OAuth 2)LTI ✓, передача оценок AGS ✓, список участников NRPS ✓Живой видеоинструмент на ваших серверах обслуживает много LMS
Упакованный контентMoodle хранит, воспроизводит и отслеживает файлSCORM 1.2 (2004 не поддерживается); xAPI через H5P + log storeSCORM 1.2 ✓, xAPI ✓ через H5P и плагины, cmi5 – только плагиномКонтент должен храниться в Moodle; нужна работа офлайн
Кастомный плагинМеняет активности, отчёты, экраны самого MoodlePlugin API Moodle (PHP)То, что вы реализуетеПоведение должно стать частью интерфейса Moodle
Web-services APIЧитает и записывает данные Moodle из другой системыWeb services Moodle (REST, токен)Н/Д (синхронизация данных)Внешней системе нужны данные Moodle

Коротко: живой видеоинструмент на ваших серверах, к которому подключается много организаций, запускайте через LTI – это выбор по умолчанию. Упаковывайте в SCORM 1.2 или xAPI/H5P, когда контент должен самостоятельно работать внутри Moodle. Пишите плагин, только когда интеграция должна стать частью экранов Moodle. Web-services API используйте для синхронизации данных с внешними системами. Многие реальные продукты сочетают несколько путей: например, LTI-запуск для живого плеера и xAPI log store, который передаёт данные во внешний LRS для аналитики.

Рисунок 4. Четыре пути в сравнении. LTI – выбор по умолчанию для видеоинструмента на ваших серверах; упакованный контент (SCORM 1.2, xAPI через H5P) работает внутри Moodle; плагин меняет сам Moodle; web-services API синхронизирует данные с внешними системами.

Частые ошибки и их цена

Некоторые ошибки интеграции с Moodle повторяются из проекта в проект, и каждую из них дёшево предотвратить заранее.

Первая – писать плагин там, где хватило бы LTI-запуска. Плагин привязывает вас к циклу релизов Moodle и только к Moodle. Если инструмент работает на ваших серверах и должен подключаться к разным LMS, начните с LTI 1.3, а плагин пишите только для того, что действительно должно быть внутри Moodle.

Вторая – делать интеграцию на LTI 1.1 в 2026 году. Подпись общим секретом OAuth 1.0 в LTI 1.1 – как раз та модель, на смену которой пришёл LTI 1.3, а 1EdTech признал версию 1.1 устаревшей. Ориентируйтесь на LTI 1.3 с LTI Advantage, а 1.1 поддерживайте, только если у заказчика старая установка.

Третья – считать, что «посмотрел 100%» означает «завершил» в журнале. Завершение в Moodle – это то, что сообщает активность: флаг completed у SCORM, xAPI-утверждение или правило, заданное вручную. Задавайте критерий завершения осознанно и не рассчитывайте, что шкала прогресса в плеере сама превратится в оценку.

Четвёртая – «в редакторе курсов работало, а в Moodle нет». SCORM-пакет, который нормально воспроизводится в превью настольного редактора, может сломаться в SCORM-плеере Moodle из-за различий в манифесте, путях к файлам или версии модели данных, например если пакет собран как SCORM 2004. Экспортируйте SCORM 1.2 и тестируйте на реальном сайте Moodle, а не только в превью редактора.

Пятая – считать списки участников и оценки второстепенными данными. Список участников (через NRPS), оценки (через AGS) и всё, что вы получаете через web-services API, – это реальные студенты и их результаты, то есть персональные данные по 152-ФЗ, которые должны храниться в РФ. Решите, что храните, зачем и как долго, до первого вызова.

Строить или покупать: где здесь интеграция с Moodle

Начните с бизнес-вопроса. «Интеграция с Moodle» редко сводится к покупке и редко к одной большой разработке: нужно выбрать самый лёгкий путь, который решает задачу. Дороже всего обходится переусложнение – собственный плагин там, где настроенный LTI-запуск был бы готов гораздо быстрее и без доработок работал бы с любой другой совместимой LMS.

Если вы делаете видеоинструмент, в том числе интерактивный, объём работ понятен и ограничен: LTI 1.3 и нужные сервисы Advantage, то есть запуск через OIDC, проверка JWT, работа с ключами и JWKS и клиент передачи оценок AGS. Open-source-библиотеки LTI есть для большинства языков и избавляют от рутины. Плагин оставьте для того, что действительно должно быть внутри Moodle, а web-services API используйте только для синхронизации данных. Если же у вас своя установка Moodle и вы решаете, расширять её или переходить на собственную разработку, это более широкий выбор, он разобран в статье Построить, купить или расширить существующую LMS. Чтобы выбрать путь для первого проекта, скачайте рабочий лист выбора пути интеграции с Moodle.

Где здесь Фора Софт

Фора Софт с 2005 года разрабатывает ПО для видеообучения, стриминга, видеоконференций и интерактивных плееров, на счету компании 250+ запущенных проектов. В проектах с Moodle мы раз за разом помогаем командам с решением, которому посвящена статья: запускать видеоинструмент через LTI 1.3, если он должен работать у многих организаций; упаковывать контент в SCORM 1.2 или xAPI/H5P, если он должен храниться внутри Moodle; браться за плагин, только если поведение должно стать частью экранов Moodle. Обычно мы отвечаем за видео и интерактив: делаем инструмент интерактивного видео, который без сбоев запускается из курса Moodle, читает список участников через NRPS, записывает оценки за задания через AGS и передаёт посекундные данные о вовлечённости по xAPI Video Profile в LRS, размещённый в России. Запуск и передачу оценок мы проектируем под реальную нагрузку на рабочем сайте Moodle, а не только под тест в песочнице.

Главное

  • «Интеграция с Moodle» – четыре разные задачи; выбирайте самый лёгкий путь, который решает вашу.
  • Для видеоинструмента на ваших серверах LTI 1.3 с LTI Advantage – выбор по умолчанию.
  • Упаковывайте в SCORM 1.2 (не 2004) или xAPI/H5P, только когда контент должен храниться внутри Moodle.
  • Пишите плагин, только когда поведение должно стать частью экранов Moodle.
  • Web-services API нужен для синхронизации данных Moodle с внешними системами.
  • Списки участников и оценки – персональные данные по 152-ФЗ: нужны поручение от вуза и хранение в РФ; LTI не заменяет идентификацию через ЕСИА.

Что почитать дальше

Строите такую систему?

Подберём параметры кодирования под ваш контент и посчитаем стоимость доставки до старта разработки.