Files
danyang-match/公益相亲活动与线下服务闭环详细设计.md
T

3372 lines
41 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 丹阳公益婚恋服务平台
# V1.0 公益相亲活动与线下服务闭环详细设计
版本:V1.0
适用范围:微信小程序用户端、公益红娘工作台、运营管理后台、线下活动执行人员
核心目标:把“线上报名—资格审核—现场签到—活动互动—活动后互选—红娘跟进—安全处置”形成完整闭环
---
# 第一章 设计目标
V1.0活动模块不是普通活动报名工具。
它承担三个核心价值:
1. 给线上匹配提供真实线下见面机会
2. 给公益组织提供可控、可审核的服务载体
3. 给长期线上无结果用户提供新的认识渠道
因此活动模块必须同时兼顾:
- 报名简单
- 资格真实
- 名额可控
- 现场好执行
- 用户隐私
- 双向意愿
- 后续跟进
- 安全处置
- 数据可追踪
---
# 第二章 活动闭环总流程
```text
后台创建活动
↓
发布
↓
用户浏览活动
↓
报名
↓
资格校验
↓
人工审核/自动通过
↓
报名成功
↓
活动提醒
↓
现场签到
↓
参加活动
↓
活动结束
↓
反馈
↓
选择“想进一步了解的人”
↓
双方互选
↓
建立Match
↓
聊天
↓
红娘可继续跟进
```
---
# 第三章 活动模块V1范围
必须支持:
```text
活动创建
活动编辑
活动发布
报名时间
人数限制
男女名额
年龄限制
人工审核
报名结果
活动提醒
签到二维码
现场签到
活动反馈
活动后互选
活动数据统计
活动取消
安全处置
```
暂不支持:
```text
活动收费
在线支付
座位票务
复杂排座
抽奖
积分
礼物
直播
视频连麦
群聊
活动商城
```
---
# 第四章 活动类型
V1建议支持统一业务类型:
```text
public_matchmaking
```
前端可以根据运营文案展示:
- 青年公益相亲会
- 七夕公益相亲活动
- 单身青年联谊会
- 公益交友活动
- 小型主题见面会
不要因为名称不同建立多套技术模型。
---
# 第五章 活动组织主体
每个活动必须明确:
```text
主办单位
承办单位
协办单位(可选)
```
例如:
- 妇联
- 工会
- 公益服务中心
- 志愿者组织
后台必须关联:
> organizer_org_id
避免出现无人负责的活动。
---
# 第六章 活动状态机
统一状态:
```text
draft
registration_open
registration_closed
ongoing
ended
cancelled
```
标准流程:
```text
draft
↓ 发布
registration_open
↓ 报名截止
registration_closed
↓ 活动开始
ongoing
↓ 活动结束
ended
```
取消:
```text
draft / registration_open / registration_closed
↓
cancelled
```
---
# 第七章 Draft草稿状态
草稿:
- 用户不可见
- 可编辑全部活动信息
- 不产生通知
- 不允许报名
后台可以:
> 保存草稿
---
# 第八章 发布前校验
活动从draft发布前必须校验:
```text
活动名称
开始/结束时间
报名开始/截止时间
活动地点
主办单位
活动介绍
参与条件
人数上限
报名审核方式
活动规则
联系方式
```
缺少关键字段:
> 不允许发布。
---
# 第九章 时间合法性
必须满足:
```text
registration_start_at
<
registration_end_at
<=
start_at
<
end_at
```
禁止:
> 活动已经开始但报名截止时间还在未来
除非未来明确支持现场报名。
V1默认不支持。
---
# 第十章 活动参与对象
活动可以配置:
```text
最低年龄
最高年龄
目标性别
区域要求(可选)
```
V1不建议设置过多资格规则。
核心仍然:
> 成年、实名、资料审核通过、账号正常。
---
# 第十一章 法定婚龄与活动年龄
活动可以面向:
> 成年单身人士。
但如果活动文案明确为:
> 婚姻登记、近期结婚等强婚姻导向活动
运营需要注意成年与法定婚龄的区别。
系统年龄配置不能错误地把18岁等同于法定登记结婚资格。
---
# 第十二章 活动详情前台必须展示
用户必须快速看到:
```text
活动名称
公益免费
活动时间
活动地点
主办/承办单位
适合人群
报名时间
活动介绍
活动流程
注意事项
报名状态
```
---
# 第十三章 活动费用
当前公益定位:
> V1默认免费。
前端统一:
```text
公益免费
```
如果未来出现必要的成本分摊:
必须另行做产品和合规设计。
V1不预留支付链路。
---
# 第十四章 活动人数模型
支持:
```text
total_limit
male_limit
female_limit
```
例如:
```text
总人数100
男性50
女性50
```
---
# 第十五章 总人数与性别人数关系
如果同时设置:
```text
male_limit = 50
female_limit = 50
total_limit = 100
```
正常。
如果:
```text
male_limit + female_limit > total_limit
```
后台必须提示配置不一致。
---
# 第十六章 不强制所有活动必须男女1:1
公益活动可能根据实际报名池调整。
因此:
> 男女名额可配置。
不要技术上写死50:50。
---
# 第十七章 活动报名入口
用户:
```text
活动首页
↓
活动详情
↓
立即报名
```
报名页面尽量复用用户已有资料。
避免再次要求:
- 姓名
- 年龄
- 性别
- 身高
- 学历
重复填写。
---
# 第十八章 报名资料复用原则
系统直接读取:
```text
实名认证
手机号
年龄
性别
审核状态
个人资料
```
用户只确认:
> 当前资料是否正确。
---
# 第十九章 活动额外字段
只有活动确实需要,才增加:
```text
紧急联系人
特殊备注
```
紧急联系人是否采集:
> 按活动需要配置,不作为所有活动默认必填项。
---
# 第二十章 报名资格前置检查
用户点击“立即报名”前,服务端检查:
```text
已登录
已绑定手机号
已实名
资料审核通过
账号正常
年龄符合
性别符合
活动报名开放
未重复报名
```
---
# 第二十一章 未审核用户报名
如果用户资料尚未审核通过:
不允许报名。
提示:
> 完成资料审核后即可报名参加公益相亲活动。
按钮:
> 查看审核状态
---
# 第二十二章 账号受限用户报名
如果:
```text
account_status != normal
```
根据RiskAction判断。
严重限制状态:
> 禁止报名。
不要只靠活动前端按钮灰掉。
---
# 第二十三章 活动重复报名
数据库唯一:
```text
activity_id + user_id
```
重复提交:
> 返回原报名结果。
不要创建第二条。
---
# 第二十四章 报名审核模式
活动支持:
```text
need_review = true
```
或:
```text
need_review = false
```
---
# 第二十五章 人工审核模式
报名后:
```text
not_applied
↓
pending
↓
approved / rejected
```
用户页面:
> 报名审核中。
---
# 第二十六章 自动通过模式
如果:
```text
need_review = false
```
且资格满足、名额足够:
```text
not_applied
↓
approved
```
直接报名成功。
---
# 第二十七章 V1建议默认人工审核
对于公益婚恋线下活动,建议默认:
> 人工审核。
原因:
- 男女比例控制
- 风险账号检查
- 活动适配
- 线下安全
- 便于组织
小型简单活动以后可配置自动通过。
---
# 第二十八章 Pending是否占名额
建议V1正式采用:
> **Pending不占正式活动名额。**
只有:
```text
approved
```
才占名额。
---
# 第二十九章 Pending过多问题
可能出现:
```text
剩余10个名额
待审核30人
```
这是允许的。
后台审核时显示:
> 当前剩余名额10。
第11个批准时:
返回:
```text
ACTIVITY_FULL
```
---
# 第三十章 审核排序
后台报名列表建议支持:
```text
报名时间
性别
年龄
审核状态
```
默认:
> 按报名时间排序。
不做:
> 资产/颜值排序。
---
# 第三十一章 活动审核员看到的信息
报名审核必要信息:
- 展示名
- 性别
- 年龄
- 丹阳/所在区域
- 实名状态
- 资料审核状态
- 风险状态摘要
不需要:
- 身份证
- 聊天内容
- 详细择偶条件
---
# 第三十二章 报名审核通过
审核员点击:
> 通过
系统事务内:
```text
检查活动状态
↓
检查剩余总名额
↓
检查性别名额
↓
registration → approved
↓
提交
```
事务后:
> 发通知。
---
# 第三十三章 报名拒绝
必须填写原因。
建议标准原因:
```text
活动名额已满
年龄不符合活动范围
资料需要进一步完善
活动参与条件不符合
安全审核未通过
其他
```
---
# 第三十四章 拒绝原因用户可见
用户看到:
> 具体但不过度暴露内部风控的信息。
例如:
正确:
> 本次活动名额已满。
不建议:
> 系统风险评分达到72分。
---
# 第三十五章 报名结果通知
审核通过:
> 你报名的“丹阳青年公益相亲会”已通过审核。
拒绝:
> 你的活动报名未通过,请查看具体说明。
---
# 第三十六章 报名成功页
显示:
```text
报名成功
活动名称
活动时间
活动地点
注意事项
```
按钮:
> 查看我的活动
---
# 第三十七章 我的活动
分类:
```text
待参加
审核中
已结束
```
状态:
```text
审核中
报名成功
已签到
活动已结束
报名未通过
活动已取消
```
---
# 第三十八章 用户取消报名
V1建议支持:
> 活动开始前主动取消报名。
状态:
```text
approved / pending
↓
cancelled
```
---
# 第三十九章 取消报名截止
活动可配置:
```text
cancel_before
```
例如:
> 活动开始前24小时可自主取消。
如果超过:
> 联系工作人员。
V1具体时长建议配置,不写死。
---
# 第四十章 用户取消后释放名额
如果approved取消:
> 立即释放对应名额。
可以允许后续候选审核通过。
---
# 第四十一章 是否建设候补名单
V1建议:
> 不做复杂自动候补系统。
名额释放后:
后台待审核列表继续审核即可。
如果后续活动规模增大再增加:
> waitlist。
---
# 第四十二章 活动提醒
建议至少:
```text
报名通过时
活动前一天
活动当天适当提前
活动取消/重大变更
```
站内通知优先。
微信订阅消息是否发送:
> 依据用户授权及微信规则。
---
# 第四十三章 活动前一天提醒
示例:
> 你报名的“丹阳青年公益相亲会”将于明天下午2点开始,请提前安排时间。
包含:
- 时间
- 地点
- 查看活动
---
# 第四十四章 活动变更
如果重要字段变更:
```text
时间
地点
```
已经approved的用户:
> 必须收到通知。
---
# 第四十五章 活动重大变更确认
如果活动时间大幅调整:
V1可以先:
> 通知用户。
未来可增加:
> 重新确认参加。
V1不必复杂化。
---
# 第四十六章 活动取消
管理员点击取消:
必须:
- 二次确认
- 填写取消原因
- 写审计
- 更新活动状态
- 通知已报名用户
---
# 第四十七章 活动取消后
```text
activity.status = cancelled
```
所有报名记录:
> 保留。
用户:
> 无法签到。
活动:
> 不允许重新开启。
如果要重新举办:
> 复制创建新活动。
---
# 第四十八章 现场签到设计
用户报名通过后,在活动时间范围内显示:
> 签到二维码。
二维码:
> 动态/短时Token。
---
# 第四十九章 签到二维码不能包含
禁止直接编码:
```text
userId
手机号
身份证
```
正确:
```text
signedCheckinToken
```
---
# 第五十章 签到Token内容逻辑
服务端签名内容可包含:
```text
registration_id
activity_id
nonce
expires_at
```
客户端只拿Token。
---
# 第五十一章 Token有效期
建议:
> 5~15分钟。
过期后用户页面自动刷新新的二维码。
---
# 第五十二章 签到人员权限
活动工作人员需要:
```text
activity.checkin
```
可以扫码。
普通红娘不自动拥有签到权限。
---
# 第五十三章 扫码签到流程
```text
工作人员扫码
↓
POST checkin
↓
服务端验证Token
↓
检查活动
↓
检查registration = approved
↓
检查是否已签到
↓
更新checked_in
↓
返回用户简要信息
```
---
# 第五十四章 签到成功页面
工作人员看到:
```text
签到成功
张先生
36岁
手机号尾号 1234
```
足够识别即可。
---
# 第五十五章 重复签到
重复扫码:
> 不报严重错误。
返回:
```text
已签到
签到时间:13:52
```
---
# 第五十六章 手工签到
二维码异常时,后台可:
```text
姓名/手机号搜索
↓
确认用户
↓
手工签到
```
必须记录:
> 操作员。
---
# 第五十七章 现场签到名单隐私
现场工作人员不应该看到:
- 用户完整婚恋档案
- 择偶要求
- 举报记录
- 身份证
只看签到必要信息。
---
# 第五十八章 活动现场编号机制
建议大型活动为用户生成:
```text
活动编号
```
例如:
```text
M018
F023
```
或者中性:
```text
A018
```
具体展示方式按活动运营决定。
---
# 第五十九章 活动编号的价值
现场可以用编号:
- 互动
- 互选
- 反馈
减少:
> 大声公开真实姓名和手机。
---
# 第六十章 不建议现场挂牌完整姓名
更安全方式:
> 名字/昵称 + 编号
例如:
```text
张先生 A018
```
具体根据活动形式。
---
# 第六十一章 活动现场流程模板
系统可给运营提供标准流程:
```text
13:30 工作人员准备
14:00 签到
14:30 开场说明
14:40 破冰互动
15:10 分组交流
16:00 自由交流
16:30 意向填写
16:45 活动说明
17:00 结束
```
这是运营模板。
V1系统不需要做复杂流程引擎。
---
# 第六十二章 活动规则确认
报名时必须确认:
```text
我已阅读并同意本次活动规则
```
活动规则至少说明:
- 文明交流
- 尊重他人
- 禁止骚扰
- 禁止营销
- 谨慎金钱往来
- 不得偷拍/传播他人隐私
- 服从必要现场管理
---
# 第六十三章 现场安全说明
开场建议工作人员统一说明:
> 尊重个人意愿,任何用户均可拒绝进一步交流。
> 不强制交换手机或微信。
> 活动后请通过平台双向意愿机制继续联系。
---
# 第六十四章 禁止现场强制交换联系方式
运营流程不能设计:
> 每个人必须互加微信。
正确:
> 用户自主决定。
最好通过平台:
> 双向互选。
---
# 第六十五章 活动现场突发投诉
工作人员应有快速入口:
```text
活动管理
↓
现场异常
↓
选择用户
↓
记录情况
```
V1可以复用:
> 风控/举报模块。
---
# 第六十六章 现场风险类型
例如:
```text
骚扰
言语冒犯
疑似营销
疑似虚假身份
疑似醉酒/失控
人身安全风险
其他
```
---
# 第六十七章 现场临时处置
工作人员根据严重程度:
- 提醒
- 劝离
- 暂停活动资格
- 提交平台风控
严重涉及现实安全:
> 按现场应急流程处理。
系统不替代现实报警或应急机制。
---
# 第六十八章 现场异常记录
建议:
```text
activity_incidents
```
记录:
```text
activity_id
user_id
incident_type
description
operator_id
created_at
risk_report_id
```
---
# 第六十九章 是否纳入V1数据库
建议纳入。
因为线下活动是平台重要安全场景。
可将其实现为:
> Risk模块的一种source_type = activity_incident。
这样减少新模块。
---
# 第七十章 活动结束判断
活动结束后:
```text
ongoing
↓
ended
```
可由定时任务自动更新。
管理员也可在特殊情况下提前结束。
---
# 第七十一章 活动结束后的用户入口
“我的活动”中显示:
> 活动反馈
按钮。
---
# 第七十二章 活动反馈内容
V1建议:
```text
活动整体满意度
是否愿意再次参加
有没有想进一步了解的人
意见建议
```
---
# 第七十三章 满意度
可以用:
```text
1~5
```
但前端可用:
```text
很满意
满意
一般
不太满意
不满意
```
避免过度数据化。
---
# 第七十四章 意向选择
活动后提供:
> “今天有没有想进一步了解的人?”
用户可以:
```text
有
没有
```
---
# 第七十五章 选择对象范围
用户只能从:
```text
同一活动
+
符合活动互选规则
+
未拉黑
+
账号正常
```
的人中选择。
不能手工输入任意userId。
---
# 第七十六章 互选名单展示方式
建议展示:
```text
活动编号
展示名
年龄
头像
```
例如:
```text
A018 王女士 32岁
```
帮助用户确认。
---
# 第七十七章 活动后意向隐私
A选择B。
B没有选择A:
> B不知道A选择了自己。
这个规则必须严格执行。
---
# 第七十八章 双向互选
当:
```text
A interested B
AND
B interested A
```
系统:
```text
创建Match
source = activity
↓
创建Conversation
↓
通知双方
```
---
# 第七十九章 活动互选生成Match
活动互选本身已经是:
> 双方明确同意进一步了解。
因此不需要再次点一次Like。
可以直接创建:
> Mutual Match。
---
# 第八十章 活动Match通知
建议:
> 你和王女士在本次活动中互相选择,可以开始进一步了解了。
按钮:
> 开始聊天
---
# 第八十一章 多人意向
用户可以选择几个人?
V1建议:
> **最多3位。**
理由:
- 保留一定自主空间
- 避免变成无限海选
- 方便活动后跟进
此数量建议配置化。
---
# 第八十二章 是否只能选1位
不建议强制1位。
一次线下活动中:
> 用户可能对2~3人有进一步了解意愿。
不等于承诺恋爱。
---
# 第八十三章 意向选择截止时间
建议活动结束后开放:
```text
24~72小时
```
例如默认:
> 48小时。
具体配置。
---
# 第八十四章 为什么需要截止
避免几个月后:
> 突然点击活动互选。
活动互选应该反映:
> 当次活动后的近期意愿。
---
# 第八十五章 截止后
不能再修改。
或者:
> 只允许在截止前修改。
截止时系统最终计算双方意向。
---
# 第八十六章 互选结果通知时间
建议:
> 用户提交后可以实时检查双向。
但如果担心“谁先选谁”产生压力:
V1更推荐:
> 截止后统一或双方完成后通知。
技术上只暴露:
> 双向成功。
绝不暴露单向。
---
# 第八十七章 活动后红娘跟进
对于:
- 双向互选
- 用户主动申请
- 长期无结果
公益红娘可以继续服务。
---
# 第八十八章 双向互选后的红娘
默认:
> 不主动介入私人聊天。
可以在后续轻提示:
> 如果需要公益红娘协助,可以申请帮助。
---
# 第八十九章 无互选结果用户
不要显示:
> “你没有被任何人选择。”
这种文案容易造成负面体验。
正确:
> 本次暂未形成双方共同意向。
可以:
> 查看新的推荐 / 申请公益红娘帮助。
---
# 第九十章 无意向用户
用户自己选择:
> 没有想进一步了解的人。
系统不再要求其继续选择。
活动反馈仍正常保存。
---
# 第九十一章 活动后单向意向数据
后台是否能看到?
建议:
> 运营普通人员只看聚合数据。
例如:
```text
提交意向人数
双向互选数量
```
不要默认给普通运营看:
> A单选B但B没选A。
---
# 第九十二章 红娘是否能看单向意向
默认:
> 不看。
除非用户主动申请:
> “请红娘帮我联系活动中某位对象”。
此时只处理该用户授权的具体意向。
---
# 第九十三章 现场交换联系方式后的平台边界
用户现实现场自行交换:
> 平台无法完全禁止。
但活动规则应强调:
> 自主、自愿、谨慎。
平台仍建议:
> 优先通过双向互选+平台聊天继续了解。
---
# 第九十四章 活动参与记录隐私
其他普通用户不能查看:
> 某人参加过哪些公益相亲活动。
这属于私人服务记录。
---
# 第九十五章 用户自己可查看
“我的活动”:
> 可以查看自己的历史。
---
# 第九十六章 红娘可查看活动记录边界
服务用户时:
红娘可以看到必要摘要:
```text
近期参加2次活动
暂无双向互选
```
不必显示所有详细反馈。
---
# 第九十七章 活动数据统计
后台建议:
```text
报名人数
审核通过人数
实际签到人数
签到率
男女比例
年龄分布
反馈提交人数
意向提交人数
双向互选数
活动来源Match数
```
---
# 第九十八章 活动核心漏斗
```text
活动曝光
↓
查看详情
↓
报名
↓
审核通过
↓
签到
↓
反馈
↓
意向
↓
双向互选
↓
聊天
```
---
# 第九十九章 不用“牵手率”包装单次活动
双向互选:
> 只是愿意进一步了解。
不能宣传成:
> 成功牵手。
真正成功牵手仍走后续双方确认。
---
# 第一百章 活动成功指标
短期:
```text
报名率
到场率
反馈率
双向互选率
```
中期:
```text
活动来源聊天启动率
正在了解人数
```
长期:
```text
活动来源成功牵手数
```
---
# 第一百零一章 到场率
```text
签到人数
/
审核通过人数
```
用于活动运营改进。
---
# 第一百零二章 男女比例
用于:
> 下一场活动招募调整。
不能用于:
> 对不同性别收费。
当前V1永久免费。
---
# 第一百零三章 年龄分布
可以按段:
```text
18~24
25~29
30~34
35~39
40~49
50+
```
后台统计。
具体活动文案应避免让用户形成等级感。
---
# 第一百零四章 活动取消率
如果某用户多次报名不来:
是否处罚?
V1建议:
> 只做轻量运营提示。
不要直接封号。
---
# 第一百零五章 多次无故缺席
可以形成:
```text
activity_no_show_count
```
作为活动管理参考。
未来可:
> 限制高需求活动报名。
但V1不建议自动严厉处罚。
---
# 第一百零六章 No-show与风控分离
没来活动:
> 不等于风险用户。
只是:
> 活动运营行为。
不要加入诈骗风险分。
---
# 第一百零七章 活动候补运营
V1人工处理:
> 有名额释放后继续审核待审核用户。
无需自动候补通知系统。
---
# 第一百零八章 活动创建权限
权限:
```text
activity.create
```
活动编辑:
```text
activity.edit
```
活动发布:
```text
activity.publish
```
报名审核:
```text
activity.registration.review
```
签到:
```text
activity.checkin
```
---
# 第一百零九章 活动取消权限
建议单独:
```text
activity.cancel
```
因为影响较大。
必须审计。
---
# 第一百一十章 活动角色分工
建议:
### 活动管理员
创建、报名审核、数据管理。
### 现场工作人员
签到、现场异常记录。
### 公益红娘
必要时现场/后续婚恋服务。
三个角色权限不要自动混为一体。
---
# 第一百一十一章 活动现场工作人员临时账号
如果使用志愿者:
建议:
> 创建独立低权限账号。
不要把管理员密码告诉志愿者。
---
# 第一百一十二章 临时账号有效期
可以设置:
```text
活动当天有效
```
活动结束后自动停用或人工停用。
---
# 第一百一十三章 活动人员数据权限
现场志愿者只能查看:
```text
报名名单必要字段
签到状态
活动编号
```
不能进入:
> 用户管理后台。
---
# 第一百一十四章 活动现场网络异常
必须有降级方案。
如果现场网络差:
后台可以:
> 搜索报名名单后手工签到。
如果完全离线:
V1可准备:
> 最小脱敏纸质/离线名单作为应急。
---
# 第一百一十五章 应急名单原则
只包含:
```text
活动编号
展示名
手机号后四位
```
必要时:
> 性别/年龄。
不能打印身份证。
活动结束:
> 按内部规则销毁。
---
# 第一百一十六章 现场二维码设备要求
工作人员可以使用:
> 手机Web后台/微信扫码工作页面。
不需要专用硬件。
降低活动执行成本。
---
# 第一百一十七章 活动签到统计实时显示
后台:
```text
应到 96
已到 83
未到 13
```
支持工作人员掌握现场情况。
---
# 第一百一十八章 男女签到实时数
可以显示:
```text
男性已到 41/48
女性已到 42/48
```
用于现场组织。
---
# 第一百一十九章 活动开始后迟到
只要活动仍允许签到:
> 可以签到。
建议配置:
```text
checkin_end_at
```
V1可默认:
> 活动结束前。
---
# 第一百二十章 提前签到
可配置:
例如:
> 活动开始前60分钟允许签到。
服务端判断。
---
# 第一百二十一章 签到范围
V1不做GPS围栏。
原因:
- 不必要定位
- 隐私增加
- 现场工作人员扫码已足够
---
# 第一百二十二章 活动地址导航
可以使用:
> 用户主动打开地图。
如果接地图服务:
> 仅用于显示活动地点。
不持续采集用户位置。
---
# 第一百二十三章 活动现场照片
活动组织方可能拍摄活动照片。
这和用户婚恋资料照片不是同一用途。
必须在活动规则中:
> 明确告知是否拍摄和可能用途。
---
# 第一百二十四章 宣传照片默认原则
不要默认:
> 用户参加活动就授权公开宣传。
如果需要公开个人可识别照片:
> 应取得相应授权。
---
# 第一百二十五章 不愿出镜
活动流程应允许:
> 用户表达不愿用于公开宣传。
运营现场做好标识/区域管理。
系统可后续增加:
```text
photo_publicity_consent
```
V1如实际有宣传拍摄需求建议纳入报名确认。
---
# 第一百二十六章 活动反馈匿名性
对活动满意度:
> 运营统计可匿名汇总。
工作人员不必默认看到:
> 某用户给了2分。
涉及具体投诉:
> 再进入反馈/举报处理。
---
# 第一百二十七章 普通意见与安全举报分离
反馈:
> 活动流程不好。
举报:
> 某用户骚扰我。
两个入口不同。
安全问题必须进入:
> Risk流程。
---
# 第一百二十八章 红娘现场服务
活动现场可有:
> 公益红娘咨询台。
用户自愿咨询:
- 择偶条件
- 活动对象
- 后续服务
红娘不应:
> 公开点评某用户条件。
---
# 第一百二十九章 红娘现场跟进记录
如果形成正式服务:
> 创建MatchmakerService。
不要用纸质笔记长期保存敏感婚恋资料。
---
# 第一百三十章 活动与推荐系统协同
活动报名数据不直接提高用户匹配分。
但活动后:
> 双向互选
是明确关系信号。
---
# 第一百三十一章 不因“经常参加活动”提高质量分
活动活跃度:
> 不等于更优质。
所以不进入基础MutualScore。
---
# 第一百三十二章 活动对象展示算法
活动后互选列表:
不需要再按全平台算法强排序。
可以:
- 按活动编号
- 按用户互动记录(如果未来有)
- 基础推荐程度轻量排序
V1建议:
> 简单、可识别优先。
---
# 第一百三十三章 是否现场提前推荐座位对象
V1不做复杂智能排桌。
如果运营需要:
> 人工分组。
未来再增加:
> 系统辅助分组。
---
# 第一百三十四章 为什么V1不做智能排桌
需要考虑:
- 性别
- 年龄
- 条件
- 座位
- 轮换
- 现场临时缺席
复杂度很高。
V1核心先验证:
> 活动报名与互选闭环。
---
# 第一百三十五章 活动用户状态变更
如果用户报名后:
> 账号被封禁。
系统:
- 活动报名资格失效
- 通知活动管理员
- registration可变为cancelled_by_platform或内部状态
---
# 第一百三十六章 是否新增cancelled_by_platform
建议Registration状态扩展:
```text
pending
approved
rejected
cancelled
cancelled_by_platform
```
便于区分:
> 用户自己取消
和:
> 平台安全原因取消。
---
# 第一百三十七章 用户隐私说明
因安全原因取消活动资格:
前台只展示:
> 当前报名资格已取消,请查看账号状态或联系工作人员。
不要暴露内部Risk详情。
---
# 第一百三十八章 活动开始前资料变化
例如用户婚姻状态发生重要变化并进入重新审核。
如果活动已approved:
建议:
> 暂停其活动资格,等待审核。
活动管理员收到:
> 资格状态变化提醒。
---
# 第一百三十九章 用户注销
如果未开始活动已报名:
根据之前规则:
> 自动取消报名并释放名额。
---
# 第一百四十章 活动数据表补充建议
在前面数据库基础上建议增加:
```text
activity_rules_version
activity_checkin_config
activity_interest_config
activity_incidents
```
但V1可简化为activities中的配置字段+RiskEvent。
---
# 第一百四十一章 建议新增字段
activities可增加:
```text
cancel_deadline_at
checkin_start_at
checkin_end_at
interest_submit_deadline_at
max_interest_selections
```
---
# 第一百四十二章 Registration可增加
```text
cancelled_at
cancel_reason
cancel_source
```
cancel_source:
```text
user
admin
risk
system
```
---
# 第一百四十三章 ActivityFeedback扩展
建议:
```text
satisfaction
join_again
comment
submitted_at
```
意向最好不要只放单个:
```text
interested_user_id
```
因为已经建议最多3人。
---
# 第一百四十四章 活动意向数据模型修正
建议单独表:
```text
activity_interests
```
字段:
```text
id
activity_id
user_id
target_user_id
created_at
```
唯一:
```text
activity_id + user_id + target_user_id
```
---
# 第一百四十五章 为什么单独表更合理
因为一个用户可能选择:
> 最多3人。
原先activity_feedback中的单个interested_user_id:
> 无法满足。
因此V1数据库设计后续实现时应采用:
```text
activity_feedback
+
activity_interests
```
---
# 第一百四十六章 activity_interests安全约束
必须:
```text
user_id != target_user_id
```
并且双方:
> 都是该活动合法参与者。
---
# 第一百四十七章 双向互选查询
判断:
```text
A → B exists
AND
B → A exists
```
则:
> Mutual Activity Interest。
使用唯一Match创建逻辑。
---
# 第一百四十八章 活动来源Match去重
如果A、B本来已经有active Match:
活动互选:
> 不创建第二个Match。
只记录:
> activity mutual interest。
---
# 第一百四十九章 已有Match用户活动互选
系统可以提示:
> 你们已经互相喜欢,可以继续在聊天中了解。
无需重复通知过多。
---
# 第一百五十章 已Unmatch的双方活动再次互选
是否允许重新建立Match?
V1建议:
> 可以,但需要明确作为新的双方意愿。
因为线下再次见面后:
> 双方都重新选择对方。
数据库原matches设计若一pair只一条:
可将:
```text
unmatched → active
```
但必须:
- 记录reactivated_at
- 保留历史
更推荐未来有MatchHistory。
V1可以先采用:
> 重新激活原Match + Audit/Event。
---
# 第一百五十一章 Block仍然最高优先级
如果双方活动互选但存在:
> 任一方Block。
系统:
> 不建立Match。
理论上被Block方也不应该出现在互选名单。
---
# 第一百五十二章 活动结束后数据同步
需要更新:
- 活动状态
- 我的活动
- 反馈入口
- 互选入口
- 统计
- 红娘服务提示
---
# 第一百五十三章 活动日报/复盘
活动结束后后台可生成简单汇总:
```text
报名 108
通过 96
签到 87
到场率 90.6%
提交反馈 72
提交意向 46
双向互选 11对
```
---
# 第一百五十四章 不自动生成宣传口径
这些内部数据不能直接变成:
> “牵手成功11对”。
正确:
> 形成11组双方进一步了解意向。
---
# 第一百五十五章 活动复盘备注
管理员可以填写:
```text
现场情况
问题
下次改进
```
用于公益组织内部运营。
---
# 第一百五十六章 是否需要活动模板
V1技术上可以提供:
> 复制活动。
不建设复杂模板中心。
例如:
> 复制上一场活动 → 修改日期地点。
---
# 第一百五十七章 活动复制
复制:
- 活动介绍
- 人数配置
- 规则
- 年龄范围
不复制:
- 报名人员
- 签到
- 反馈
- 互选
---
# 第一百五十八章 后台活动操作审计
必须记录:
```text
创建
修改
发布
取消
审核报名
手工签到
修改关键时间
```
---
# 第一百五十九章 活动安全日志
需要重点记录:
- 被风险取消资格
- 现场异常
- 举报
- 劝离
- 紧急情况
---
# 第一百六十章 活动管理员不能处理平台级封禁
活动管理员可以:
> 提交风险事件。
真正封禁:
> 由风控权限角色处理。
避免现场人员权限过大。
---
# 第一百六十一章 现场紧急联系人
如果实际活动确实需要:
> 可在该活动报名中收集。
使用目的:
> 现场紧急情况。
不能:
> 以后拿来营销或红娘联系。
---
# 第一百六十二章 紧急联系人数据生命周期
活动结束且安全处理需求结束后:
> 应按数据保留策略及时清理。
不应永久留在用户婚恋档案。
---
# 第一百六十三章 紧急联系人不是用户Profile字段
不要写入:
```text
user_profiles
```
应属于:
> activity_registration scoped data。
---
# 第一百六十四章 活动报名协议版本
建议记录:
```text
activity_rule_version
agreed_at
```
如果不同活动规则不同:
> 方便追溯。
---
# 第一百六十五章 活动规则变更
已报名后若重大修改规则:
> 需要重新通知。
是否要求重新确认:
> 视变更重要程度。
---
# 第一百六十六章 活动数据权限矩阵
| 数据 | 用户本人 | 红娘 | 活动管理员 | 签到志愿者 | 风控 |
|---|---:|---:|---:|---:|---:|
| 自己报名 | 是 | 必要时 | 是 | 简要 | 必要时 |
| 报名名单 | 否 | 否/有限 | 是 | 简要 | 必要时 |
| 身份证 | 否 | 否 | 否 | 否 | 特殊权限 |
| 签到状态 | 自己 | 有限 | 是 | 是 | 必要时 |
| 活动反馈 | 自己 | 默认否 | 聚合/必要 | 否 | 必要时 |
| 单向意向 | 自己 | 默认否 | 默认否 | 否 | 必要时 |
| 双向互选 | 自己 | 服务必要 | 聚合 | 否 | 必要时 |
---
# 第一百六十七章 活动前端P0页面
```text
活动首页
活动详情
报名确认
报名成功
我的活动
签到二维码
活动反馈
活动互选
互选成功
```
---
# 第一百六十八章 后台P0页面
```text
活动列表
创建/编辑活动
报名管理
报名审核
签到管理
活动数据
现场异常
```
---
# 第一百六十九章 活动详情按钮状态
```text
registration_open + not_applied
→ 立即报名
pending
→ 报名审核中
approved
→ 报名成功
rejected
→ 查看原因
full
→ 报名已满
registration_closed
→ 报名已结束
cancelled
→ 活动已取消
```
---
# 第一百七十章 活动结束按钮
如果用户已签到:
```text
填写活动反馈
```
如果已反馈且互选期开放:
```text
查看/修改我的意向
```
---
# 第一百七十一章 活动反馈不强制
用户不填写:
> 不影响账号。
不要为了数据完整性强制。
---
# 第一百七十二章 用户互选也不强制
用户可以:
> 没有想进一步了解的人。
系统必须尊重。
---
# 第一百七十三章 互选成功页面
```text
♥
你们在本次活动中互相选择
[张先生头像] [王女士头像]
可以开始进一步了解了
[开始聊天]
稍后再聊
```
与线上Mutual Match视觉保持一致。
---
# 第一百七十四章 活动后无结果页面
推荐:
```text
感谢你的参与
本次暂未形成双方共同意向。
可以继续查看平台推荐,
或申请公益红娘帮助。
[看看新的推荐]
[申请红娘帮助]
```
---
# 第一百七十五章 不显示“没人选你”
这是明确UX红线。
---
# 第一百七十六章 活动运营不做竞争排名
不展示:
- 最受欢迎男嘉宾
- 最受欢迎女嘉宾
- 收到多少选择
- 人气榜
- 心动榜
保持公益、尊重、非娱乐化。
---
# 第一百七十七章 活动现场不做“公开表白墙”
V1不建议。
避免:
- 隐私暴露
- 尴尬
- 社交压力
---
# 第一百七十八章 活动数据也不做个人受欢迎度
后台不需要:
```text
某人被选择8次
```
作为“高价值用户”指标。
只在必要的互选计算中使用单向记录。
---
# 第一百七十九章 活动质量评价
更适合关注:
```text
到场率
用户满意度
双向互选率
后续聊天率
安全事件数
```
---
# 第一百八十章 活动风控指标
后台:
```text
活动举报数
现场异常数
被劝离人数
高风险报名拦截数
```
---
# 第一百八十一章 活动异常率
如果某场活动:
> 举报明显较多。
运营需要复盘:
- 场地管理
- 参与人筛选
- 活动流程
- 工作人员配置
---
# 第一百八十二章 线下安全应急联系人
每场活动后台建议配置:
```text
活动负责人
联系电话
现场安全负责人
```
用户详情中可显示:
> 活动联系电话。
---
# 第一百八十三章 不在公开活动页展示工作人员私人手机号
如可行:
> 使用工作号码。
若只能使用个人手机号:
也应评估是否需要全部公开。
---
# 第一百八十四章 V1活动服务闭环最终架构
```text
线上用户
│
↓
Activity Browse
│
↓
Registration
│
↓
Eligibility Check
│
↓
Manual Review
│
↓
Approved
│
↓
Reminder
│
↓
QR Check-in
│
↓
Offline Event
│
├── Risk Incident → Risk Service
│
↓
Feedback
│
↓
Activity Interest
│
↓
Mutual?
├── No → 继续推荐/红娘
│
└── Yes
↓
Match
↓
Conversation
↓
Getting to Know
```
---
# 第一百八十五章 开发优先级
## P0
```text
Activity CRUD
发布/取消
报名
资格检查
人工审核
人数控制
我的活动
二维码签到
后台签到
活动反馈
```
---
## P1
```text
活动互选
activity_interests
双向互选生成Match
活动提醒
现场异常关联Risk
用户取消报名
```
---
## P2
```text
活动复盘
更完善统计
复制活动
临时工作人员账号
更多运营配置
```
注意:
活动互选属于V1完整闭环的重要模块,虽然排在实现P1,但必须在V1正式上线范围内完成。
---
# 第一百八十六章 并发测试
必须测试:
1. 多人同时抢最后名额
2. 两个审核员同时批准最后名额
3. 用户重复报名
4. 用户取消与管理员批准同时发生
5. 重复扫码签到
6. A、B同时互选
7. Activity刚取消用户同时报名
---
# 第一百八十七章 权限测试
必须测试:
- 志愿者查看完整用户资料
- 活动管理员查看聊天
- 红娘直接批准活动报名
- 无权限人员取消活动
- 普通用户访问他人签到Token
- 用户修改activityId查看他人报名
必须全部正确拒绝。
---
# 第一百八十八章 隐私测试
必须确认:
- 用户看不到他人报名信息
- 用户看不到单向意向
- 运营人员默认看不到单向意向详情
- 签到人员看不到身份证
- 紧急联系人不会进入普通Profile
- 已注销用户不继续公开活动资料
---
# 第一百八十九章 活动业务验收场景一
活动:
```text
男50
女50
```
当前:
```text
男49
女40
```
再批准一名男性:
> 成功。
再批准下一名男性:
> GENDER_QUOTA_FULL。
即使总人数仍未到100。
---
# 第一百九十章 活动业务验收场景二
用户32岁,活动范围:
```text
25~30
```
报名:
> AGE_NOT_ELIGIBLE。
年龄由实名认证birth_date计算。
---
# 第一百九十一章 活动业务验收场景三
用户报名pending。
期间活动取消。
审核员再点击通过:
> ACTIVITY_NOT_OPEN。
---
# 第一百九十二章 活动业务验收场景四
A选择B。
B没选A。
最终:
> 不建立Match。
B:
> 不知道A单向选择。
---
# 第一百九十三章 活动业务验收场景五
A选择B。
B选择A。
双方:
> 自动形成activity来源Match。
聊天立即可用。
---
# 第一百九十四章 活动业务验收场景六
A已Block B。
即使由于旧缓存A的互选页面出现B:
提交时服务端:
> 拒绝该意向。
并刷新名单。
---
# 第一百九十五章 活动业务验收场景七
活动用户发生严重骚扰。
现场工作人员:
> 提交风险事件。
风控员:
> 处理账号。
账号限制实时影响:
- 活动资格
- 匹配
- 聊天
---
# 第一百九十六章 线下服务核心原则
V1.0必须坚持:
> **活动不是单纯把人拉到现场。**
> **报名必须有资格审核。**
> **现场只使用完成任务必要的信息。**
> **不强迫用户交换联系方式。**
> **活动后的意向必须双向。**
> **单向选择必须保密。**
> **互选只是进一步了解,不等于成功牵手。**
> **现场风险能够直接进入平台风控闭环。**
> **公益红娘可以继续服务,但不干预私人沟通。**
---
# 第一百九十七章 最终设计原则
整个公益相亲活动闭环最终要达到:
> **线上先把身份和资格做好,线下把见面和体验做好,活动后把双方意愿保护好,再把真正互相愿意的人自然接回平台继续沟通。**
最终形成:
> **线上筛选 → 公益活动见面 → 双向互选 → 平台沟通 → 公益红娘辅助 → 成功牵手**
这才是本平台区别于单纯“线上刷对象”和单纯“线下办相亲会”的核心服务闭环。