Merge pull request '新增 gitlink-notification-bridge Skill' (#293) from wdgde/gitlink-cli:feature/webhook into master

This commit is contained in:
wbtiger 2026-07-14 22:32:32 +08:00
commit 269469b6bc
2 changed files with 1054 additions and 0 deletions

View File

@ -0,0 +1,607 @@
# gitlink-notification-bridge 使用样例
## 样例 1飞书群机器人配置基础场景
**日期**2026-06-26
**用户**developer
**CLI 版本**gitlink-cli 0.1.18
**场景**:将 GitLink 仓库的代码推送事件推送到飞书开发群
### 执行流程
```bash
# Step 1: 获取飞书群机器人 Webhook URL
# (在飞书群聊中操作)
# 1. 打开群设置 → 群机器人 → 添加机器人
# 2. 选择「自定义机器人」
# 3. 复制 Webhook 地址
# → https://open.feishu.cn/open-apis/bot/v2/hook/abc123def456
# Step 2: 创建 Webhook仅监听 master 和 main 分支)
gitlink-cli webhook +create \
--url "https://open.feishu.cn/open-apis/bot/v2/hook/abc123def456" \
--type "feishu" \
--events "push" \
--branch-filter "master,main" \
--active "true" \
--format json
# Step 3: 验证配置
# 获取刚创建的 Webhook ID
gitlink-cli webhook +list --format json
# 发送测试事件
gitlink-cli webhook +test --id 12345 --format json
# 检查投递历史
gitlink-cli webhook +history --id 12345 --format json
```
### 预期输出
**创建成功响应:**
```json
{
"id": 12345,
"url": "https://open.feishu.cn/open-apis/bot/v2/hook/abc123def456",
"type": "feishu",
"events": ["push"],
"branch_filter": "master,main",
"active": true,
"created_at": "2026-06-26T10:30:00Z"
}
```
**测试投递成功:**
```json
{
"webhook_id": 12345,
"test_event": "push",
"delivery_status": "success",
"http_status": 200,
"response_time_ms": 245
}
```
**飞书群消息示例:**
```
📦 代码推送通知
仓库myorg/myproject
分支master
提交者developer
提交数3
最新提交:
• feat: 添加用户认证模块 (abc1234)
• fix: 修复登录页面样式 (def5678)
• docs: 更新 README (ghi9012)
查看详情https://www.gitlink.org.cn/myorg/myproject
```
### 关键发现
| 项目 | 值 |
|------|-----|
| Webhook 类型 | `feishu` |
| 支持事件 | `push`, `pull_request_only`, `issues_only` 等 |
| 分支过滤 | 支持 `*`, `master`, `feature/*` 等通配符 |
| 投递延迟 | < 500ms正常情况 |
| 消息格式 | 飞书卡片消息(自动适配) |
---
## 样例 2钉钉群机器人配置带签名验证
**日期**2026-06-26
**场景**:将 GitLink 仓库的 PR 和 Issue 事件推送到钉钉运维群,启用签名验证
### 执行流程
```bash
# Step 1: 获取钉钉群机器人 Webhook URL 和 Secret
# (在钉钉群聊中操作)
# 1. 群设置 → 智能群助手 → 添加机器人
# 2. 选择「自定义」
# 3. 安全设置选择「加签」
# 4. 复制 SecretSECxxxxxxxxxxxxxxxxxxxx
# 5. 复制 Webhookhttps://oapi.dingtalk.com/robot/send?access_token=xyz789
# Step 2: 创建 Webhook多事件 + 签名)
gitlink-cli webhook +create \
--url "https://oapi.dingtalk.com/robot/send?access_token=xyz789" \
--type "dingtalk" \
--events "push,pull_request_only,issues_only" \
--branch-filter "master,main,release-*" \
--secret "SECxxxxxxxxxxxxxxxxxxxx" \
--active "true" \
--format json
# Step 3: 验证签名配置
gitlink-cli webhook +view --id 12346 --format json
# Step 4: 发送测试事件
gitlink-cli webhook +test --id 12346 --format json
```
### 预期输出
**创建成功响应:**
```json
{
"id": 12346,
"url": "https://oapi.dingtalk.com/robot/send?access_token=xyz789",
"type": "dingtalk",
"events": ["push", "pull_request_only", "issues_only"],
"branch_filter": "master,main,release-*",
"secret": "********", // 已脱敏
"active": true,
"created_at": "2026-06-26T11:00:00Z"
}
```
**钉钉群消息示例PR 事件):**
```
🔀 Pull Request 通知
仓库myorg/myproject
标题feat: 添加用户认证模块
作者developer
状态:待审核
PR #42
分支feature/auth → master
查看详情https://www.gitlink.org.cn/myorg/myproject/pulls/42
```
### 签名验证说明
钉钉机器人使用「加签」安全设置时GitLink 会自动计算签名:
```
签名算法HmacSHA256(timestamp + "\n" + secret, secret)
请求头X-Timestamp, X-Sign
```
**注意事项:**
- Secret 必须与钉钉机器人设置中的「加签密钥」完全一致
- 签名验证失败会返回 HTTP 403
- 建议先测试无签名配置,确认可用后再启用签名
---
## 样例 3多群通知配置
**场景**:为不同团队配置不同的通知策略
### 执行流程
```bash
# 开发群 - 监听所有分支的所有事件
gitlink-cli webhook +create \
--url "https://open.feishu.cn/open-apis/bot/v2/hook/dev-group" \
--type "feishu" \
--events "push,pull_request_only,pull_request_comment,issues_only,issue_comment" \
--branch-filter "*" \
--active "true" \
--format json
# 运维群 - 仅监听生产分支的推送和分支操作
gitlink-cli webhook +create \
--url "https://open.feishu.cn/open-apis/bot/v2/hook/ops-group" \
--type "feishu" \
--events "push,create,delete" \
--branch-filter "master,main,release-*,hotfix-*" \
--active "true" \
--format json
# 产品群 - 仅监听 Issue 相关事件
gitlink-cli webhook +create \
--url "https://open.feishu.cn/open-apis/bot/v2/hook/product-group" \
--type "feishu" \
--events "issues_only,issue_comment,issue_assign,issue_label" \
--branch-filter "*" \
--active "true" \
--format json
# 查看所有 Webhook
gitlink-cli webhook +list --format json
```
### 预期输出
**Webhook 列表:**
```json
[
{
"id": 12347,
"url": "https://open.feishu.cn/open-apis/bot/v2/hook/dev-group",
"type": "feishu",
"events": ["push", "pull_request_only", "pull_request_comment", "issues_only", "issue_comment"],
"branch_filter": "*",
"active": true
},
{
"id": 12348,
"url": "https://open.feishu.cn/open-apis/bot/v2/hook/ops-group",
"type": "feishu",
"events": ["push", "create", "delete"],
"branch_filter": "master,main,release-*,hotfix-*",
"active": true
},
{
"id": 12349,
"url": "https://open.feishu.cn/open-apis/bot/v2/hook/product-group",
"type": "feishu",
"events": ["issues_only", "issue_comment", "issue_assign", "issue_label"],
"branch_filter": "*",
"active": true
}
]
```
---
## 样例 4混合平台配置飞书 + 钉钉)
**场景**:同时推送到飞书和钉钉群
### 执行流程
```bash
# 飞书群
gitlink-cli webhook +create \
--url "https://open.feishu.cn/open-apis/bot/v2/hook/feishu-group" \
--type "feishu" \
--events "push,pull_request_only" \
--branch-filter "master,main" \
--active "true" \
--format json
# 钉钉群
gitlink-cli webhook +create \
--url "https://oapi.dingtalk.com/robot/send?access_token=dingtalk-token" \
--type "dingtalk" \
--events "push,pull_request_only" \
--branch-filter "master,main" \
--active "true" \
--format json
# 验证两个平台都收到通知
gitlink-cli webhook +test --id 12350 --format json # 飞书
gitlink-cli webhook +test --id 12351 --format json # 钉钉
```
---
## 样例 5故障排查 - 群聊未收到消息
**场景**:配置后群聊未收到通知
### 诊断流程
```bash
# Step 1: 检查 Webhook 是否激活
gitlink-cli webhook +view --id 12345 --format json
# 输出示例:
{
"id": 12345,
"active": false, // ← 问题:未激活
"url": "https://open.feishu.cn/open-apis/bot/v2/hook/abc123",
"type": "feishu",
"events": ["push"]
}
# Step 2: 激活 Webhook
gitlink-cli webhook +update \
--id 12345 \
--active "true" \
--format json
# Step 3: 检查投递历史
gitlink-cli webhook +history --id 12345 --format json
# 输出示例:
{
"deliveries": [
{
"id": "d001",
"event_type": "push",
"delivered_at": "2026-06-26T10:35:00Z",
"http_status": 200, // ← 成功
"response_time_ms": 180
}
]
}
# Step 4: 发送测试事件
gitlink-cli webhook +test --id 12345 --format json
```
### 常见问题诊断表
| 问题 | 检测方式 | 解决方案 |
|------|----------|----------|
| Webhook 未激活 | `active: false` | `--active "true"` |
| URL 错误 | 投递历史 HTTP 404 | 重新获取正确的 Webhook URL |
| 签名验证失败 | 投递历史 HTTP 403 | 确保 Secret 与群机器人配置一致 |
| 事件未触发 | 分支过滤不匹配 | 更新 `--branch-filter` |
| 事件类型不匹配 | 事件订阅不包含 | 更新 `--events` |
---
## 样例 6故障排查 - 签名验证失败
**场景**:钉钉群机器人返回签名错误
### 诊断流程
```bash
# Step 1: 检查投递历史
gitlink-cli webhook +history --id 12346 --format json
# 输出示例:
{
"deliveries": [
{
"id": "d002",
"event_type": "push",
"delivered_at": "2026-06-26T11:05:00Z",
"http_status": 403, // ← 签名验证失败
"error": "signature verification failed"
}
]
}
# Step 2: 检查当前 Secret 配置
gitlink-cli webhook +view --id 12346 --format json
# Step 3: 更新 Secret确保与钉钉机器人「加签密钥」一致
gitlink-cli webhook +update \
--id 12346 \
--secret "SECcorrectsecret123456" \
--format json
# Step 4: 重新测试
gitlink-cli webhook +test --id 12346 --format json
```
### 签名验证要点
**飞书签名:**
- 在飞书群机器人设置中启用「签名校验」
- 设置自定义 Secret建议 16-32 位随机字符串)
- GitLink 配置相同的 Secret
**钉钉签名:**
- 钉钉机器人创建时选择「加签」安全设置
- 系统自动生成 Secret`SEC` 开头)
- 完整复制 Secret 到 GitLink 配置
---
## 样例 7更新和删除 Webhook
**场景**:调整现有配置或清理不再使用的 Webhook
### 更新配置
```bash
# 更新事件订阅
gitlink-cli webhook +update \
--id 12345 \
--events "push,pull_request_only,issues_only" \
--format json
# 更新分支过滤
gitlink-cli webhook +update \
--id 12345 \
--branch-filter "master,main,develop,feature/*" \
--format json
# 暂停通知(不删除)
gitlink-cli webhook +update \
--id 12345 \
--active "false" \
--format json
# 恢复通知
gitlink-cli webhook +update \
--id 12345 \
--active "true" \
--format json
```
### 删除 Webhook
```bash
# ⚠️ 删除前确认
gitlink-cli webhook +view --id 12345 --format json
# 删除
gitlink-cli webhook +delete --id 12345 --format json
# 验证已删除
gitlink-cli webhook +list --format json
```
---
## 样例 8通过 Agent 调用 Skill自动配置
**日期**2026-06-26
**调用方式**`Agent(subagent_type="general", prompt="请帮我配置 GitLink 仓库的飞书通知,监听 master 分支的推送事件。")`
### Agent 自主执行的命令序列
```
工具调用 1: Read → ../gitlink-shared/SKILL.md ← 遵循 Skill 前置条件
工具调用 2: Read → ./SKILL.md ← 读取当前 Skill
工具调用 3: Bash → gitlink-cli webhook +list --format json ← 检查现有配置
工具调用 4: Bash → gitlink-cli webhook +create ... ← 创建 Webhook
工具调用 5: Bash → gitlink-cli webhook +test --id ... ← 发送测试
工具调用 6: Bash → gitlink-cli webhook +history --id ... ← 验证投递
```
### Agent 决策过程
Agent **正确遵循了 Skill 工作流**
1. 先读取 `gitlink-shared/SKILL.md` 了解认证和安全规则
2. 读取当前 Skill 了解配置流程
3. 检查现有 Webhook 避免重复创建
4. 引导用户获取飞书群机器人 Webhook URL
5. 创建 Webhook 并验证配置
6. 生成配置摘要报告
### Agent 生成的配置摘要
```markdown
## GitLink 跨平台通知桥接配置完成
### 配置概要
| 项目 | 详情 |
|------|------|
| 仓库 | myorg/myproject |
| 平台 | 飞书 |
| Webhook ID | 12345 |
| 状态 | ✅ 已激活 |
### 订阅配置
| 配置项 | 值 |
|--------|-----|
| 事件类型 | push |
| 分支过滤 | master |
| 签名验证 | ❌ 未启用 |
### 测试结果
| 测试项 | 结果 |
|--------|------|
| 测试投递 | ✅ 成功 |
| HTTP 状态码 | 200 |
| 群聊收到消息 | ✅ 是 |
### 后续操作
1. 触发实际推送事件验证
2. 监控投递历史:`gitlink-cli webhook +history --id 12345`
3. 如需调整,使用 `gitlink-cli webhook +update --id 12345`
---
*由 gitlink-notification-bridge Skill 自动生成*
```
---
## 异常场景速查
| 场景 | 检测方式 | 处理 |
|------|----------|------|
| Webhook URL 格式错误 | 创建时返回 400 | 确保格式正确(飞书:`https://open.feishu.cn/open-apis/bot/v2/hook/xxx` |
| 不支持的 Webhook 类型 | `--type` 参数报错 | 使用 `feishu``dingtalk` |
| 分支过滤语法错误 | 创建时返回 400 | 使用逗号分隔,支持 `*` 通配符 |
| 事件类型不存在 | 创建时返回 400 | 参考支持的事件列表 |
| 投递超时 | 投递历史显示 timeout | 检查网络连接,重试 |
| 消息格式异常 | 群聊显示乱码 | 检查 `--type` 是否正确 |
---
## 版本兼容性说明
本 skill v1.0.0 基于 `gitlink-cli 0.1.18` 编写。
### 支持的 Webhook 类型
| 类型 | 说明 | GitLink 版本 |
|------|------|--------------|
| `feishu` | 飞书群机器人 | v0.1.0+ |
| `dingtalk` | 钉钉群机器人 | v0.1.0+ |
| `slack` | Slack | v0.1.0+ |
| `discord` | Discord | v0.1.0+ |
| `telegram` | Telegram | v0.1.0+ |
| `msteams` | Microsoft Teams | v0.1.0+ |
| `matrix` | Matrix | v0.1.0+ |
### 支持的事件类型
| 事件 | 说明 | GitLink 版本 |
|------|------|--------------|
| `push` | 代码推送 | v0.1.0+ |
| `create` | 创建分支/标签 | v0.1.0+ |
| `delete` | 删除分支/标签 | v0.1.0+ |
| `issues_only` | Issue 创建/更新 | v0.1.0+ |
| `issue_assign` | Issue 分配 | v0.1.0+ |
| `issue_label` | Issue 标签变更 | v0.1.0+ |
| `issue_comment` | Issue 评论 | v0.1.0+ |
| `pull_request_only` | PR 创建/更新 | v0.1.0+ |
| `pull_request_assign` | PR 分配 | v0.1.0+ |
| `pull_request_comment` | PR 评论 | v0.1.0+ |
当 CLI 版本更新后,重新验证可用命令:
```bash
gitlink-cli webhook --help
gitlink-cli webhook +create --help
```
---
## 最佳实践
### 1. 安全配置
- ✅ 生产环境建议启用签名验证
- ✅ Secret 使用 16-32 位随机字符串
- ✅ 定期轮换 Secret建议每季度
- ⚠️ 不要在公开仓库中暴露 Webhook URL
### 2. 事件订阅策略
| 团队类型 | 推荐事件 | 说明 |
|----------|----------|------|
| 开发团队 | `push,pull_request_only,pull_request_comment` | 关注代码变更和评审 |
| 运维团队 | `push,create,delete` | 关注分支和版本管理 |
| 产品团队 | `issues_only,issue_comment` | 关注需求和问题跟踪 |
| QA 团队 | `pull_request_only,issues_only` | 关注测试任务 |
### 3. 分支过滤策略
| 环境 | 推荐过滤规则 | 说明 |
|------|--------------|------|
| 生产环境 | `master,main,release-*` | 仅监听关键分支 |
| 开发环境 | `*``feature/*,develop` | 监听所有或开发分支 |
| 测试环境 | `test-*` | 仅监听测试分支 |
### 4. 监控和维护
```bash
# 定期检查投递成功率
gitlink-cli webhook +history --id <id> --format json | jq '.deliveries | map(select(.http_status != 200)) | length'
# 批量检查所有 Webhook 状态
gitlink-cli webhook +list --format json | jq '.[] | {id, active, type}'
# 清理未激活的 Webhook
gitlink-cli webhook +list --format json | jq '.[] | select(.active == false) | .id' | xargs -I {} gitlink-cli webhook +delete --id {}
```
---
## 相关资源
- [飞书机器人开发文档](https://open.feishu.cn/document/ukTMukTMukTM/ucTM5YjL3ETO24yNxkjN)
- [钉钉机器人开发文档](https://open.dingtalk.com/document/robots/custom-robot-access)
- [GitLink Webhook API 文档](https://www.gitlink.org.cn/docs/api#webhook)
- [gitlink-webhook-sentinel Skill](../gitlink-webhook-sentinel/SKILL.md) - Webhook 监控和故障诊断

View File

@ -0,0 +1,447 @@
---
name: gitlink-notification-bridge
version: 1.0.0
description: "跨平台通知桥接:将 GitLink 仓库事件实时推送到飞书/钉钉群机器人,实现跨平台协作通知。当用户需要配置 GitLink 与飞书/钉钉集成时触发。"
metadata:
requires:
bins: ["gitlink-cli"]
cliHelp: "gitlink-cli webhook --help"
---
# gitlink-notification-bridge跨平台通知桥接
**CRITICAL — 开始前必须先阅读 [`../gitlink-shared/SKILL.md`](../gitlink-shared/SKILL.md),其中包含认证、权限处理和 API 注意事项。**
**CRITICAL — 所有写入/删除操作前,务必先确认用户意图。**
**CRITICAL — GitLink 操作只能用 `gitlink-cli`。禁止用 `gh`GitHub CLI操作 GitLink 资源。**
> **前置条件:** 先阅读 [`../gitlink-shared/SKILL.md`](../gitlink-shared/SKILL.md) 了解认证和全局参数。
> **执行样例:** 参见 [`EXAMPLES.md`](EXAMPLES.md)
---
## 功能概述
帮助用户快速配置 GitLink 仓库与飞书/钉钉群机器人的集成,实现:
1. **实时推送** — 代码推送、PR、Issue 等事件实时推送到群聊
2. **多平台支持** — 支持飞书Feishu和钉钉DingTalk
3. **事件过滤** — 可选择订阅特定事件类型
4. **分支过滤** — 可限定监听特定分支的推送
5. **安全验证** — 支持 Webhook Secret 签名验证
---
## 支持的平台
| 平台 | Webhook 类型 | 官方文档 |
|------|-------------|----------|
| **飞书** | `feishu` | [飞书机器人开发文档](https://open.feishu.cn/document/ukTMukTMukTM/ucTM5YjL3ETO24yNxkjN) |
| **钉钉** | `dingtalk` | [钉钉机器人开发文档](https://open.dingtalk.com/document/robots/custom-robot-access) |
---
## 工作流:快速配置通知桥接
### Step 1获取群机器人 Webhook URL
#### 飞书群机器人
1. 打开飞书群聊 → 点击群设置 → 群机器人 → 添加机器人
2. 选择「自定义机器人」
3. 设置机器人名称和描述
4. 复制 Webhook 地址(格式:`https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxx`
5. (可选)设置签名密钥,增强安全性
#### 钉钉群机器人
1. 打开钉钉群聊 → 点击群设置 → 智能群助手 → 添加机器人
2. 选择「自定义」机器人
3. 设置机器人名称
4. 安全设置选择「加签」复制密钥Secret
5. 复制 Webhook 地址(格式:`https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx`
---
### Step 2配置 GitLink Webhook
使用 `gitlink-cli webhook +create` 命令创建 Webhook
#### 飞书配置示例
```bash
# 基础配置(推送事件)
gitlink-cli webhook +create \
--url "https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxx" \
--type "feishu" \
--events "push" \
--branch-filter "master,main" \
--active "true"
# 完整配置(多事件 + 签名)
gitlink-cli webhook +create \
--url "https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxx" \
--type "feishu" \
--events "push,pull_request_only,issues_only" \
--branch-filter "master,main,release-*" \
--secret "your-feishu-secret" \
--active "true"
```
#### 钉钉配置示例
```bash
# 基础配置(推送事件)
gitlink-cli webhook +create \
--url "https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx" \
--type "dingtalk" \
--events "push" \
--branch-filter "master,main" \
--active "true"
# 完整配置(多事件 + 签名)
gitlink-cli webhook +create \
--url "https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx" \
--type "dingtalk" \
--events "push,pull_request_only,issues_only" \
--branch-filter "master,main,release-*" \
--secret "your-dingtalk-secret" \
--active "true"
```
---
### Step 3验证配置
#### 发送测试事件
```bash
# 获取 Webhook ID
gitlink-cli webhook +list --format json
# 发送测试事件
gitlink-cli webhook +test --id <webhook_id> --format json
```
#### 检查投递历史
```bash
# 查看投递记录
gitlink-cli webhook +history --id <webhook_id> --format json
```
**预期结果:**
- 群聊中收到测试消息
- 投递历史显示 HTTP 200 状态码
---
## 事件类型说明
| 事件 | 说明 | 推荐场景 |
|------|------|----------|
| `push` | 代码推送 | 监听代码提交 |
| `pull_request_only` | PR 创建/更新 | 代码评审流程 |
| `pull_request_comment` | PR 评论 | 评审讨论通知 |
| `pull_request_assign` | PR 分配 | 任务分配通知 |
| `issues_only` | Issue 创建/更新 | 问题跟踪 |
| `issue_comment` | Issue 评论 | 问题讨论通知 |
| `issue_assign` | Issue 分配 | 任务分配通知 |
| `create` | 创建分支/标签 | 版本管理 |
| `delete` | 删除分支/标签 | 清理通知 |
**推荐组合:**
- **开发团队**`push,pull_request_only,pull_request_comment`
- **运维团队**`push,create,delete`
- **产品团队**`issues_only,issue_comment`
- **全量监控**`push,pull_request_only,issues_only,create,delete`
---
## 分支过滤规则
`--branch-filter` 参数支持通配符:
| 过滤规则 | 说明 | 示例 |
|----------|------|------|
| `*` | 所有分支(默认) | 监听所有分支 |
| `master` | 单个分支 | 仅监听 master |
| `master,main` | 多个分支 | 监听 master 和 main |
| `release-*` | 通配符匹配 | 匹配 release-1.0, release-2.0 |
| `feature/*` | 路径匹配 | 匹配 feature/login, feature/api |
**推荐配置:**
- **生产环境**`master,main,release-*`
- **开发环境**`*` 或 `feature/*,develop`
- **测试环境**`test-*`
---
## 安全配置
### Webhook Secret签名验证
GitLink 支持 Webhook Secret 签名验证,防止伪造请求:
#### 飞书签名
```bash
# 创建时设置 Secret
gitlink-cli webhook +create \
--url "https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxx" \
--type "feishu" \
--events "push" \
--secret "your-strong-secret"
# 更新 Secret
gitlink-cli webhook +update \
--id <webhook_id> \
--secret "new-strong-secret"
```
**注意:** 飞书群机器人需在创建时启用「签名校验」Secret 需与 GitLink 配置一致。
#### 钉钉签名
```bash
# 创建时设置 Secret使用钉钉机器人的加签密钥
gitlink-cli webhook +create \
--url "https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx" \
--type "dingtalk" \
--events "push" \
--secret "SECxxxxxxxxxxxxxxxxxxxx"
```
**注意:** 钉钉机器人的 Secret 在创建机器人时生成,需完整复制。
---
## 高级配置
### 多群通知
为不同群聊创建不同的 Webhook
```bash
# 开发群 - 监听所有事件
gitlink-cli webhook +create \
--url "https://open.feishu.cn/open-apis/bot/v2/hook/dev-group" \
--type "feishu" \
--events "push,pull_request_only,issues_only" \
--branch-filter "*"
# 运维群 - 仅监听生产分支
gitlink-cli webhook +create \
--url "https://open.feishu.cn/open-apis/bot/v2/hook/ops-group" \
--type "feishu" \
--events "push,create,delete" \
--branch-filter "master,main,release-*"
# 产品群 - 仅监听 Issue
gitlink-cli webhook +create \
--url "https://open.feishu.cn/open-apis/bot/v2/hook/product-group" \
--type "feishu" \
--events "issues_only,issue_comment" \
--branch-filter "*"
```
### 混合平台配置
同时推送到飞书和钉钉:
```bash
# 飞书群
gitlink-cli webhook +create \
--url "https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxx" \
--type "feishu" \
--events "push,pull_request_only" \
--branch-filter "master,main"
# 钉钉群
gitlink-cli webhook +create \
--url "https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx" \
--type "dingtalk" \
--events "push,pull_request_only" \
--branch-filter "master,main"
```
---
## 故障排查
### 常见问题
#### 1. 群聊未收到消息
**检查步骤:**
```bash
# 1. 检查 Webhook 是否激活
gitlink-cli webhook +view --id <webhook_id> --format json
# 2. 检查投递历史
gitlink-cli webhook +history --id <webhook_id> --format json
# 3. 发送测试事件
gitlink-cli webhook +test --id <webhook_id> --format json
```
**可能原因:**
- Webhook 未激活(`active: false`
- URL 错误或已失效
- 签名验证失败Secret 不匹配)
- 事件未触发(分支过滤或事件订阅不匹配)
#### 2. 签名验证失败
**错误表现:** 投递历史显示 HTTP 403 或群聊提示签名错误
**解决方案:**
```bash
# 检查当前 Secret 配置
gitlink-cli webhook +view --id <webhook_id> --format json
# 更新 Secret确保与群机器人配置一致
gitlink-cli webhook +update \
--id <webhook_id> \
--secret "correct-secret"
# 重新测试
gitlink-cli webhook +test --id <webhook_id> --format json
```
#### 3. 消息格式异常
**可能原因:**
- Webhook 类型配置错误(`--type` 应为 `feishu``dingtalk`
- Content-Type 不匹配(默认 `json`,通常无需修改)
**解决方案:**
```bash
# 检查类型配置
gitlink-cli webhook +view --id <webhook_id> --format json
# 更新类型
gitlink-cli webhook +update \
--id <webhook_id> \
--type "feishu"
```
#### 4. 特定分支未触发通知
**检查分支过滤规则:**
```bash
# 查看当前过滤规则
gitlink-cli webhook +view --id <webhook_id> --format json
# 更新过滤规则
gitlink-cli webhook +update \
--id <webhook_id> \
--branch-filter "master,main,feature/*"
```
---
## 管理操作
### 查看所有 Webhook
```bash
# 列出仓库所有 Webhook
gitlink-cli webhook +list --format json
```
### 更新配置
```bash
# 更新事件订阅
gitlink-cli webhook +update \
--id <webhook_id> \
--events "push,pull_request_only,issues_only"
# 更新分支过滤
gitlink-cli webhook +update \
--id <webhook_id> \
--branch-filter "master,main"
# 暂停通知(不删除)
gitlink-cli webhook +update \
--id <webhook_id> \
--active "false"
```
### 删除 Webhook
```bash
# ⚠️ 删除前确认
gitlink-cli webhook +delete --id <webhook_id>
```
---
## 输出模板
配置完成后,生成配置摘要:
```markdown
## GitLink 跨平台通知桥接配置完成
### 配置概要
| 项目 | 详情 |
|------|------|
| 仓库 | <owner>/<repo> |
| 平台 | 飞书 / 钉钉 |
| Webhook ID | <id> |
| 状态 | ✅ 已激活 |
### 订阅配置
| 配置项 | 值 |
|--------|-----|
| 事件类型 | <events> |
| 分支过滤 | <branch_filter> |
| 签名验证 | ✅ 已启用 / ❌ 未启用 |
### 测试结果
| 测试项 | 结果 |
|--------|------|
| 测试投递 | ✅ 成功 / ❌ 失败 |
| HTTP 状态码 | 200 |
| 群聊收到消息 | ✅ 是 / ❌ 否 |
### 后续操作
1. 触发实际事件验证(推送代码、创建 PR 等)
2. 监控投递历史:`gitlink-cli webhook +history --id <id>`
3. 如需调整,使用 `gitlink-cli webhook +update --id <id>`
---
*由 gitlink-notification-bridge Skill 自动生成*
```
---
## 注意事项
- ✅ **所有命令使用 `--format json`**,确保可解析
- ✅ **创建/更新 Webhook 为写操作**,执行前确认参数
- ✅ **Secret 需与群机器人配置一致**,否则签名验证失败
- ⚠️ **飞书/钉钉 Webhook URL 需从群设置中获取**,无法手动构造
- ⚠️ **删除 Webhook 是不可逆操作**,建议先设为未激活测试
- ⚠️ **分支过滤区分大小写**,确保分支名称正确
---
## 相关 Skill 交叉引用
| Skill | 关联场景 |
|-------|----------|
| [`gitlink-shared`](../gitlink-shared/SKILL.md) | 认证、全局参数、安全规则基础 |
| [`gitlink-webhook-sentinel`](../gitlink-webhook-sentinel/SKILL.md) | Webhook 监控、故障诊断、安全审计 |
| [`gitlink-notification-digest`](../gitlink-notification-digest/SKILL.md) | GitLink 平台内通知摘要 |