Как интегрировать систему геймификации Discourse с внешней системой (обмен и начисление очков)

У меня безумная идея: в WooCommerce я использую виртуальный кошелёк (на основе баллов), который хотел бы синхронизировать с игровыми баллами Discourse… Но мне кажется, что использование только API слишком затратно (постоянные опросы через cron или при каждом действии пользователя в WooCommerce)… Не могли бы вы создать webhook, чтобы виртуальный кошелёк в WooCommerce обновлялся баллами, полученными в Discourse? Прилагаю схему-руководство:

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

Геймификация пересчитывается каждые 5 минут, поэтому, на мой взгляд, синхронизация в стиле crontab вполне уместна.

1 лайк

О, я не думал об этом подходе… То есть я могу использовать n8n (с собственным хостингом для снижения затрат); я настрою триггер cron каждые 5 или, возможно, 10 минут для запроса к API Discourse о новых очках (Как именно мне запросить всех пользователей? Или вы бы сделали это для событий?)… Хотя, конечно, будет постоянное небольшое временное окно, в течение которого вы не увидите синхронизацию очков на обеих платформах…

Я подумал об этом и считаю, что если бы для плагина геймификации можно было создать вебхук, отправляющий информацию через события (без необходимости обращения к API), это избавило бы от необходимости, например, делать 200 запросов к API каждые 5 минут для 200 активных пользователей (по умолчанию Discourse поддерживает вебхуки). Это важно, поскольку Discourse является основным источником очков (и обновляет их более постоянно), и такое обновление позволило бы выполнять фоновую синхронизацию мгновенно в соответствии с изменениями в Discourse…

@Falco
Планируете добавить API для удаления событий? Спасибо.

1 лайк

Я хочу это добавить, но это пока не запланировано. На данный момент вы можете обновить его значение на 0.

2 лайка

Спасибо, @Falco.
Думаю, за событие ID может получить отрицательный балл, верно?
Например, если проиграть в соревновательном событии.

1 лайк

Да, вы также можете начислять отрицательные баллы. Это полезно для проведения мероприятий, таких как обмен баллов на подарки, применение штрафов и т. д.

1 лайк

Я опоздал на вечеринку — есть ли способ пометить определённые транзакции с очками так, чтобы они не учитывались как «расходы» при определении места в рейтинге? Хотелось бы, чтобы другие настоящие отрицательные очки влияли на рейтинг (голоса/флаги против, события API, как предлагалось выше для «проигрыша» в турнире и т. д.).
Например:

  • Накопить 10 000 очков за активность и оказаться в лидерах. Отлично!
  • Потратить 10 000 очков на крутые сувениры, и «доступный» баланс станет 0, так как запрос вернёт 10 000 − 10 000.
    • Но при этом всё ещё быть на вершине рейтинга.
  • Проиграть 2 000 очков в турнирной игре, и в рейтинге отобразится 8 000. Потерять лидерство… Доступный баланс станет отрицательным: −2 000.
2 лайка

Привет, @Falco!
После редактирования очков события они пересчитываются для общего итога по ID?
Похоже, что нет. Это ожидаемое поведение?

Об этом предупреждении в исходном посте (OP) уже сказано. Поскольку мы кэшируем общий счёт во всём интерфейсе, после вашего редактирования изменения отобразятся только после обновления кэша. Для недавних событий кэш обновляется автоматически, но для событий, произошедших более 10 дней назад, вам нужно вручную инициировать обновление счёта за этот период.

2 лайка

7 сообщений были перенесены в новую тему: Добавить bulk_create в API внешних событий геймификации

Можем ли мы ограничить область действия API-ключа только плагином Gamification?

В нашем интерфейсе администрирования API-ключей нет возможности ограничить ключ только ...admin/plugins/gamification/score_events.

К тому же руководство сомневается, что для этого действительно нужен глобальный API-ключ.

1 лайк

Я подозреваю, что вы правы. Похоже, что дополнительные области доступа добавляются по мере их запроса. Если вы используете собственный хостинг, вы можете сделать это с помощью кастомного плагина. Вы можете отправить Pull Request или создать запрос на добавление новой функции в канале #feature request. Если вы корпоративный клиент, можете попросить об этом своё руководство. :wink:

Хм. Теперь мне интересно, возможно ли добавить пользовательскую область API в плагине (особенно когда один плагин добавляет область API для другого). Я подозреваю, что это возможно, но пока не видел, чтобы так делали.

Возможно, стоит просто создать отдельного пользователя только для API, чтобы хотя бы отслеживать его действия.

1 лайк

Это когда-нибудь случалось?

CC: @Falco

Как новичок в программировании, я старался как мог понять содержание поста, но мне всё ещё довольно трудно… Хотел спросить: не похожа ли эта функция на «платный просмотр»? Это очень распространённая функция в традиционных форумах, где пользователи зарабатывают очки через различные активности (например, ежедневный вход, создание тем, ответы и т. д.), а затем для просмотра полного содержимого некоторых постов требуется потратить очки. В традиционных форумах (например, Discuz) как начисление, так и списание очков происходит автоматически. Судя по тому, что я вижу сейчас, геймификация может справиться с частью «заработка очков», но требует ли операция «списания очков» ручных вызовов API со стороны администратора? Для личного форума это было бы слишком сложно. Насколько я понимаю, безответственное использование API без достаточных знаний в программировании может быть опасным и даже привести к полному сбою всего сообщества……:sob:

Возможно ли реализовать эту функцию «платного просмотра» в виде отдельного плагина? Или, если бы я нанял кого-то для её кастомизации, сколько примерно это могло бы стоить?

1 лайк