相关概念
人群
人群是一个uid集合。用户通过标签、手动上传、算法模型等方式创建人群,再针对这些uid进行定向运营,如发券,个性化资源位等。
渠道/应用系统
渠道是消费人群的平台/业务方。不同的渠道通常有不同的业务场景,并支撑不同的业务。如判定渠道、广告渠道。
判定
判定渠道提供实时判定能力,支撑拉新券、资源位等业务场景。输入目标人群id和用户id,返回该用户是否属于目标人群。
广告
广告渠道提供商家一站式运营等能力。将人群包上传到广告渠道,并绑定使用商家的id,商家就可在自己店铺的人群列表下看到该人群,并对其进行定向营销。
架构图
判定渠道生产流程
判定渠道消费时序
广告渠道导入流程
投放元数据管理
领域设计
// 投放信息
public class DelieverTask {
private String delieverId; // 投放id
private DelieverTaskTypeEnum taskType; // 投放任务类型
private String crowdId; // 人群Id
private ChannelInfo channel; // 渠道
private PushFrequencyEnum pushFrequency;// 推送频率
private PushKeyEnum pushKey; // 推送主键
private Boolean isAllowPushKeyDowngrade;// 是否允许推送主键降级
private DelieverStateTypeEnum state; // 状态
private List<SubDelieverTask> subDelieverTasks;// 子投放任务
private Date startAt; // 投放开始时间
private Date endAt; // 投放结束时间
}
// 子投放任务
public class SubDelieverTask {
private String bizId; // 子投放任务id
private DelieverStateTypeEnum state; // 状态
private Date createdAt; // 创建时间
private Date modifiedAt; // 修改时间
private Date stateUpdatedAt; // 状态更新时间
private Map<String, String> extra; // 额外信息
}
// 渠道信息
public class ChannelInfo {
private String channelCode; // 渠道代码
private String name; // 名称
private String description; // 描述
private String webUrl; // 渠道链接
private List<PushFrequencyEnum> supportedPushFrequency;// 支持的投放频率
private List<PushKeyEnum> supportedPushKey;// 支持的推送主键
}
public interface DelieverService {
// 添加投放渠道
void addChannelInfo(ChannelInfo channelInfo);
// 获取所有渠道
ChannelInfo listChannelInfos();
// 创建投放任务
void createDelieverTask(DelieverTask task);
// 更新投放任务
void updateDelieverTask(DelieverTask task);
// 触发投放任务
void submitDelieverTask(DelieverTask task);
// 更新投放状态
void updateDelieverTaskState(SubDelieverTask subDelieverTask, DelieverStateTypeEnum taskState);
// 更新额外信息
void updateDelieverTask(SubDelieverTask subDelieverTask, Map<String, String> addedInfo);
// 获取人群的所有投放信息
List<DelieverTask> listDelieverTaskByCrowdId(String crowdId);
}
库表结构
ER图
投放任务
CREATE TABLE `n_deliver_sub_task` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`deliever_id` varchar(255) COLLATE utf8mb4_general_ci NOT NULL COMMENT '投放id',
`biz_id` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '1' COMMENT '各渠道的业务id,如千川的advid',
`task_state` tinyint NOT NULL COMMENT '状态: 0:失效 -1:业务方限制 2:提交成功 -2:提交失败 3:投放成功 -3:投放失败',
`extra` json NOT NULL COMMENT '各投放渠道定制化的额外信息',
`created_at` timestamp NOT NULL COMMENT '创建时间',
`updated_at` timestamp NOT NULL COMMENT '更新时间',
`state_changed_at` timestamp NOT NULL COMMENT 'state更新时间',
`deleted` tinyint NOT NULL COMMENT '0:-已删除;1:未删除',
PRIMARY KEY (`id`),
UNIQUE KEY `uniq_biz` (`deliever_id`,`biz_id`)
)
CREATE TABLE `n_deliver_task` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`deliever_id` varchar(255) COLLATE utf8mb4_general_ci NOT NULL COMMENT '投放id',
`channel_id` varchar(255) COLLATE utf8mb4_general_ci NOT NULL COMMENT '渠道id',
`crowd_id` varchar(255) COLLATE utf8mb4_general_ci NOT NULL COMMENT '人群id',
`push_frequency` tinyint NOT NULL COMMENT '推送频率: 1:有效期内更新 2:单次',
`push_key` tinyint NOT NULL COMMENT '推送键: 1:uid 2:did 3:uid+did',
`allow_push_key_downgrade` tinyint NOT NULL DEFAULT '0' COMMENT '是否允许推送主键降级: 0:不允许 1:允许',
`state` tinyint NOT NULL COMMENT '状态: 0:失效 1:等待推送 2:推送中 3:即将过期 4:过期',
`task_state` tinyint NOT NULL COMMENT '状态: 0:失效 -1:业务方限制 2:提交成功 -2:提交失败 3:投放成功 -3:投放失败',
`start_at` timestamp NOT NULL COMMENT '投放开始时间',
`end_at` timestamp NOT NULL COMMENT '投放结束时间',
`created_at` timestamp NOT NULL COMMENT '创建时间',
`updated_at` timestamp NOT NULL COMMENT '更新时间',
`meta_updated_at` timestamp NOT NULL COMMENT '元数据更新时间',
`scene` varchar(512) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '运营场景',
`business_profit` varchar(512) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '业务收益',
`deleted` tinyint NOT NULL COMMENT '0:-已删除;1:未删除',
PRIMARY KEY (`id`),
UNIQUE KEY `uniq_deliever_id` (`deliever_id`),
KEY `idx_crowd` (`crowd_id`) COMMENT '人群id'
)
投放系统
CREATE TABLE `tt_channel_info` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`channel_id` varchar(255) NOT NULL COMMENT '渠道id',
`name` varchar(255) NOT NULL COMMENT '名称',
`description` varchar(255) DEFAULT NULL COMMENT '描述',
`biz_system` tinyint NOT NULL COMMENT '推送渠道所属系统: 1:c端 2:千川',
`url` varchar(255) DEFAULT NULL COMMENT '渠道链接',
`push_frequency` json NOT NULL COMMENT '支持的推送频率: 1:有效期内更新 2:单次',
`push_key` json NOT NULL COMMENT '支持的推送键: 1:uid 2:did 3:uid+did',
`support_key_downgrade` tinyint NOT NULL COMMENT '是否支持降级: 0:不支持 1:支持',
`created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间',
`updated_at` timestamp NULL DEFAULT NULL COMMENT '更新时间',
`version` int unsigned DEFAULT NULL COMMENT '版本号',
PRIMARY KEY (`id`),
UNIQUE KEY `channel_id` (`channel_id`)
)