如何将Discourse游戏化与外部系统集成(兑换和奖励积分)

我有一个疯狂的想法,在 WooCommerce 中我正在使用一个虚拟钱包(基于积分),我想将其与 Discourse 的游戏化积分同步……但我觉得仅通过 API 来实现(例如每隔 x 时间 cron 或在 WC 中用户执行操作时进行查询)太笨重了……您能否创建一个 webhook,以便在 Discourse 中获得积分时,WooCommerce 中的虚拟钱包能够得到更新?……我附上一个指南图

我知道这可能比看起来要复杂,尤其是因为 Discourse API 相对较新(而且也没有 webhook),但我只是提出了一个用例,请验证这个想法。

游戏化每 5 分钟重新计算一次,所以我认为使用 crontab 风格的同步非常合适。

1 个赞

哦,我没想到这个方法……也就是说,我可以使用 n8n(自行托管以降低成本);我会创建一个每 5 或 10 分钟触发一次的 cron 任务,查询 Discourse API 以获取新积分(我该如何查询所有用户?或者你会针对事件进行查询吗?)……当然,在两个平台之间会有短暂的时间窗口,分数无法实时同步……

我一直在考虑,我认为如果能为游戏化插件创建一个 webhook,通过事件发送信息**(无需通过 API 查询)**,这将避免例如有 200 个活跃用户时,每 5 分钟查询 200 次 API(Discourse 默认也允许 webhook)……这很重要,因为 Discourse 是积分的主要来源(并且更新更频繁),这将是一个允许后台同步的更新,可以根据 Discourse 中的更改即时进行同步……

@Falco
有计划添加一个删除事件的 API 吗?谢谢。

1 个赞

我想添加它,但尚未计划。目前您可以将其值更新为 0。

2 个赞

谢谢 @Falco
猜测是为了某个活动,ID 可能会得到负分,对吗?
比如,在比赛中失利

1 个赞

是的,您也可以授予负分。这对于执行诸如用积分兑换礼物、应用惩罚等事件很有用。

1 个赞

来晚了——有没有办法将某些积分交易标记出来,这样它们就不会被计入排行榜的“支出”?希望其他真正的负积分能计入排行榜(投票/标记反对、如上所述的 API 事件“输掉”一场比赛等)。
例如:

  • 通过活动累积 10,000 积分,处于领先地位。太棒了!
  • 支出 10,000 积分购买精美商品,查询时“可支出”余额为 0,因为 10,000 - 10,000 = 0。
    • 但仍应排在排行榜首位。
  • 在一场比赛中输掉 2,000 积分,排行榜显示为 8,000。失去领先地位……可支出余额为负 2,000。
1 个赞

@Falco
编辑事件的要点后,它会重新计算 ID 的总分吗?
似乎没有。这是预期的吗?

OP 中的警告涵盖了这一点。由于我们在 UI 的所有位置缓存了总分数,因此在您编辑后,它仅在缓存更新后才会反映出来。对于最近发生的事件,缓存会自动更新,但对于 10 天前发生的事件,您需要触发该期间的分数更新。

2 个赞

7 个帖子被拆分到一个新主题:为 Gamification 外部事件 API 添加 bulk_create

我们是否可以将 API 密钥的范围限制在仅限 Gamification 插件?

在我们的 API 密钥管理视图中,没有看到将密钥限制为 ...admin/plugins/gamification/score_events 的选项。

我们的领导层对 Gamification 插件需要一个真正的全局 API 密钥表示怀疑。

1 个赞

我怀疑你是对的。看起来随着需求的增加,更多的范围(scope)被添加了。如果你是自托管的,你可以使用自定义插件。你可以提交一个 PR 和/或发布一个#功能请求。如果你是企业客户,你可以让你的领导层提出要求。:wink:

嗯。现在我想知道是否可以通过插件添加自定义 API 范围(scope)(特别是让一个插件为另一个插件添加 API 范围)。我怀疑这是可能的,但还没有见过有人这样做。

也许可以只为 API 创建一个用户,这样至少可以通过这种方式进行跟踪。

1 个赞

发生过这事吗?

CC:@Falco

作为一个编程新手,我努力想理解帖子的内容,但对我来说仍然相当困难……我想问一下这个功能是否类似于“付费查看”?这是传统论坛中一个非常常见的功能,用户通过活动(如每日签到、发帖、回复等)赚取积分,然后论坛中的某些帖子要求用户支付积分才能查看完整内容。在传统论坛(如 Discuz)中,赚取积分和扣除积分的操作都是自动化的。从我目前了解到的情况来看,游戏化(gamification)可以处理“赚取积分”的部分,但“扣除积分”的操作是否需要管理员手动调用 API?这对个人论坛来说太困难了。据我了解,在没有太多编程知识的情况下随意操作 API 是很危险的,甚至可能导致整个社区崩溃……:sob:

是否有可能将这个“付费查看”功能作为一个独立的插件来实现?或者,如果我雇人定制,大概需要多少费用?