Files
Fulfilled-Knowledge/wishfulfilled-wiki/05_需求文档/04-子系统-多渠道触达引擎.md
2026-05-27 15:40:32 +08:00

18 KiB
Raw Permalink Blame History

 1|# 子系统 04 — 多渠道触达引擎 (`outreach`) v1.0
 2|
 3|## 子系统概述
 4|
 5|| 维度 | 说明 |
 6|| --- | --- |
 7|| 代号 | `outreach` |
 8|| 核心职责 | 渠道路由决策、渠道去重、IM/EDM/APP Push/TEL 渠道调度执行、触达历史管理 |
 9|| 数据所有权 | `channel_route_decisions`, `channel_dedup_records`, `im_interaction_records`, `im_flow_tags`, `edm_message_events`, `edm_user_behavior_profiles`, `app_touch_events`, `tel_call_records` |
10|| 启动依赖 | identity / planning / quota均为软依赖 |
11|| 外部系统依赖 | JOYHUBIM 通道、ESPEDM、FCM/APNsAPP Push、电话系统TEL |
12|
13|---
14|
15|## 1. 模块划分
16|
17|```
18|┌─────────────────────────────────────────────────────────────┐
19|│                    outreach 子系统                           │
20|│                                                             │
21|│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐       │
22|│  │ M1: 渠道路由 │  │ M2: 渠道去重 │  │ M3: IM 执行 │       │
23|│  │  + 优先级    │→│              │→│    引擎      │       │
24|│  └──────────────┘  └──────────────┘  └──────┬───────┘       │
25|│                                             │                │
26|│  ┌──────────────┐  ┌──────────────┐  ┌──────┴───────┐       │
27|│  │ M4: EDM 执行 │  │ M5: APP Push │  │ M6: TEL 执行 │       │
28|│  │    引擎      │  │    引擎      │  │    引擎      │       │
29|│  └──────────────┘  └──────────────┘  └──────────────┘       │
30|│                                                             │
31|│  ┌──────────────┐  ┌──────────────┐                         │
32|│  │ M7: 触达历史 │  │ M8: 对外 API │                         │
33|│  │    服务      │  │    Gateway   │                         │
34|│  └──────────────┘  └──────────────┘                         │
35|│                                                             │
36|└─────────────────────────────────────────────────────────────┘
37|```
38|
39|| # | 模块 | 职责 |
40|| --- | --- | --- |
41|| M1 | 渠道路由+优先级 | 按用户状态路由到最优渠道APP活跃→IM优先 / 未注册→EDM优先 / 高价值无响应→TEL / C类→IM免评卡片 |
42|| M2 | 渠道去重 | 同一计划同一用户不重复走多渠道路由;工单中暂停自动触达;已提交待核验暂停催评 |
43|| M3 | IM 执行引擎 | IM 推送、用户分层A未参与/B参与过/C长期测评人、回评/测评/免评卡片推送、催评、提交核验、返款通知 |
44|| M4 | EDM 执行引擎 | EDM 发送、送达/打开/点击追踪、行为画像、节奏控制、退订/硬退信处理 |
45|| M5 | APP Push 引擎 | APP 推送、触发源管理(绑定玩具/不活跃/计划到期/Listing紧急/活动)、响应追踪 |
46|| M6 | TEL 执行引擎 | 电话任务生成、拨打前准备(用户画像+风险检查+历史沟通)、通话记录、重试策略 |
47|| M7 | 触达历史服务 | 统一触达历史查询(跨渠道聚合)、供 quota频控、identity上下文卡调用 |
48|| M8 | 对外 API Gateway | 统一对外 API |
49|
50|---
51|
52|## 2. 各模块内外说明
53|
54|### 2.1 M1: 渠道路由+优先级
55|
56|| 维度 | 说明 |
57|| --- | --- |
58|| **对内** | 接收 planning 的已批准计划按用户状态矩阵决定渠道APP活跃+已绑定→IM首选APP低活跃→EDM补充+APP Push召回未注册→EDM首选→引导注册后转IM高价值+多次无响应→TELC类累计≥12→IM免评卡片+KOC/KOL协同 |
59|| **对外接口** | `POST /api/outreach/route` — 输入计划+用户,返回路由决策 |
60|| **数据写入** | `channel_route_decisions` |
61|| **依赖** | `GET /api/identity/context/{person_id}` — 用户状态 |
62|
63|### 2.2 M2: 渠道去重
64|
65|| 维度 | 说明 |
66|| --- | --- |
67|| **对内** | 执行去重规则(同一计划同一用户首选渠道、工单中暂停、已提交评价暂停、退订某渠道永久排除、强关联风险全暂停、弱关联降频+提示) |
68|| **对外接口** | `GET /api/outreach/dedup-check?person_id=&plan_id=` |
69|| **数据写入** | `channel_dedup_records` |
70|| **依赖** | `GET /api/tickets?person_id=&status=open`support`GET /api/risk/check/{person_id}`risk |
71|
72|### 2.3 M3: IM 执行引擎
73|
74|| 维度 | 说明 |
75|| --- | --- |
76|| **对内** | 用户分层逻辑A未参与/B参与过但<12/C≥12长期测评人分层推送策略A推回评卡片/B先催评再二次转化/C仅免评提交后的核验与流转订单号核实→登记→补全信息→返款→二次转化标签管理9 种核心标签如「xx产品已回评用户」「xx产品测评待返款用户」等 |
77|| **对外接口** | `POST /api/outreach/im/send` — 发送 IM 消息 |
78|| **数据写入** | `im_interaction_records`, `im_flow_tags` |
79|| **依赖** | JOYHUBIM 通道);`GET /api/quota/check/{person_id}` |
80|| **待确认** | IM 是 WhatsApp 还是自研 IM通道对接方式 |
81|
82|### 2.4 M4: EDM 执行引擎
83|
84|| 维度 | 说明 |
85|| --- | --- |
86|| **对内** | 推送前检查(身份→风险→退订→资格→国家);行为筛选(打开/点击/回复/频率);节奏判断(适合触达/需降频/不适合发送后追踪送达→打开→点击→回复→退订转化路径下载注册APP→转IM / 直接回复邮件→生成客服工单 / 未响应→再触达队列) |
87|| **对外接口** | `POST /api/outreach/edm/send` — 发送 EDM |
88|| **数据写入** | `edm_message_events`, `edm_user_behavior_profiles` |
89|| **依赖** | ESP 邮件服务 |
90|| **待确认** | EDM 模板在哪里管理?模板变量(用户名/产品名/链接)如何填充? |
91|
92|### 2.5 M5: APP Push 引擎
93|
94|| 维度 | 说明 |
95|| --- | --- |
96|| **对内** | 5 种触发源(绑定新玩具/不活跃/计划到期/Listing紧急/活动);推送前过滤(身份+风险+频控+标签);响应追踪(点击打开→落地页 / 忽略→短期不重复推 / 卸载→转EDM候选池APP 内动作分流(提交回评/测评→IM核验 / 联系客服→工单 / 浏览→更新活跃标签) |
97|| **对外接口** | `POST /api/outreach/app/push` — 发送 APP Push |
98|| **数据写入** | `app_touch_events` |
99|| **依赖** | FCM/APNs |

100|| 待确认 | 是否复用 JOYHUB 现有 Push 通道? | 101| 102|### 2.6 M6: TEL 执行引擎 103| 104|| 维度 | 说明 | 105|| --- | --- | 106|| 对内 | 7 种触发场景(答应配合超时/高价值跟进/复杂售后/多次无响应/紧急Listing/Amazon来电/外呼任务);拨打前准备 5 步(查用户完整画像→查风险→查历史沟通→准备话术→生成电话工单);通话结果 5 种(售后问题解决→引导回评 / 直接配合→登记答应配合 / 拒绝→记录 / 疑似诈骗→转风险 / 未接通→重试);重试策略(<3次重拨 / ≥3次降级EDM或关闭 | 107|| 对外接口 | POST /api/outreach/tel/task — 创建 TEL 任务 | 108|| 数据写入 | tel_call_records | 109|| 依赖 | 电话系统(外呼/来电) | 110| 111|### 2.7 M7: 触达历史服务 112| 113|| 维度 | 说明 | 114|| --- | --- | 115|| 对内 | 跨渠道聚合触达历史IM/EDM/APP/TEL提供统一查询接口供 quota频控和 identity上下文卡消费 | 116|| 对外接口 | GET /api/outreach/history/{person_id} | 117|| 数据写入 | 只读聚合 | 118| 119|--- 120| 121|## 3. 对外 API 契约(草案) 122| 123|| 接口 | 方法 | 输入 | 输出 | 消费者 | 124|| --- | --- | --- | --- | --- | 125|| 触达历史 | GET /api/outreach/history/{person_id} | person_id | {im[], edm[], app[], tel[]} | quota频控, identity上下文卡 | 126|| 执行触达 | POST /api/outreach/send | {plan_id, person_ids[], channel, content} | {task_id, status} | planning | 127|| 渠道路由决策 | POST /api/outreach/route | {person_id, plan_id} | {recommended_channel, alternatives[]} | planning | 128|| IM 消息发送 | POST /api/outreach/im/send | {person_id, msg_type, content} | {message_id} | 内部 | 129| 130|--- 131| 132|## 4. 数据对象 133| 134|| 对象 | 核心字段 | 说明 | 135|| --- | --- | --- | 136|| channel_route_decisions | decision_id, person_id, plan_id, selected_channel, reason, decided_at | 渠道路由决策 | 137|| channel_dedup_records | dedup_id, person_id, plan_id, channel, status(BLOCKED/ALLOWED), block_reason | 渠道去重记录 | 138|| im_interaction_records | interaction_id, person_id, msg_type(PUSH_CARD/REVIEW_CARD/EXEMPTION_CARD/REMINDER/REFUND_NOTICE), direction(OUTBOUND/INBOUND), content, status, created_at | IM 交互记录 | 139|| im_flow_tags | tag_id, person_id, tag_type, tag_value, tagged_at | IM 流程标签(如 xx产品待返款等 | 140|| edm_message_events | event_id, person_id, email, event_type(SENT/DELIVERED/OPENED/CLICKED/REPLIED/UNSUBSCRIBED/HARD_BOUNCED), occurred_at | EDM 事件 | 141|| edm_user_behavior_profiles | profile_id, person_id, email, last_opened_at, total_opens, consecutive_no_open, last_replied_at, monthly_received, status | EDM 用户行为画像 | 142|| app_touch_events | event_id, person_id, trigger_type, push_status, response, occurred_at | APP Push 事件 | 143|| tel_call_records | call_id, person_id, ticket_id, direction(OUTBOUND/INBOUND), call_status, duration, outcome, retry_count, recorded_at | TEL 通话记录 | 144| 145|--- 146| 147|## 5. 业务澄清问题清单 — outreach 148| 149|### 5.1 渠道优先级路由4 项) 150| 151|| # | 问题 | 优先级 | 152|| --- | --- | --- | 153|| O-01 | 路由规则是否可配置?(例如针对某个站点用户调整 IM > EDM 的优先级)配置界面在 outreach 内还是在独立配置管理? | P0 | 154|| O-02 | 「APP 低活跃」的判定标准是什么N 天未打开N 天未点击推送?)阈值是否可配置? | P1 | 155|| O-03 | 高优先级渠道发送失败(退信/未送达)后,是否自动降级到下一渠道?降级是否有冷却时间? | P1 | 156|| O-04 | C 类用户累计≥12只推免评——如果免评计划也没有是完全不推还是推品牌/活动内容? | P2 | 157| 158|### 5.2 IM 通道4 项) 159| 160|| # | 问题 | 优先级 | 161|| --- | --- | --- | 162|| O-05 | IM 使用的具体平台是什么WhatsApp Business API / 自研 JOYHUB IM / Messenger不同平台的 API 能力和限制? | P0 | 163|| O-06 | IM 的「分层」是系统自动判断还是人工可干预?(一个 B 类用户会不会被错误标记为 C 类?如何修正?) | P0 | 164|| O-07 | IM 推送中「测评卡片」的具体形式是什么?(带按钮的消息模板?需要用户填表单?)模板在哪里管理? | P1 | 165|| O-08 | IM 中的「订单号核实」——核实的数据源是什么比对内部订单表Amazon 订单 API核实失败的转人工流程 | P1 | 166| 167|### 5.3 EDM 通道4 项) 168| 169|| # | 问题 | 优先级 | 170|| --- | --- | --- | 171|| O-09 | 当前使用的邮件服务是什么SendGrid/Mailchimp/SES/自建?)有没有现成 API 和 Webhook 追踪? | P0 | 172|| O-10 | EDM 模板(邮件内容、样式、多语言)在哪里管理?属于 outreach 还是独立内容管理子系统? | P1 | 173|| O-11 | 「EDM 行为画像」中的「最近 3/5 次 0 打开」——3 次和 5 次是两个独立指标还是二选一?各自对应什么策略? | P1 | 174|| O-12 | EDM 发送量和频控——单日最大发送量有限制吗ESP 的每日限额?) | P1 | 175| 176|### 5.4 APP Push3 项) 177| 178|| # | 问题 | 优先级 | 179|| --- | --- | --- | 180|| O-13 | APP Push 是否复用 JOYHUB 的现有推送通道?还是需要独立接入 FCMAndroid和 APNsiOS | P0 | 181|| O-14 | APP Push 和 IM 消息的分工——文档第 11.2 节给了对照表,但边界是否绝对?(例如"计划到期提醒"是否可能同时走 APP Push 和 IM | P1 | 182|| O-15 | APP 落地页——推送点击后跳转到哪个页面APP 内的测评页IM 对话页?)落地页由哪个团队/子系统负责? | P2 | 183| 184|### 5.5 TEL 通道3 项) 185| 186|| # | 问题 | 优先级 | 187|| --- | --- | --- | 188|| O-16 | 电话系统使用什么方案?(自建 SIP PBX / Twilio / 其他云呼叫中心?)是否已有通话记录? | P0 | 189|| O-17 | 「拨打前准备」第 2 步「查风险:强关联命中→暂停拨打→先复核」——复核由谁来做?(风险人员?客服组长?)复核时长预期? | P1 | 190|| O-18 | 电话中「尽量确认」的字段(购买平台、订单号、产品型号、购买时间、问题类型、凭证)如果用户不愿意/无法提供——哪些是必须确认的?哪些可以跳过? | P1 | 191|

5.6 消息内容与合规4 项)

