表达式引擎之活动任务系统设计
表达式引擎之活动任务系统设计
🔥超硬核技术分享|表达式规则引擎设计全攻略✨ 三步打造高可用活动系统!
需求描述
业务方希望通过任务来驱动用户对小程序的活跃度,比如打卡、分享、提问、报名等等操作来获得一些奖励,比如积分、商品等等。
任务一般是围绕活动产生的,所以基于活动纬度去配置任务是比较合理的。
业务难点
- 确定任务的行为,以及接入行为管理。比如打卡、分享、提问,都是用户的行为,如何统一将行为管理起来,方便后续拓展。
- 任务的规则是一个难点,每个任务能不能完成是由行为规则决定的,规则如何配置?
- 任务完成之后,奖励的处理?【积分、商品、回调…】
因此,针对一系列复杂的逻辑处理,需要有一套规则引擎来接管所有复杂的逻辑,为后续复杂业务的灵活性打下基础,毕竟开个好头,后续就不难了。
表达式规则引擎开源地址:
- https://github.com/liukaixiong/expression-mind-map-engine
- https://gitee.com/liukaixiong/expression-mind-map-engine
业务设计
表结构设计
活动表
字段名称 | 类型 | 说明 |
---|---|---|
activity_code | VARCHAR(32) | 唯一标识活动的编码 |
type | TINYINT | 活动类型:share (分享类)/user (用户类) |
name | VARCHAR(64) | 活动名称 |
start_time | DATETIME | 活动开始时间 |
end_time | DATETIME | 活动结束时间 |
status | TINYINT | 活动状态:0 无效/1 有效 |
expression_config | TEXT | 活动特殊配置(JSON格式存储规则表达式) |
subscribe_events | VARCHAR(255) | 订阅的事件编码集合(多个用逗号分隔,如:register,order) |
任务表
字段名称 | 类型 | 说明 |
---|---|---|
module | VARCHAR(32) | 所属模块(如:新人任务/日常任务) |
task_code | VARCHAR(32) | 唯一任务编码 |
title | VARCHAR(64) | 任务名称(如:每日签到) |
icon | VARCHAR(128) | 任务图标URL |
description | VARCHAR(255) | 任务描述(前端展示用) |
reward_type | VARCHAR(16) | 奖励类型:points (积分)/goods (实物商品) |
reward_value | INT | 奖励数值(积分数量/商品ID) |
用户任务日志表
字段名称 | 类型 | 说明 |
---|---|---|
log_id | BIGINT | 日志唯一编号(自增主键) |
task_code | VARCHAR(32) | 关联任务编码 |
task_title | VARCHAR(64) | 任务标题快照(防止任务修改后历史记录丢失) |
user_id | BIGINT | 用户唯一标识 |
reward_points | INT | 实际发放的积分值 |
detail | TEXT | 任务完成详情(JSON格式存储行为参数,如:{share_count:3,days:7}) |
流程设计
1、针对用户可能触发的行为在接口进行埋点
2、将行为数据发送到消息队列中
3、活动系统负责订阅所有用户的行为事件。
4、将该任务需要关注到的用户行为进行绑定到活动表的【订阅的事件编码集合】字段中进行关联
5、当用户行为匹配到对应的活动【任务】数据时,开始消费该数据,数据的逻辑都在【表达式规则引擎】中配置。
6、规则引擎负责该任务相关的【行为、条件、奖励、回调】四层模型进行划分
表达式规则引擎配置
🌟核心价值 ✅ 灵活配置规则 ✅ 实时生效机制 ✅ 全链路追踪 💡一套引擎搞定:邀请裂变+任务系统+营销活动
规则配置案例:
四层颜色对应四种模型: 行为
(浅绿) - 条件
(紫色) - 奖励
(绿色) - 回调
(蓝色),根据自己的诉求在模型中进行迭代配置。
每个分支中都涵盖了业务表达式,表达式中涵盖业务函数或者上下文变量等等
比如:
- 行为: event == ‘question’ // 提问
- 条件: xxx_expression_repeatable() // xxx只能被成功执行一次,不可重复执行
- 奖励: task_reward_info(‘xcx_share_day’) // 完成某个指定任务
- 回调: send_msg(‘短信码’) // 发送短信
以上只是业务函数释义,可根据自己的业务定制自己的函数进行配置。比如xx天分享才能得到奖励等等。
一个复杂的任务过程,被抽象成一个个通用的业务函数,可以应用到各个场景进行重组,得到最终的业务表达式,这也是引擎带来的优势。
当业务迭代到最后,所有的业务基本上大部分都能够被这些能力覆盖,对团队的效率、质量都会有大的提升。
详细介绍可以参考引擎:
- https://github.com/liukaixiong/expression-mind-map-engine
- https://gitee.com/liukaixiong/expression-mind-map-engine