Поскольку год назад мы запустили Discourse Gamification, одной из самых востребованных функций в нашем плане развития стала возможность интеграции системы геймификации Discourse с внешними системами геймификации. Примеров множество:
-
Интеграция с существующими программами геймификации в компаниях
-
Возможность начисления баллов за события, происходящие вне Discourse, например, офлайн-мероприятия или события в интернете, такие как участие в сообществе в качестве клиента или покупка товара.
-
Возможность для пользователей обменивать свои баллы на сувенирную продукцию, товары или привилегии
Сегодня, ровно в день первой годовщины плагина, мы сделали всё вышеперечисленное возможным благодаря полноценному API для обработки пользовательских событий начисления очков
.
Эта новая система позволяет администраторам:
-
Начислять пользователям пользовательские события начисления очков
-
Начислять пользователям события с отрицательными очками для обработки операций обмена или штрафов
-
Обновлять и просматривать список ранее созданных пользовательских событий
API
Очки, начисленные через API, могут отображаться в общем рейтинге пользователя до 1 часа для событий, созданных с текущей датой, и до 24 часов для событий, созданных в последние 10 дней. Для событий, созданных с датой старше 10 дней, вы можете использовать кнопку Пересчитать баллы в интерфейсе администратора геймификации или запустить задачу rake для заполнения данных:
rake gamification_scores:backfill_scores_from[YYYY-MM-DD].
В настоящее время доступно три различных конечных точки API.
Список событий
Возвращает до 100 событий. Вы можете фильтровать по id, user_id и/или date.
curl https://<example_url>/admin/plugins/gamification/score_events.json \
-H 'API-Key: <api_key_here>' \
-H 'API-Username: <api_username_here>'
Вы также можете получить список событий для конкретного пользователя или даты:
curl https://<example_url>/admin/plugins/gamification/score_events.json?user_id=1&date=2023-05-01 \
-H 'API-Key: <api_key_here>' \
-H 'API-Username: <api_username_here>'
Создание события
curl -X POST https://<example_url>/admin/plugins/gamification/score_events.json \
-H 'API-Key: <api_key_here>' \
-H 'API-Username: <api_username_here>' \
-H "Content-Type: application/json" \
-d '{
"user_id": 13,
"date": "2023-04-14",
"points": 15,
"description": "Участник караоке-вечера, май 2023"
}'
Альтернативный синтаксис с использованием jo:
jo -p user_id="13" date="2023-04-14" points="15" description="Участник караоке-вечера, май 2023" | curl --json @- -XPOST http://example/admin/plugins/gamification/score_events -H "Api-Key: apikeyhere" -H "Api-Username: system"
Обновление события
Конечная точка обновления требует указания id и points. Вы также можете обновить description. Обратите внимание, что user_id и date нельзя изменить после создания события.
curl -L -X PUT https://<example_url>/admin/plugins/gamification/score_events.json \
-H 'API-Key: <api_key_here>' \
-H 'API-Username: <api_username_here>' \
-H "Content-Type: application/json" \
-d '{
"id": 6,
"points": 25,
"description": "Участник keynote-выступления, май 2023"
}'
Альтернативный синтаксис с использованием jo:
jo -p id="11" points="25" description="Участник караоке-вечера, май 2023" | curl --json @- -XPUT http://example/admin/plugins/gamification/score_events -H "Api-Key: apikeyhere" -H "Api-Username: system"
