wechat-robot-skills/skills/send-mention-message/SKILL.md

113 lines
4.7 KiB
Markdown
Raw 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.

---
name: send-mention-message
description: "发送艾特/@/提及消息技能。当需要在当前群聊中艾特某个人或某些人,或用户要求你艾特某个/某些群成员时使用。"
argument-hint: "需要 mention可选 content。mention 可重复传入多个昵称或备注。"
---
# Send Mention Message Skill
## 描述
这是一个在当前微信群聊中发送艾特消息的技能。
技能脚本位于 `scripts/send_mention_message.py`,会根据用户提供的昵称或备注在当前群成员表里查找未退群成员,得到微信 ID 后调用机器人客户端文本消息接口发送带 `at` 数组的消息。
## 触发条件
- 需要艾特、@、提及某个群成员或多个群成员。
- 用户要求「帮我艾特下 xxx」「@ 一下 xxx」「提一下 xxx 和 yyy」。
- 需要在群聊里点名提醒某人。
私聊场景一般不触发本技能;脚本会校验 `ROBOT_FROM_WX_ID` 必须是群聊 ID。
## 入参规范
```json
{
"type": "object",
"properties": {
"mention": {
"type": "string",
"description": "要艾特的群成员昵称或备注。按用户原话提取,不要改写。"
},
"mentions": {
"type": "array",
"items": {
"type": "string"
},
"description": "要艾特的多个群成员昵称或备注。"
},
"content": {
"type": "string",
"description": "要发送的文本内容,可选。只艾特不附加正文时可以为空字符串。"
},
"ended": {
"type": "boolean",
"description": "是否结束当前对话。当 Agent 已经完成艾特和消息发送、要说的话已说完、要做的事已做完时,设置为 true。"
}
},
"anyOf": [{ "required": ["mention"] }, { "required": ["mentions"] }],
"additionalProperties": false
}
```
对应命令行参数:
- `--mention <昵称或备注>` 必填或可重复传入
- `--mentions <JSON数组>` 可选,用于一次传入多个昵称或备注
- `--content <文本内容>` 可选
- `--ended` 可选标志。当 Agent 已完成艾特和消息发送、要说的话已说完时传入。
## 成员匹配规则
1. 只在当前群聊 `ROBOT_FROM_WX_ID` 对应的 `chat_room_members` 记录中查找。
2. 只匹配 `is_leaved` 为空或 `0` 的成员,已经退群的成员不能被艾特。
3. 使用用户给出的昵称或备注做模糊查询,字段优先级为 `remark`,然后是 `nickname`
4. 查询到候选成员后,优先选择 `remark` 完全等于输入值的成员。
5. 如果没有完全相等的 `remark`,选择 `nickname` 完全等于输入值的成员。
6. 如果没有完全相等结果,选择第一个 `remark` 包含输入值的成员。
7. 如果仍未命中,选择第一个 `nickname` 包含输入值的成员。
## 执行步骤
1. 判断用户是否需要在群聊中艾特某人或某些人。
2. 从用户输入中提取要艾特的昵称或备注,写入 `mention``mentions`;如用户要求附带正文,写入 `content`
3. 在该技能目录执行脚本,例如:
```bash
python3 scripts/send_mention_message.py --mention '张三' --content '看一下这个'
```
当 Agent 认为任务已完成、对话可以结束时,加上 `--ended` 标志:
```bash
python3 scripts/send_mention_message.py --mention '张三' --content '看一下这个' --ended
```
4. 脚本会查询数据库表 `chat_room_members`,找到当前群内未退群成员的微信 ID。如果数据库没查询到这个人你可能需要查询你的记忆看看有没有一个人的别称叫这个名字。
5. 脚本调用客户端接口 `POST http://127.0.0.1:{ROBOT_WECHAT_CLIENT_PORT}/api/v1/robot/message/send/text` 发送消息,请求体包含 `to_wxid`、`content`、`at`。
## 校验规则
- `ROBOT_FROM_WX_ID` 必须是群聊 ID通常以 `@chatroom` 结尾。
- 至少提供一个 `mention`
- 每个要艾特的人都必须能在当前群内匹配到未退群成员。
- 如果同一个微信 ID 被多个昵称命中,只会艾特一次。
## 依赖安装
- 脚本首次运行时会自动创建虚拟环境并安装依赖,无需手动执行。
- 如需手动重新安装,可执行:`python3 scripts/bootstrap.py`
## ended 行为
-`--ended` 传入时,脚本在正常输出末尾追加打印独立一行 `ended`
- `ended` 字符串必须位于输出的最末尾,前面不能跟其他字符。
- Agent 检测到输出以 `ended` 结尾时,会自动退出 Agent 循环。
## 回复要求
- 成功时,脚本输出「艾特消息发送成功」,表示消息已通过客户端接口直接发送,无需 AI 智能体再做额外处理。
- 如果传入 `--ended`,输出末尾会追加 `ended`Agent 会自动结束对话。
- 失败时,返回脚本输出的具体错误信息。