# 问题 优先级
O-19 消息内容是否需要审核IM 推送文案、EDM 邮件内容、APP Push——上线前是否需要审核审核流程 P1
O-20 EDM 合规要求——是否遵守 CAN-SPAM Act美国、GDPR欧洲、CASL加拿大退订机制是否满足法律要求 P1
O-21 IM 平台的合规限制——WhatsApp 等平台禁止垃圾消息和特定类型内容(如测评引导)——是否有合规风险? P1
O-22 消息发送的时区感知——美国用户、英国用户、德国用户的推送时间是否需要本地化?(用户当地时间的白天而非半夜) P1

5.7 消息策略与实验3 项)

# 问题 优先级
O-23 是否需要 A/B 测试能力?(同一计划的两组用户收到不同文案/不同发送时间——对比转化率?) P2
O-24 消息打开率/点击率/转化率的追踪和报表?是否需要自动优化发送策略(高打开率的文案模板优先使用)? P2
O-25 用户反馈「消息太频繁/内容不相关」——是否有投诉/退订统计和预警?(投诉率超过 X% 暂停该类型推送?) P1

5.8 IM 通道补充3 项)

# 问题 优先级
O-26 IM 消息的「已读」状态是否能获取WhatsApp 的蓝色双勾——能否用于判断用户是否看到消息?) P1
O-27 IM 用户提交的「评论截图/链接」——如何自动验证截图的真实性?(防止用户 PS 假截图?是否需要 OCR 识别截图内容?) P1
O-28 IM 中的返款通知——返款是系统自动触发还是人工触发?返款状态如何回写到 outreach P1

