表达式引擎之通用的开屏页后端接口设计
表达式引擎之通用的开屏页后端接口设计
场景需求
公司小程序的开屏页代表了公司近期需要推出的一些活动、新课程发布等等关键的动向,也是希望用户第一时间触达小程序时能够接受到关键的信息。
但是开屏页虽然仅仅只是展示一张图片或者一个页面,但是背后的一些逻辑可能不是这么简单。
一、需求场景全解析
1.1 为什么要做智能开屏页?
▫️ 用户分级曝光
VIP用户看活动A,新用户看活动B,精准匹配身份标签
▫️ 节日氛围拉满
春节弹窗C,情人节弹窗D,自动切换时间主题
▫️ 动态数据绑定
跳转链接+弹窗文案+配图URL,一套接口全搞定
1.2 传统方案痛点
❌ 硬编码if-else逻辑爆炸
❌ 多维度叠加规则难维护
❌ 规则越复杂后期难描述
❌ 每次改需求都要发版上线
二、表达式引擎解决方案
2.1 核心优势
✅ 可视化规则:思维导图,简洁明了
✅ 配置即生效:改规则不用改代码
✅ 多维度决策:时间+身份+设备自由组合
✅ 数据动态注入:图文链接实时更新
✅ 规则追踪:规则运行情况一目了然
接入引擎
1、代码接入
你可以先定义一个controller进行接口入口,当然这里不做赘述
ClientExpressionSubmitRequest submitRequest = new ClientExpressionSubmitRequest();
// 业务组编码,比如活动、小程序
submitRequest.setBusinessCode(businessGroupCode);
// 业务码:活动码、小程序对应的开屏编码
submitRequest.setExecutorCode(executorCode);
// 用户编号
submitRequest.setUserId(userId);
// 业务编号
submitRequest.setUnionId(unionId);
// 事件码: 可不填,可以理解为同一个接口的不同业务类型,可在引擎中进行分类
submitRequest.setEventName(eventName);
// 追踪编号 : 可不填,有追踪系统可用
submitRequest.setTraceId(TraceHelper.getTraceId());
// 请求对象
submitRequest.setRequest(request);
// 调用引擎
final Boolean result = clientEngineFactory.invoke(submitRequest, envContext.getSourceMap());
log.info("执行引擎返回结果:{} -> {}", result, envContext.getResultContext());
return envContext.getResultContext();
配置规则
1、定义规则组
2、配置规则
内部业务函数就不做过多赘述,可以根据自己的业务进行定制,然后配置即可。
🔸 fn_env_put_value('xmas_img','https://x.jpg')
上传圣诞主题图
🔸 fn_record_result_context('link',xmas_link)
绑定跳转链接
物料信息通过公共函数:
fn_env_put_value('xxx_img','http://xxxx.jpg')
设置到全局上下文中,经过规则判断符合之后,加入到结果上下文函数中:fn_record_result_context('showImg',xxx_img)
以上都是引擎自带的公共函数,无需自己编写,可通过地址进行了解。
表达式规则引擎开源地址:
- https://github.com/liukaixiong/expression-mind-map-engine
- https://gitee.com/liukaixiong/expression-mind-map-engine