Замена нативных Open Badges Moodle на Badges Ninja (лучший дизайнер, тот же API)

Moodle предлагает нативные Open Badges, но дизайнер ограничен, а получатель заперт внутри Moodle. Выдавайте credentials Badges Ninja на основе завершений курсов в Moodle.

Nacho Coll Автор Обновлено 6 мин чтения
Moodle предлагает нативные Open Badges, но дизайнер ограничен, а получатель заперт внутри Moodle. Выдавайте credentials Badges Ninja на основе завершений курсов в Moodle.

Moodle нативно выдаёт Open Badges начиная с версии 2.5, и для многих администраторов курсов этого достаточно, чтобы никогда не искать альтернатив. Это встроенная функция, она бесплатна и технически создаёт credential, соответствующий стандарту. Так почему же столько администраторов Moodle оказываются разочарованы уже к пятидесятому выданному значку?

Честный ответ: система значков Moodle создавалась для галочки о соответствии стандарту, а не как полноценный продукт для выдачи credentials. Она работает, но работает так, как работает функция, прикрученная к LMS — функционально, устаревше и ограничена рамками платформы, в которую встроена. Если вы хоть раз пытались сделать так, чтобы значок Moodle выглядел не как круглая иконка из клипарта, или слышали от выпускника «стоп, а где мне вообще посмотреть эту штуку?» — вы уже понимаете, в чём проблема.

Это не разгромная критика Moodle — это отличная LMS, а её движок критериев для значков (завершение курса, завершение активности, ручное присвоение, членство в когорте) действительно хорошо продуман для запуска выдачи credential. Проблема — во всём, что происходит после запуска: инструменты дизайна, опыт получателя и видимость значка за пределами вашего экземпляра Moodle. Именно для этого создан badges.ninja, и вам не нужно отказываться от логики завершения курсов в Moodle, чтобы им пользоваться — достаточно просто направить триггер на другой движок выдачи.

В чём нативные значки Moodle не дотягивают

Дизайнер — это компоновщик изображений на основе координат, а не инструмент дизайна. Редактор значков Moodle позволяет выбрать базовое изображение, добавить несколько заранее заданных иконок-оверлеев и подвинуть их с помощью пиксельных смещений. Нет библиотеки форм, нет системы палитр, нет выбора шрифтов, кроме тех, что зашиты в набор иконок. Если у вашей организации есть бренд — логотип, цветовая палитра, определённый визуальный язык для сертификатов — редактор Moodle не способен это выразить. В итоге большинство учреждений рисуют дизайн значка в Photoshop или Canva и загружают плоский PNG, что сводит на нет саму идею встроенного дизайнера.

Получателям нужен логин Moodle, чтобы увидеть собственные значки. Присвоенные учащемуся значки живут внутри страницы его профиля в Moodle. Если он уже закончил курс, забыл свои институциональные учётные данные или учреждение с тех пор удалило его аккаунт, значок фактически исчезает с его стороны — даже если базовое утверждение всё ещё доступно через backpack-коннектор Moodle или публичную страницу значка. Нет отдельного, брендированного, всегда доступного места, где получатель мог бы войти просто по email и увидеть все credentials, заработанные во всех курсах.

О шеринге подумали в последнюю очередь. Moodle может отправлять значки в сервис, совместимый с Mozilla Backpack, и предоставляет публичный URL для верификации каждого значка, но встроенного потока «Добавить в LinkedIn» нет, кнопки шеринга в один клик нет, и аналитики вовлечённости — смотрел ли кто-нибудь значок после выдачи — тоже нет. Для программ, которым важно, чтобы значок работал как сарафанное радио — буткемпы, поставщики непрерывного образования, корпоративное обучение — это реальная упущенная выгода.

Массовые операции неудобны. Присвоение значка целой когорте работает, если все завершают триггерную активность в Moodle одновременно. Но если нужно задним числом выдать значки прошлой когорте, импортировать исторические завершения из таблицы или выдать значок за что-то, что произошло вообще вне LMS, придётся писать SQL-запросы к базе Moodle или бороться с инструментами импорта CSV, которые не были созданы специально для значков.

Паттерн замены: оставьте триггеры Moodle, смените издателя

Вам не нужно мигрировать с Moodle, чтобы это исправить. Самый чистый паттерн — позволить Moodle и дальше делать то, что у неё хорошо получается: отслеживать завершение курса, завершение активности, членство в когорте — и заставить её вызывать API Badges Ninja в момент срабатывания условия завершения, вместо (или вместе с) выдачи нативного значка.

Moodle поддерживает это несколькими способами:

  1. Webhook завершения курса / опрос Moodle Web Services (REST). API core_completion в Moodle предоставляет статус завершения для каждого пользователя по каждому курсу. Лёгкая запланированная задача (запланированная cron-задача Moodle или внешнее cron-задание, обращающееся к REST API Moodle) может опрашивать новые завершённые зачисления и для каждого вызывать эндпоинт наград Badges Ninja.

  2. Хук локального плагина. Если у вас есть разработчик в штате, систему событий Moodle (\core\event\course_completed) может отслеживать небольшой локальный плагин, который отправляет HTTP-запрос в момент завершения — без задержки на опрос.

  3. Zapier/Make/n8n в качестве связующего звена, если вы предпочитаете не трогать код Moodle — Moodle может отправлять события завершения на webhook-приёмник, который no-code инструмент автоматизации превращает в вызов выдачи награды.

