| name | tasknya-qq-broadcast |
| version | 1.0.0 |
| description | 通过 TaskNya 的通用 Webhook 广播 QQ 消息。用户给出 Astrbot 的 UMO、webhook 令牌和 URL,指定要广播的内容,调用 Astrbot push_lite 插件发送。当用户需要向 QQ 群/好友发送消息、广播通知、推送项目状态时使用。 |
TaskNya QQ 消息广播
通过 TaskNya 的通用 Webhook 机制,调用 Astrbot push_lite 插件向 QQ 群/好友广播消息。
配置文件
配置路径:$TASKNYA_QQ_BROADCAST_CONFIG(环境变量,已写入 ~/.zshrc)
{
"webhook": {
"url": "Astrbot push_lite 的 webhook URL",
"token": "webhook 令牌"
},
"targets": {
"别名": "UMO 标识符"
}
}
- webhook.url:Astrbot push_lite 的 HTTP 接收端地址
- webhook.token:Bearer 认证令牌
- targets:常用目标的别名到 UMO 的映射(UMO 由 Astrbot 的
/sid 命令获取)
流程
Step 1: 收集信息
向用户确认以下内容(如缺失):
- 目标 UMO:发送给谁。可以是:
- 配置文件中已有的别名(读取 config.json 的
targets)
- 用户直接提供的 UMO(格式:
BotName:GroupMessage:GroupID 或 BotName:FriendMessage:UserID)
- Webhook URL:如果 config.json 中为空,向用户索取
- 发送内容:用户要广播的具体内容
如果用户提到了配置中已有的别名,直接使用对应的 UMO,无需再问。
Step 2: 匹配模板并构建消息体
根据用户要发送的内容,优先匹配以下预设模板。匹配到后自动填写相关内容字段。
模板匹配规则
| 用户意图 | 匹配关键词 | 使用模板 |
|---|
| 同步项目状态/进展 | 项目、同步、进展、状态、周报 | 项目同步模板 |
| CI/CD/部署通知 | 部署、CI、CD、上线、流水线、构建 | API 触发模板 |
| GPU/训练完成 | GPU、训练、显卡、功耗、模型训练 | GPU 监控模板 |
| 文件变化通知 | 文件、新增、删除、目录变化 | 文件检测模板 |
| 日志/告警通知 | 日志、告警、错误、关键词、报警 | 日志检测模板 |
| HTTP/服务状态 | HTTP、接口、服务、端点、健康检查 | HTTP 轮询模板 |
| 以上都不匹配 | — | 通用消息模板 |
预设模板
项目同步模板 — 用于同步项目信息、进展详情。由两大部分组成:
======== 项目同步 ========
【项目总体】
项目: {项目名称}
类型: {项目类型,如视频制作}
制作人: {制作人}
起止: {开始日期} → {结束日期}
进度: {百分比}%({当前阶段})
————————————
【本次推送】
{以下二选一或组合}
方式A — 公告板动态:
📅 {发布日期} | 👤 {发布人}
🔵 {任务名称}({执行人})
截止: {截止日期} | 工期: {天数}天
内容: {动态内容}
上下游: ⬆️ {上游} → ⬇️ {下游}
方式B — 用户手动内容:
{用户提供的文字内容,保持原始排版}
————————————
📎 相关链接
• 公告板: {公告板URL}
• 管理手册: {管理手册URL}
========================
项目同步链接规则:
- 日常进度同步/公告板动态 → 附「公告板」链接
- 项目创建/总体说明/里程碑更新 → 附「管理手册」链接
- 两者都相关时 → 同时附上
- 链接从飞书知识库中读取(见 memory 中的项目文档地址)
- 从飞书公告板读取进行中(🔵)和新发布的公告,自动提取关键字段
- 用户手动告知的内容,直接填入
- 两者可混合:先列公告板动态,再附用户补充说明
状态标记对照:
- 🟡待开始 — 任务已发布但未开工
- 🔵进行中 — 正在执行
- ✅已完成 — 已交付
- 🔴已逾期 — 超过截止日期未完成
- 📋任务发布 — 新任务刚发出
- 📢通知 — 重要通知或决策
API 触发模板 — 用于 CI/CD、部署通知:
=== 部署/构建通知 ===
项目: {项目名称}
触发消息: {消息内容}
触发方式: CI/CD 流水线
————————————
TaskNya 自动通知
GPU 监控模板 — 用于训练完成、GPU 状态:
=== GPU 监控通知 ===
项目: {项目名称}
检测结果: {结果描述}
GPU 信息:
{GPU 详情}
————————————
TaskNya GPU 监控
文件检测模板 — 用于文件变化通知:
=== 文件检测通知 ===
项目: {项目名称}
检测事件: {事件类型}
文件: {文件路径}
————————————
TaskNya 文件监控
日志检测模板 — 用于日志告警:
=== 日志检测通知 ===
项目: {项目名称}
检测到关键词: {关键词}
日志路径: {日志路径}
检测模式: 全量扫描
————————————
TaskNya 日志监控
HTTP 轮询模板 — 用于服务状态通知:
=== HTTP 轮询通知 ===
项目: {项目名称}
检测结果: {结果}
目标地址: {URL}
请求方式: GET
期望状态: 200
————————————
TaskNya HTTP 监控
通用消息模板 — 以上都不匹配时使用:
=== TaskNya 通知 ===
{用户提供的完整内容}
————————————
来自 TaskNya 推送
消息体构建规则
将模板渲染为 JSON body:
{
"content": "渲染后的消息文本",
"umo": "目标UMO",
"message_type": "text"
}
注意事项:
- content 中的换行用
\n 表示
- JSON 内的引号需要转义为
\"
- 消息长度不宜超过 2000 字符(QQ 单条消息限制)
- 如果内容过长,提示用户是否拆分发送
Step 3: 确认并发送
向用户展示将要发送的消息预览,确认后执行发送。
对每个目标 UMO 执行一次 HTTP 请求:
curl -s -X POST "<webhook_url>" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <token>" \
-d '<json_body>'
批量发送时(多个 UMO),每个请求之间间隔 1 秒避免频率限制:
for umo in "${targets[@]}"; do
curl -s -X POST "$URL" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d "{\"content\": \"$CONTENT\", \"umo\": \"$umo\", \"message_type\": \"text\"}"
sleep 1
done
Step 4: 报告结果
发送后检查响应,报告:
- 成功/失败状态
- 发送的目标数量
- 失败的目标及原因(如有)
管理常用目标
用户可以通过以下方式管理 targets:
- 添加:「把 xxx:GroupMessage:123 添加到常用目标,别名叫 XX」
- 查看:「查看我的常用目标」
- 删除:「删除常用目标 XX」
操作直接修改 $TASKNYA_QQ_BROADCAST_CONFIG 指向的配置文件。
使用示例
用户: 向柚子社项目群同步 Limelight Lemonade Jam 项目进展
→ 读取飞书公告板 → 匹配「项目同步模板」→ 提取进行中公告 → 构建消息体 → 确认 → 发送
用户: 向后期群同步一下,录音已完成,背景制作进行中,需要关注动画制作人员还没确定
→ 匹配「项目同步模板」→ 项目总体 + 手动内容 → 构建消息体 → 确认 → 发送
用户: 群里通知一下,部署完成了,版本 v2.0.0
→ 匹配「API 触发模板」→ 构建消息体 → 确认 → 发送
用户: 给测试群发一条消息:明天下午3点开会
→ 使用「通用消息模板」→ 构建消息体 → 确认 → 发送
项目同步自动读取公告板
当用户要求同步项目进展且未指定具体内容时,自动执行:
- 读取飞书项目公告板文档
- 提取所有状态为 🔵进行中 和 📋新发布 的公告
- 计算项目总体进度(已完成任务数 / 总任务数)
- 填入项目同步模板的两个部分