营销,就是吸引消费者关注进而使用商家提供的产品或服务的种种手段。某种意义上来说,你能看到的广告、分享、打折、赠送,这些都算是一种营销。
预付卡的生态体系里恰恰需要这种营销的基因,来帮助商家快速回笼资金,于是两者一拍即合,营销系统在预付卡生态下生根发芽。
有赞预付卡包装出了会员储值这样一款产品,用户在商家店铺里完成特定金额的充值后,会得到商家赠送的权益,比如积分、会员卡、优惠券等。
这就是最原始的需求,分析下来,为了完成这个充赠的目标,我们需要区分出营销的三个阶段:
梳理完流程,我们提取出下面这个模型:
根据上面这个简单的执行流程,我们得到了最初一版的营销系统:上下文是指用户、店铺、充值金额这样的输入信息,加上定义好的规则,经过特定的规则匹配与执行,得到了展示结果,或者规则订单。
这个模式在线上跑了很长一段时间,期间增加了不少其他的权益,比如储值的赠送金、赠品等。特别是赠送金功能的上线,大幅提升了商家对会员储值产品的使用热情,也增加了用户粘性。
储值的业务量稳步增多,商家的运营需求也随之而来,比如规则的定时上下线,每月特定的会员日赠送权益,前多少个用户能参加某个优惠等。针对商家这些需求,我们引入了限制条件和行为的概念。原先根据规则 id 和充值金额的比较,抽象成了条件的匹配,而权益发放就是满足条件后的行为。
商家为不同的规则定制不同的条件及行为,于是我们的规则成了这样
规则 = 条件 + 行为
那么问题来了,什么样的限制算是规则的条件,而不是规则的某个属性呢?比如作为规则使用范围的商家 id 算条件吗?充值金额呢?
万物皆条件,但是通用的条件就成了属性。比如规则中的商家 id 、业务类型是属性,而充值金额就不是属性,它是储值业务中特有的判断条件。商家运营诉求里的上下线时间,前N名用户参加也是储值业务中的条件。
再来看看行为,权益发放可以认为是一种事后行为,再扩大点看,立减、是否可用的判断都是一种事中行为。值得注意的是,行为的执行并不改变上下文中的原始数据,执行后的结果可作为业务方使用判断的依据,比如立减规则并不改变原订单金额,但是影响最后实际的支付金额。
从系统通用性考虑,许多条件和行为并不是储值业务独有,我们可以定义出多种类型的条件,配以对应的校验器,以便复用。行为也是一样,有对应的执行器,自由组装。基于这样的设计,规则匹配和行为执行可以采用责任链的模式进行处理。
这里条件判断有两点需要思考一下:
有限资源的锁定 - 前文我们谈营销流程时说到,事中营销系统会落下规则订单,事后会进行确认。这类似2PC事务,落下规则订单时需要锁定对应资源(比如名额),事后进行确认或回退,而业务方作为协调方,需要有超时机制触发营销系统回退来释放锁定的资源,以免出现“事务悬挂”。如果没有对资源进行锁定的话,有时会造成产品的用户体验比较差,比如充值时看到前30名送 XXX 优惠券5张,但是付完钱后可能已经是31名了,或者优惠券已经送完了。但是当有限资源不在营销系统时,锁定资源的成本会大大提高,产品上需要在用户体验和系统性能两者之间进行权衡。
临界点的并发处理 - 这是上一个关注点的延伸,在靠近临界值时,如果有限资源不在营销系统,营销系统无法控制并发,只能依赖资源方来维护。在会员储值业务中,典型的并发场景就是首充优惠的判断,营销系统本身无法控制用户的并发充值,对于临界值的判断,需要上游充值平台传递过来。优化上可以与上游系统约定好什么时候传入这个临界资源的数据进行判断,以避免不必要的数据加载。
礼品卡是有赞预付卡的另一款产品,突出节日属性,主打社交传播。运营过程中,商家希望限定礼品卡能购买的商品或商品分组。
这和上面提到的储值规则不同,储值规则,它的生命周期独立于储值余额,是充值流程的规则,而礼品卡的使用范围是使用时的规则,它的生命周期与具体的礼品卡强关联的,我们认为礼品卡是这些规则的“载体”。“载体”对于规则而言是一种通用的、特殊的条件,规则是通过“载体“向外暴露,于是“载体 id ”与“载体类型”作为规则的属性存在。
礼品卡的使用范围,可以是商品,或是商品分组,或是两种组合,产品上提供了黑白名单两种维度配置方案。这里条件之间的关系,又与储值规则不同,储值规则的条件之间是一种“逻辑与”的关系,即只要有一个条件不满足规则就不匹配;限品类的规则条件之间是“逻辑或”的关系,即购买的商品需要在指定的商品列表中,或者是指定的商品分组列表中。对此我们在之前的模型上增加了“规则模板”
规则模板定义成了二元表达式:
条件1 && (条件2 || !条件3)... -> 行为1 && 行为2 && ...
或者三元表达式
条件1 && (条件2 || !条件3)... ? 行为1 && 行为2 : 行为3 && 行为4
条件与行为间的编排代表着一个产品的业务逻辑。比如礼品卡限品类的规则模板可以是: _商品范围 || 商品分组范围 -> 可用_,商家可以在这个规则模板下配置店铺礼品卡的限制属性,比如,商品范围为 A,B,C ,而商品分组范围为 A',B',C' ;而储值的规则模板可以是 _实付金额 && 起止时间 && 前 N 名限制 -> 发赠送金 && 发优惠券 && 发赠品_。
这样营销系统根据规则模板生成对应的规则引擎,替代单一的责任链解析,并且能区分出条件的优先级。
至此,营销系统的核心模块也逐渐清晰,如下图,虚线下方是通用的规则匹配和执行的能力,上方是面向业务使用的封装。
营销系统提供了通用的配置和流程,但对于业务方而言无法直接理解这些规则定义和执行结果,营销系统也不希望将内部的模型暴露出去,所以在营销系统提供给业务方的接口有一层轻量的适配,将外部的参数转成规则的配置,也将执行的结果转成与业务方约定的返回。
营销系统作为一个提高商家运营效率的系统,有着丰富的适用场景。规则模板的出现赋予了营销系统更大的灵活性,可以引入子规则的方式来支持更复杂的场景,而规则间的互斥也可以认为是一种特殊的条件,加上规则间的比较排序,达到规则推荐的目的。
在预付卡的生态体系里,营销系统沉淀下了通用能力,可以满足商家或平台的多样化的营销诉求。后续文章会继续讲述营销系统的核心模块如何移植到支付系统,以及在支付场景下会面临哪些不一样的问题。
待续...
(附内推邮箱: wanghan@youzan.com ,欢迎交流,一起建设大资产 ☺)
欢迎关注我们的公众号
Original url: Access
Created at: 2019-09-26 15:50:23
Category: default
Tags: none
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
java windows火焰图_mob64ca12ec8020的技术博客_51CTO博客 - 在windows下不可行,不知道作者是怎样搞的 监听SpringBoot 服务启动成功事件并打印信息_监听springboot启动完毕-CSDN博客 SpringBoot中就绪探针和存活探针_management.endpoint.health.probes.enabled-CSDN博客 u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论