5.9 EDM 通道补充3 项)

# 问题 优先级
O-29 EDM 的「硬退信」和「投诉」是否自动同步到 identity 的风险标记?(硬退信用户是否需要进入风险观察?) P1
O-30 EDM 引导用户下载 APP——是否在邮件中嵌入归因链接deferred deep link以追踪转化来源 P2
O-31 EDM 的发送域名和 IP 预热策略?(新域名/IP 直接大批量发送会被 ESP 判定为垃圾邮件——需要渐进式预热?) P2

5.10 TEL 通道补充3 项)

# 问题 优先级
O-32 电话录音是否需要存储?存储多久?谁有权调取录音?(涉及合规和隐私) P1
O-33 不同国家的电话合规要求——美国需提前告知录音、德国的 GDPR 限制——如何处理? P1
O-34 TEL 任务的优先级和分配——多个外呼任务同时存在时,客服按什么顺序拨打?(先打高价值用户?先打答应配合超时的?) P1

5.11 实施层面4 项)

# 问题 优先级
O-35 各外部通道的 rate limit 和计费模式WhatsApp 按消息数计费EDM 按发送量计费?)是否需要成本控制? P1
O-36 消息发送是同步还是异步?(用户点「发送」后立即返回还是后台队列处理?失败重试策略?) P1
O-37 多渠道消息的发送顺序保证?(「先发 IM 提醒→24h 后无回复再发 EDM」——这种时序依赖如何实现定时任务延迟队列 P2
O-38 异常场景——如果某渠道 100% 发送失败ESP 宕机/WhatsApp API 限流)——是否自动切换备用渠道? P2