# 【对话列表】Relationship Action Card

## 一句话定义

- 大卡回答：现在有哪段关系，值得我做一个动作？
- Star Light 回答：哪些人值得我保留和找回？
- Message List 回答：最近谁给我发了什么？
- 三层分别对应：NOW / IMPORTANT / RECENT。

## 三类候选

### P1 连续续星，今天尚未续

- 关系已进入星际之旅。
- 截至昨天连续续星达到配置门槛；建议先按至少 2 天配置。
- 今天尚未续星。
- 文案：你们已经连续续了 XX 天星球，今天也别断了！
- CTA：Hi ⭐。

### P2 昨日首次达到 50 轮，今天尚未续

- 昨天首次达到 50 轮，并成功开启星际之旅。
- 今天尚未续星。
- 该 50 轮事件此前没有被卡片处理。
- 文案：你们昨天开启了星际之旅，快继续你们的旅程吧！
- CTA：Hi ⭐。

### P3 昨日首次达到 20 轮，当前仍不足 50 轮

- 昨天首次达到 20 轮，当前累计轮数小于 50。
- 今天尚未完成本次延续目标。
- 必须存在一个当前可行动的机会：好友在可进入房间、好友在线、或有尚未浏览的新动态。
- 房间 CTA：Join；帖子 CTA：View；仅在线 CTA：Hi ⭐。
- 没有机会状态就不出卡，不用通用文案兜底。

## Hybrid 动态机制

### 每日 8:00：刷新基础资格

- 计算 P1 的连续续星天数和今日续星状态。
- 生成 P2 的昨日 50 轮事件。
- 生成 P3 的昨日 20 轮基础人群。
- 执行拉黑、举报、封禁、未读、停控和事件去重。
- 8:00 不锁死当天唯一展示对象，只生成基础候选与当日状态。

### 白天：关键事件更新候选

- 当前关系完成今日续星／有效互动：当前卡立即失效。
- P3 候选进入可加入房间：新增或升级为房间机会。
- P3 候选上线：新增在线机会。
- P3 候选发布接收方可见的新动态：新增弱机会。
- 候选离房、下线、帖子失效：移除对应机会；没有其他机会则退出候选。
- 收到对方未读私聊：退出大卡候选，由 Star Light 和 Message List 承接。
- 任意好友上线、普通 20 轮关系上线：不触发。
- Journey 双方刚刚 Join：不纳入本版三类人群，后续作为独立 Journey 事件评估。

### 前台稳定规则

- 后台可以更新候选，用户停留在 Message 页时不自动换卡。
- 每次进入 Message 页最多确定一张卡，直到离开该页、完成动作或条件失效。
- 当前卡有效：返回 Message 页时继续显示，不因同级新机会出现而替换。
- 当前卡失效：返回 Message 页时移除；同一次返回不立即补下一张。
- 下一次冷启动或重新进入 Message 页，再按最新候选重新选择。
- 不做分数阈值竞价；严格使用 P1 > P2 > P3。
- P1／P2 不会被 P3 的在线、房间或新帖机会顶掉。
- P3 的在线／房间状态消失后，不降级成泛续聊文案；仍有其他有效机会才改状态，否则退出。

## 排序

- 第一层：P1 > P2 > P3。
- P1 同组：连续天数降序 > 聊天轮数降序 > 最近聊天时间降序。
- P2 同组：聊天轮数降序 > 到达 50 轮时间降序 > 最近聊天时间降序。
- P3 同组：在群聊房 > 在线且有新动态 > 此刻在线 > 仅有新动态。
- P3 同机会：聊天轮数降序 > 最近聊天时间降序。
- 最终同分按稳定 relation_id 排序，避免同一次访问随机换人。
- 删除旧版“聊天轮数 × 时间衰减 + 沉默／回流加分”的主排序。

## 频率与生命周期

- 同时最多展示 1 张卡；三类候选不等于三张卡。
- 一个业务日仍按接收方当地 8:00 至次日 8:00 计算。
- 卡片容器每个业务日最多有效出现 3 次，沿用旧规则。
- 同一页面停留期间最多感知 1 个卡片对象，不实时跳人。
- 同一关系同一业务日最多新增曝光 1 次；同一实例返回可记 visible_again，不重复关系曝光。
- P1 是每日事件：连续状态仍有效且当天尚未续星，下一业务日可重新判断；删除旧 30 天最多 4 次限制。
- P2 是 50 轮次日事件，每段关系只触发一次。
- P3 是 20 轮次日事件，每段关系只触发一次；以后达到 50 轮仍可进入 P2。
- 点击 Hi ⭐／Join／View 并成功完成目标：当前事件处理完成，卡片退出；同次页面不补下一张。
- 点击 X：当前卡退出，同次页面不补下一张；先沿用关系停控 3 个判定日。
- 当前机会失效：卡片退出，不算完成动作；同次页面不补下一张。
- 页面外发生新事件：后台更新候选；下次进入 Message 页再展示。

## 关键状态表

| 当前状态 | 新事件 | 后台处理 | 用户当前看见什么 | 下次进入 Message 页 |
| --- | --- | --- | --- | --- |
| 无卡 | P3 好友进入房间 | 加入 P3 候选 | 页面停留时不突然插卡 | 按 P1 > P2 > P3 选一张 |
| P1 展示中 | P3 好友上线 | 记录 P3 机会 | 继续显示 P1 | P1 仍有效则继续 P1 |
| P1 展示中 | 今日续星完成 | P1 失效 | 当前卡退出 | 重新选择最新候选 |
| P2 展示中 | P3 好友进入房间 | 记录 P3 机会 | 继续显示 P2 | P2 仍有效则继续 P2 |
| P3 在线卡 | 好友下线 | 在线机会失效 | 不改成“昨天聊得不错”兜底卡 | 有其他机会才换状态，否则无卡 |
| P3 房间卡 | 好友离房 | 房间机会失效 | 卡片退出或显示失效反馈 | 重新选择最新候选 |
| 任意卡 | 收到该好友未读私聊 | 退出大卡候选 | 卡片退出 | 由 Star Light／消息列表承接 |
| 任意卡 | 用户完成 CTA | 标记事件完成 | 卡片退出 | 不再展示该事件 |

## 为什么不用 replacement_threshold

- 第一版已经有明确的业务优先级，不需要再引入难解释的分数差。
- 新事件触发重算，不代表新事件一定替换当前卡。
- P1／P2 是关系动作，P3 是关系机会；实时信号不能天然压过更强的关系动作。
- 如果未来同层机会过多，再基于真实数据决定是否需要模型评分。

## 埋点

- action_candidate_enter：候选进入，记录 crowd_tag、opportunity_type、trigger_event。
- action_candidate_exit：候选退出，记录 completed、expired、unread、permission、dismissed 等原因。
- action_card_show：卡片有效曝光，记录对象、类型、业务日、第几次容器曝光。
- action_card_visible_again：同一实例再次可见，不重复关系曝光。
- action_card_replace：仅在两次 Message 页访问之间对象发生变化时记录；页面停留中不应发生。
- action_card_click：区分 Hi ⭐／Join／View／头像／关闭。
- action_destination_result：记录续星、进房、帖子打开是否真实成功。
- starlight_impression／click：同时记录首屏人数和大卡同人情况，观察大卡挤占损失。

## 两个口径待研发确认

- 连续续星最低门槛：当前建议至少 2 天，服务端可配置；若数据分析使用 3 天，统一改为 3。
- 今日续星完成事件：必须复用星际之旅线上口径，明确一方发星、有效消息或双方动作中的哪一种算完成。

