# 部署通知配置指南

本文档说明如何配置 Gitea Actions 的部署通知功能，支持 Telegram 和 Discord 双渠道通知。

## 功能说明

- ✅ **自动触发**：部署成功或失败时自动发送通知
- ✅ **双渠道**：同时支持 Telegram 和 Discord
- ✅ **详细信息**：包含仓库、分支、提交、作者、工作流等信息
- ✅ **失败容错**：通知发送失败不会影响部署流程

## 配置步骤

### 1. Telegram Bot 配置

#### 1.1 创建 Telegram Bot

1. 在 Telegram 中搜索 `@BotFather`
2. 发送 `/newbot` 创建新机器人
3. 按提示设置机器人名称和用户名
4. 获得 Bot Token，格式类似：`123456789:ABCdefGHIjklMNOpqrsTUVwxyz`

#### 1.2 获取 Chat ID

**方法 1：通过 Bot API**
1. 将你的 Bot 添加到目标群组或频道
2. 发送任意消息给 Bot
3. 访问：`https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getUpdates`
4. 在返回的 JSON 中找到 `chat.id`

**方法 2：使用第三方 Bot**
1. 添加 `@userinfobot` 到你的群组
2. 它会自动显示 Chat ID

### 2. Discord Webhook 配置

1. 打开 Discord 服务器设置
2. 进入 **集成** → **Webhook**
3. 点击 **新建 Webhook**
4. 设置名称和头像（可选）
5. 选择目标频道
6. 复制 Webhook URL，格式类似：
   ```
   https://discord.com/api/webhooks/123456789/abcdefghijklmnopqrstuvwxyz
   ```

### 3. 配置 Gitea Secrets

由于 Gitea Actions API 在该实例不可用，需要直接写入 MySQL 数据库。

#### 3.1 连接到 Gitea 数据库

```bash
# SSH 到 Gitea 服务器
ssh doc79

# 连接 MySQL（根据实际情况调整）
mysql -u gitea -p gitea
```

#### 3.2 插入 Secrets

```sql
-- Telegram Bot Token
INSERT INTO action_variable (owner_id, repo_id, name, data, created_unix, updated_unix)
VALUES (0, 0, 'TELEGRAM_BOT_TOKEN', '你的Bot Token', UNIX_TIMESTAMP(), UNIX_TIMESTAMP());

-- Telegram Chat ID
INSERT INTO action_variable (owner_id, repo_id, name, data, created_unix, updated_unix)
VALUES (0, 0, 'TELEGRAM_CHAT_ID', '你的Chat ID', UNIX_TIMESTAMP(), UNIX_TIMESTAMP());

-- Discord Webhook URL
INSERT INTO action_variable (owner_id, repo_id, name, data, created_unix, updated_unix)
VALUES (0, 0, 'DISCORD_WEBHOOK_URL', '你的Webhook URL', UNIX_TIMESTAMP(), UNIX_TIMESTAMP());
```

**注意**：
- `owner_id=0` 表示全局变量，所有仓库可用
- 如果只想对特定仓库生效，需要查询该仓库的 `repo_id` 并替换

#### 3.3 验证配置

```sql
-- 查看所有 Actions 变量
SELECT id, owner_id, repo_id, name, LEFT(data, 20) as data_preview 
FROM action_variable 
WHERE name IN ('TELEGRAM_BOT_TOKEN', 'TELEGRAM_CHAT_ID', 'DISCORD_WEBHOOK_URL');
```

### 4. 测试通知

配置完成后，推送代码到 main 分支触发部署：

```bash
# 测试后端部署通知
git add server/
git commit -m "test: 测试部署通知"
git push origin main

# 测试小程序部署通知
git add mini/
git commit -m "test: 测试小程序通知"
git push origin main
```

## 通知示例

### Telegram 通知

```
✅ 后端服务部署成功

状态: 成功
仓库: gouki/lunar
分支: main
提交: abc1234
作者: gouki
工作流: Build and Deploy Server #42

部署包已保存到: /opt/lunar/ci-artifacts/server-deploy-latest.tar.gz

查看详情
```

### Discord 通知

Discord 会显示一个嵌入消息卡片，包含：
- 标题和状态图标
- 仓库、分支、提交、作者信息
- 部署详情
- 时间戳
- 可点击的链接跳转到 Actions 页面

## 故障排查

### 通知未发送

1. **检查 Secrets 配置**
   ```sql
   SELECT * FROM action_variable WHERE name LIKE '%TELEGRAM%' OR name LIKE '%DISCORD%';
   ```

2. **查看 Actions 日志**
   - 在 Gitea 网页界面查看 Actions 运行日志
   - 查找 "发送 Telegram 通知" 或 "发送 Discord 通知" 相关输出

3. **检查网络连接**
   - 确保运行器可以访问 `api.telegram.org` 和 `discord.com`
   - 你的运行器在海外，理论上没有问题

### Telegram 通知失败

- **Bot Token 错误**：检查 Token 是否正确
- **Chat ID 错误**：确保 Bot 已加入群组/频道，且 Chat ID 正确
- **权限问题**：确保 Bot 有发送消息的权限

### Discord 通知失败

- **Webhook URL 错误**：检查 URL 是否完整
- **Webhook 被删除**：重新创建 Webhook
- **频道权限**：确保 Webhook 有权限在目标频道发送消息

## 高级配置

### 自定义通知内容

编辑 `.gitea/workflows/server-deploy.yml` 或 `.gitea/workflows/miniapp-preview.yml`，修改通知步骤的消息内容：

```yaml
.gitea/scripts/notify.sh success \
  "自定义标题" \
  "自定义消息内容"
```

### 只使用单一渠道

如果只想使用 Telegram 或 Discord 之一，只需配置对应的 Secrets 即可。脚本会自动跳过未配置的渠道。

### 添加更多通知渠道

可以扩展 `.gitea/scripts/notify.sh` 脚本，添加其他通知渠道（如 Slack、钉钉、企业微信等）。

## 安全建议

1. **保护 Secrets**：不要将 Bot Token、Chat ID、Webhook URL 提交到代码仓库
2. **定期轮换**：定期更换 Bot Token 和 Webhook URL
3. **权限最小化**：Telegram Bot 只授予发送消息权限，Discord Webhook 只用于特定频道
4. **监控异常**：如果发现异常通知，立即检查 Secrets 是否泄露

## 相关文件

- 通知脚本：`.gitea/scripts/notify.sh`
- 后端部署工作流：`.gitea/workflows/server-deploy.yml`
- 小程序部署工作流：`.gitea/workflows/miniapp-preview.yml`

## 更新日志

- 2026-08-07: 初始版本，支持 Telegram 和 Discord 双渠道通知
