У меня безумная идея: в WooCommerce я использую виртуальный кошелёк (на основе баллов), который хотел бы синхронизировать с игровыми баллами Discourse… Но мне кажется, что использование только API слишком затратно (постоянные опросы через cron или при каждом действии пользователя в WooCommerce)… Не могли бы вы создать webhook, чтобы виртуальный кошелёк в WooCommerce обновлялся баллами, полученными в Discourse? Прилагаю схему-руководство:
Понимаю, что это может оказаться сложнее, чем кажется, особенно учитывая, что API Discourse относительно новый (и вебхуков там тоже нет), но я лишь представляю вариант использования и прошу оценить идею.Геймификация пересчитывается каждые 5 минут, поэтому, на мой взгляд, синхронизация в стиле crontab вполне уместна.
О, я не думал об этом подходе… То есть я могу использовать n8n (с собственным хостингом для снижения затрат); я настрою триггер cron каждые 5 или, возможно, 10 минут для запроса к API Discourse о новых очках (Как именно мне запросить всех пользователей? Или вы бы сделали это для событий?)… Хотя, конечно, будет постоянное небольшое временное окно, в течение которого вы не увидите синхронизацию очков на обеих платформах…
Я подумал об этом и считаю, что если бы для плагина геймификации можно было создать вебхук, отправляющий информацию через события (без необходимости обращения к API), это избавило бы от необходимости, например, делать 200 запросов к API каждые 5 минут для 200 активных пользователей (по умолчанию Discourse поддерживает вебхуки). Это важно, поскольку Discourse является основным источником очков (и обновляет их более постоянно), и такое обновление позволило бы выполнять фоновую синхронизацию мгновенно в соответствии с изменениями в Discourse…
@Falco
Планируете добавить API для удаления событий? Спасибо.
Я хочу это добавить, но это пока не запланировано. На данный момент вы можете обновить его значение на 0.
Спасибо, @Falco.
Думаю, за событие ID может получить отрицательный балл, верно?
Например, если проиграть в соревновательном событии.
Да, вы также можете начислять отрицательные баллы. Это полезно для проведения мероприятий, таких как обмен баллов на подарки, применение штрафов и т. д.
Я опоздал на вечеринку — есть ли способ пометить определённые транзакции с очками так, чтобы они не учитывались как «расходы» при определении места в рейтинге? Хотелось бы, чтобы другие настоящие отрицательные очки влияли на рейтинг (голоса/флаги против, события API, как предлагалось выше для «проигрыша» в турнире и т. д.).
Например:
- Накопить 10 000 очков за активность и оказаться в лидерах. Отлично!
- Потратить 10 000 очков на крутые сувениры, и «доступный» баланс станет 0, так как запрос вернёт 10 000 − 10 000.
-
- Но при этом всё ещё быть на вершине рейтинга.
- Проиграть 2 000 очков в турнирной игре, и в рейтинге отобразится 8 000. Потерять лидерство… Доступный баланс станет отрицательным: −2 000.
Привет, @Falco!
После редактирования очков события они пересчитываются для общего итога по ID?
Похоже, что нет. Это ожидаемое поведение?
Об этом предупреждении в исходном посте (OP) уже сказано. Поскольку мы кэшируем общий счёт во всём интерфейсе, после вашего редактирования изменения отобразятся только после обновления кэша. Для недавних событий кэш обновляется автоматически, но для событий, произошедших более 10 дней назад, вам нужно вручную инициировать обновление счёта за этот период.
7 сообщений были перенесены в новую тему: Добавить bulk_create в API внешних событий геймификации
Можем ли мы ограничить область действия API-ключа только плагином Gamification?
В нашем интерфейсе администрирования API-ключей нет возможности ограничить ключ только ...admin/plugins/gamification/score_events.
К тому же руководство сомневается, что для этого действительно нужен глобальный API-ключ.
Скорее всего, вы правы. Похоже, что новые области видимости добавляются по мере их запроса. Если вы используете самохостинговую версию, это можно реализовать с помощью пользовательского плагина. Вы можете отправить pull request или опубликовать запрос на новую функцию в разделе Contribute. Если вы являетесь клиентом Enterprise, вы можете попросить руководство решить этот вопрос. ![]()
Хм. Теперь я задумался о том, возможно ли добавить пользовательскую область видимости API в плагине (особенно если один плагин добавляет область видимости API для другого плагина). Я предполагаю, что это возможно, но не видел примеров такой реализации.
Может быть, просто создать отдельного пользователя только для API, чтобы хотя бы так можно было отслеживать его активность?
Это когда-нибудь случалось?
CC: @Falco
Как новичок в программировании, я старался как мог понять содержание поста, но мне всё ещё довольно трудно… Хотел спросить: не похожа ли эта функция на «платный просмотр»? Это очень распространённая функция в традиционных форумах, где пользователи зарабатывают очки через различные активности (например, ежедневный вход, создание тем, ответы и т. д.), а затем для просмотра полного содержимого некоторых постов требуется потратить очки. В традиционных форумах (например, Discuz) как начисление, так и списание очков происходит автоматически. Судя по тому, что я вижу сейчас, геймификация может справиться с частью «заработка очков», но требует ли операция «списания очков» ручных вызовов API со стороны администратора? Для личного форума это было бы слишком сложно. Насколько я понимаю, безответственное использование API без достаточных знаний в программировании может быть опасным и даже привести к полному сбою всего сообщества……![]()
Возможно ли реализовать эту функцию «платного просмотра» в виде отдельного плагина? Или, если бы я нанял кого-то для её кастомизации, сколько примерно это могло бы стоить?
