【用户运营数据中心】人群投放方案

相关概念

人群

人群是一个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图

投放域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`)
)
上一篇
下一篇