Install
openclaw skills install perfectmatch面向 OpenClaw 的社交雷达 MVP Skill。用于指导 Agent 先用简短话术介绍产品,再完成用户接入、默认邀请码入驻 Space、先起草并展示画像给用户确认、确认后写入平台、读取 agent.md 做首次推荐、按用户设定决定后续是否继续扫描新增成员、发起平台内私信,并通过平台 inbox 轮询拉取新...
openclaw skills install perfectmatch社交雷达是一个 Space 内社交推荐工具,不做全网匹配。 你的目标是让用户完成入驻、确认公开画像、收到首次推荐,并在用户确认后发起平台内私信。
在调用任何主链接口前,只用 1 到 2 句话说明:
不要写长介绍,不要写“我会帮你做什么”的清单。
/api/auth/verify、/api/messages、/login、/messages、/profile、/。https://api.clawspace.top/ 根路径页面;只使用明确的 /api/... 接口和 agent.md。先调用:
POST /api/openclaw/connect拿到:
agent_session_token后续用户态请求统一带:
Authorization: Bearer <agent_session_token>
仅用于运营排查:
x-operator-key: <OPERATOR_API_KEY>
只在这些接口使用:
GET /api/spacesGET /api/spaces/:spaceId/membersGET /api/openclaw/messagesPOST /api/openclaw/connect
请求示例:
{
"openclaw_user_id": "oc_test_new_user",
"nickname": "TestUser"
}
规则:
openclaw_user_id 只需要是稳定、非空的字符串,不需要特殊格式。400。agent_session_token 后,后续所有用户态请求都使用它。在加入 Space 之前,只问这一个问题:
你有什么特别想认识的人吗?可以告诉我,没有的话我会自己来判断。不要额外问:
默认处理:
daily 处理POST /api/spaces/join
默认直接使用 DEV2026 作为当前测试环境的邀请码,不要在开场先问用户“有没有邀请码”。
只有在 join 失败、邀请码失效,或用户明确追问时,才向用户解释当前测试邀请码是 DEV2026。
请求示例:
{
"invite_code": "DEV2026",
"preference_text": "想认识做 AI 产品和前端的人",
"recommendation_frequency": "daily"
}
成功后你会拿到:
space.idmember.statusmarkdown_url规则:
recommendation_frequency 只能是 daily、manual、offDEV2026,不要把“邀请码”当成用户问题的一部分DEV2026markdown_url 是后续读取上下文的主要入口加入成功后,先不要立刻上传画像。 先在本地生成一版待确认画像,至少包含:
name,默认使用当前昵称summarytagsrecent_focusfun_fact展示给用户时,要把具体内容完整列出来,例如:
我先帮你起草了一版公开画像,你看看要不要这样写:
- 名称:……
- 画像总结:……
- 标签:……
- 近期在做:……
- 有趣亮点:……
如果你愿意,我就按这版提交;如果你想改,我先帮你改完再上传。
规则:
先调用:
POST /api/profiles/drafts再调用:
POST /api/profiles/confirm请求示例:
{
"space_id": "uuid",
"summary": "最近在做 AI 小工具,也喜欢线下交流",
"tags": ["AI", "前端", "产品"],
"recent_focus": "在做一个知识整理 Agent",
"fun_fact": "会把待办事项写成歌词",
"source_payload": {
"public_signals": ["AI 小工具", "知识整理"]
}
}
{
"draft_id": "uuid",
"summary": "最近在做 AI 小工具,也喜欢线下交流",
"tags": ["AI", "前端", "产品"],
"recent_focus": "在做一个知识整理 Agent",
"fun_fact": "会把待办事项写成歌词",
"visibility": "visible"
}
规则:
summary 必填tags 必须是非空数组visibility = visible 的画像才会出现在 agent.mdGET /api/spaces/:spaceId/agent.md?token=...
把 agent.md 当成当前 Space 的唯一可信公开上下文。它包含:
规则:
spaces/join 获取新的 markdown_urlagent.md 里的每个候选人都会带 用户ID。如果你要上报 success,必须使用该 用户ID 作为 recommended_user_id,不要根据昵称猜,也不要尝试走 operator 接口补查在用户画像确认成功后:
agent.mdno_matchPOST /api/recommendations/report
成功推荐示例:
{
"space_id": "uuid",
"recommendation_date": "2026-03-20",
"status": "success",
"recommended_user_id": "target-user-uuid",
"reason": "你们最近都在做 AI 小工具,而且都愿意线下交流",
"icebreaker": "看到你也在做 AI 小工具,最近最满意的一个功能是什么?",
"source_type": "agent"
}
无合适对象示例:
{
"space_id": "uuid",
"recommendation_date": "2026-03-20",
"status": "no_match",
"reason": "今天暂时没有发现特别值得你主动打招呼的人。",
"source_type": "agent"
}
规则:
no_match等用户看完第一次推荐结果后,再问后续推荐频率:
daily:每天留意新加入的人,判断是否需要推荐manual:只在用户主动要求时推荐off:不再主动推荐这里的重点不是“每天一定推荐一次”,而是“每天检查是否有新加入的人,再判断是否值得推荐”。
在用户确认了后续推荐频率之后,再直接这样问:
`如果后续有人给你发私信,你希望我怎么提醒你?我现在支持这三种方式:
规则:
有了推荐结果后,不要直接替用户发消息。 先把推荐对象、推荐理由、破冰建议告诉用户,然后明确询问:
只有用户明确说“可以发”之后,才进入下一步。
POST /api/messages/trigger
请求头:
Authorization: Bearer <agent_session_token>
Idempotency-Key: <稳定且唯一的请求键>
请求示例:
{
"message_id": "msg_20260320_001",
"space_id": "uuid",
"recipient_user_id": "target-user-uuid",
"channel": "openclaw_im",
"content": "你好,看到你最近也在做 AI 小工具,想和你聊聊。",
"recommendation_log_id": "uuid"
}
规则:
message_id 必须全局唯一message_id 重复提交时,应视为幂等请求channel 只能是 openclaw_im、webhookpending 代表消息已经进入平台 inbox,等待接收方 OpenClaw 轮询收取接收方 OpenClaw 主动调用:
GET /api/openclaw/inbox查询示例:
GET /api/openclaw/inbox?limit=20
Authorization: Bearer <agent_session_token>
规则:
当接收方 OpenClaw 已成功拉到并准备展示消息后,调用:
POST /api/openclaw/inbox/ack请求示例:
{
"message_ids": ["msg_20260320_001"]
}
规则:
ack 后消息状态会从 pending 进入 sent当接收方用户真的看过这条消息后,再调用:
POST /api/messages/:messageId/read规则:
read 是平台内私信状态,不等于外部渠道送达状态如果用户允许继续推荐:
daily:每天检查一次 Space 是否有新增成员,再判断是否值得推荐manual:只在用户主动要求时推荐off:不再主动推荐在 daily 模式下:
daily 的含义就是每天主动检查一次,不是等用户问了才检查平台不负责把提醒真正发到飞书、QQ 或其他外部渠道。 这里只要记住:
immediate、digest、daily 这类频率,你就应该按该频率主动查询,而不是被动等用户来问以下接口可用于排查,但不是用户主链的一部分:
GET /api/spacesGET /api/spaces/:spaceId/membersGET /api/spaces/:spaceId/recommendations/latestGET /api/messages/:messageIdGET /api/openclaw/inboxGET /api/openclaw/messagesapi_base: https://api.clawspace.topspace_id: ee432476-c04d-4566-9b20-aa2f634aa578invite_code: DEV2026(内部默认测试值,不要在开场先问用户是否有邀请码)你的目标不是“把所有接口都调一遍”,而是让用户感受到: