# dsh-webhook-notifier > DSH 事件通知插件:在指定事件发生时向 Webhook 发送 HTTP 通知。 [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) [English](README.md) · **中文** **可配合 [桌宠](https://github.com/masknull/dsh-pet-standalone) 项目使用** —— 例如回合完成时推送到桌宠显示通知。 ## 功能特性 - 🔔 **5 种触发场景**(可在设置中自由开关): - AI 回合完成时 - 权限申请时(approval) - AI 提问时 - AI 出错时 - AI 开始运行时 - 🌐 **HTTP 请求**:支持 `GET` / `POST`,Body 支持 `JSON` / `Form` - 📦 **两种发送方式**: - **预设文本**:勾选字段,自定义模板(如 `{"session":"{{sessionName}}"}`) - **自定义文本**:发送参数固定为 `msg`,内容自由编写 - 🏷️ **固定发送 `type` + `type_cn`**:每次请求自动附带消息类型(英文 + 中文) - 🔧 **自定义请求头**:可添加任意 Header - 🔍 **测试发送**:一键验证配置连通性 - 📜 **发送日志**:每行可展开查看完整请求内容、响应与错误 - 💾 **配置持久化**:保存在 `$DSH_HOME/settings.yaml`,重启不丢失 ## 安装 ```bash dsh plugin --profile web add github:masknull/dsh-webhook-notifier ``` 安装后**重启 `dsh web`** 生效。 ## 使用 1. 打开 **设置 → Webhook 通知** 2. 打开「Webhook 通知」开关 3. 配置 **请求配置**:方法、URL、发送方式、请求头 4. 勾选 **触发场景**(哪些事件发送通知) 5. 在 **预设文本** 或 **自定义文本** 中填写要发送的内容 6. 点 **测试发送** 验证,确认后点 **保存** ## 占位符 内容模板支持以下占位符(`{{ }}` 包裹,区别于 JSON 的 `{}`): | 占位符 | 说明 | |--------|------| | `{{type}}` | 消息类型(固定发送,如 `turnComplete`) | | `{{type_cn}}` | 消息类型中文(固定发送,如 `回合完成`) | | `{{sessionId}}` | 会话 ID | | `{{sessionName}}` | 会话名称 | | `{{turn}}` | 回合编号 | | `{{time}}` | 当前时间(UTC+8) | | `{{trigger}}` | 触发场景 | | `{{toolName}}` | 触发工具名(权限申请时) | | `{{reason}}` | 原因(权限申请时) | | `{{error}}` | 错误信息(出错时) | | `{{question}}` | 提问内容(AI 提问时) | | `{{status}}` | 状态(开始运行时) | | `{{userMessage}}` | 用户最后一条消息 | | `{{assistantMessage}}` | AI 最后一条回复 | | `{{createdAt}}` | 会话创建时间 | ## 发送示例 **POST + JSON(预设文本):** ```json {"type":"turnComplete","type_cn":"回合完成","sessionId":"s1","sessionName":"测试会话"} ``` **POST + JSON(自定义文本,msg 参数):** ```json {"msg":"任务【测试会话】回合完成","type":"turnComplete","type_cn":"回合完成"} ``` **GET:** `https://example.com/hook?type=turnComplete&type_cn=回合完成&sessionId=s1` ## 可配合项目 - [桌宠](https://github.com/masknull/dsh-pet-standalone):将通知推送到桌面宠物展示,实时掌握 DSH 运行状态。 ## 卸载 ```bash dsh plugin --profile web remove dsh-webhook-notifier ``` 重启 `dsh web` 后插件移除,配置保留在 `settings.yaml`(如需彻底清除可手动删除对应字段)。 ## License [MIT](LICENSE)