Вот сам вызов выдачи награды, когда у вас есть имя и email завершившего курс пользователя:

curl -X POST https://api.badges.ninja/awards \
  -H "X-Api-Key: bws_3f9a1c2d4e5b6a7c8d9e0f1a2b3c4d5e" \
  -H "Content-Type: application/json" \
  -d '{
    "badgeId": "badge_moodle_course_completion",
    "recipient": { "name": "Jordan Alvarez", "email": "learner@example.edu" },
    "issuedOn": "2026-08-31"
  }'

Или на Node, внутри той же запланированной задачи или webhook-приёмника, который вы используете:

const response = await fetch("https://api.badges.ninja/awards", {
  method: "POST",
  headers: {
    "X-Api-Key": process.env.BADGES_NINJA_API_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    badgeId: "badge_moodle_course_completion",
    recipient: { name: completedUser.fullname, email: completedUser.email },
    issuedOn: Date.now(),
  }),
});
const award = await response.json();

Email получателя хешируется по SHA-256 при хранении, награда автоматически получает уникальный URL для верификации, QR-код и сертификат в формате PDF A4, и — что критически важно — получатель может подтвердить получение через вход по magic-link на badges.ninja/me, без отдельного аккаунта Moodle. Полную структуру запроса и ответа смотрите в справочнике по API наград и в руководстве по аутентификации о том, как работают API-ключи от начала до конца.

Если вы предпочитаете обрабатывать это пакетно — скажем, задним числом внести завершения за целый семестр за один проход вместо настройки событий в реальном времени — экспортируйте завершения из Moodle в CSV и используйте функцию массовой выдачи наград напрямую, которая поддерживает паузу/возобновление для больших файлов. Подробнее об этом — в статье как выдавать Open Badges из CSV.

Дизайн самого значка

Как только связка настроена, сам дизайн значка занимает минуты, а не заявку в вашу веб-команду. Визуальный дизайнер даёт вам более 80 шаблонов форм, полноценную систему цветовых палитр, библиотеки иконок и загрузку собственных шрифтов — так что значок «Продвинутая статистика — завершено» может действительно выглядеть частью бренда вашего учреждения, а не общей иконкой достижения Moodle.

API Keys — empty state

Каждый API-ключ ограничен по области действия и может быть отозван из той же панели, где вы управляете значками и издателями, так что передача учётных данных для интеграции разработчику (или инструменту автоматизации вроде Zapier) не означает предоставление доступа к вашему основному аккаунту.

Create key — name form

Сравнение: опыт получателя

Нативный значок MoodleBadges Ninja
Где получатели его видятВнутри профиля Moodle, требуется входbadges.ninja/me, magic-link, без пароля
Публичная верификацияДа, публичный URL для каждого значкаДа, эндпоинт Open Badge v2.0 JSON-LD
Инструменты дизайнаФиксированная иконка + смещения позиции80+ шаблонов, палитры, собственные шрифты/иконки
Шеринг в LinkedInВручную, встроенной кнопки нетНативный поток Add-to-LinkedIn-Profile
Массовая историческая выдачаSQL или ручной обходной путь через CSVВстроенная массовая выдача с паузой/возобновлением
Видимость вовлечённостиОтсутствуетСтатистика просмотров/шеринга по каждой награде
Доступ после ухода из учрежденияПривязан к статусу аккаунта MoodleПостоянный, принадлежит получателю

Moodle всё же выигрывает в одном: если ваше единственное требование — «значок существует, технически соответствует Open Badge v2.0 и живёт внутри той же LMS, которой учащийся уже пользуется» — нативные значки не стоят ничего дополнительно и не требуют интеграции. Компромисс проявляется в тот момент, когда вам становится важно качество дизайна, портируемость после окончания курса или превращение выдачи credentials в сигнал для найма/маркетинга — а это рано или поздно важно почти для всех учреждений.

Более широкий обзор того, как другие платформы Open Badges сравниваются по цене и функциям, смотрите в сравнении самых дешёвых платформ Open Badges. А если ваше учреждение выбирает между Open Badge v2.0 и более новым стандартом verifiable credentials, статья Open Badge v2 против v3 объяснение расскажет, какой из них стоит внедрять уже сегодня.

Готовы выдать свой первый проверяемый credential? Начните бесплатно на badges.ninja — визуальный дизайнер, публичная страница верификации, PDF-сертификат, вывод в формате Open Badge v2.0. Банковская карта не требуется.

Nacho Coll

Об авторе

Founder & Engineer at Badges Ninja

Nacho founded Badges Ninja to make issuing verifiable digital credentials as simple as a single API call — Open Badge v2.0 badges and certificates, minted, hosted, and verifiable without standing up your own issuer infrastructure. Writes about the Open Badges spec, credential verification, and running a credentialing platform serverless on AWS, from the operator side of the wire.

Назад в блог

Похожие статьи