Files
kt-financial-system/docs/TELEGRAM_NOTIFICATION.md
你的用户名 a06a964bab
Some checks failed
Deploy to Production / Build and Test (push) Has been cancelled
Deploy to Production / Deploy to Server (push) Has been cancelled
feat: add Telegram notification settings UI
2025-11-05 02:22:00 +08:00

278 lines
6.8 KiB
Markdown
Raw Permalink 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.

# Telegram 通知功能使用说明
## 功能概述
KT财务系统支持通过Telegram Bot向群组或个人发送账目记录通知。每当添加、更新或删除账目时系统会自动推送消息到配置的Telegram聊天。
## 功能特性
- ✅ 支持多个Telegram Bot配置
- ✅ 支持发送到群组或个人
- ✅ 自动推送新增账目记录
- ✅ 包含完整的交易信息(类型、金额、分类、账户等)
- ✅ 支持启用/禁用通知
- ✅ 提供测试功能验证配置
## 准备工作
### 1. 创建Telegram Bot
1. 在Telegram中搜索 `@BotFather`
2. 发送 `/newbot` 命令
3. 按照提示设置Bot名称和用户名
4. 获取Bot Token格式`1234567890:ABCdefGHIjklMNOpqrsTUVwxyz`
### 2. 获取Chat ID
#### 获取个人Chat ID
1. 在Telegram中搜索 `@userinfobot`
2. 发送任意消息
3. Bot会返回你的Chat ID
#### 获取群组Chat ID
1. 将你的Bot添加到群组
2. 在群组中发送任意消息
3. 访问:`https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getUpdates`
4. 在返回的JSON中找到 `chat.id` 字段群组ID通常是负数`-1001234567890`
## API接口
### 1. 获取所有通知配置
```http
GET /api/telegram/notifications
```
**响应示例**
```json
{
"code": 0,
"data": [
{
"id": 1,
"name": "财务通知群",
"botToken": "1234567890:ABCdefGHI...",
"chatId": "-1001234567890",
"notificationTypes": ["transaction"],
"isEnabled": true,
"createdAt": "2025-01-01T00:00:00.000Z",
"updatedAt": "2025-01-01T00:00:00.000Z"
}
]
}
```
### 2. 创建通知配置
```http
POST /api/telegram/notifications
Content-Type: application/json
{
"name": "财务通知群",
"botToken": "1234567890:ABCdefGHI...",
"chatId": "-1001234567890",
"notificationTypes": ["transaction"],
"isEnabled": true
}
```
**说明**
- `name`: 配置名称(必填)
- `botToken`: Telegram Bot Token必填
- `chatId`: 目标聊天ID必填
- `notificationTypes`: 通知类型数组,目前支持 `["transaction"]`(可选,默认:`["transaction"]`
- `isEnabled`: 是否启用(可选,默认:`true`
**响应示例**
```json
{
"code": 0,
"data": {
"id": 1,
"name": "财务通知群",
"botToken": "1234567890:ABCdefGHI...",
"chatId": "-1001234567890",
"notificationTypes": ["transaction"],
"isEnabled": true,
"createdAt": "2025-01-01T00:00:00.000Z",
"updatedAt": "2025-01-01T00:00:00.000Z"
}
}
```
**注意**创建时会自动测试配置如果Bot Token或Chat ID无效会返回错误。
### 3. 更新通知配置
```http
PUT /api/telegram/notifications/:id
Content-Type: application/json
{
"name": "更新后的名称",
"isEnabled": false
}
```
**说明**:所有字段都是可选的,只更新提供的字段。
### 4. 删除通知配置
```http
DELETE /api/telegram/notifications/:id
```
### 5. 测试Telegram配置
```http
POST /api/telegram/test
Content-Type: application/json
{
"botToken": "1234567890:ABCdefGHI...",
"chatId": "-1001234567890"
}
```
**说明**发送测试消息验证Bot Token和Chat ID是否有效。
## 通知消息格式
当添加账目记录时,系统会发送以下格式的消息:
```
📋 新增账目记录
类型:💸 支出
金额CNY 100.00
日期2025-01-15
分类:餐饮
账户:现金账户
状态:✅ 已批准
备注:午餐费用
🕐 记录时间2025-01-15 14:30:00
```
## 通知类型说明
目前支持的通知类型:
- `transaction`: 交易记录通知(新增、更新、删除账目)
未来可扩展:
- `budget`: 预算提醒
- `report`: 财务报表
- `reimbursement`: 报销审批
## 常见问题
### Q: Bot无法发送消息到群组
**A**: 请确保:
1. Bot已被添加到群组
2. Bot在群组中有发送消息的权限
3. Chat ID正确群组ID通常是负数
### Q: 如何禁用某个配置的通知?
**A**: 调用更新API设置 `isEnabled: false`
### Q: 可以配置多个Bot吗
**A**: 可以系统支持多个Bot配置所有启用的配置都会收到通知。
### Q: 消息会包含敏感信息吗?
**A**: 消息只包含账目的基本信息(类型、金额、分类等),不包含用户身份等敏感信息。建议使用私密群组。
## 技术实现
### 数据库表结构
```sql
CREATE TABLE telegram_notification_configs (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
bot_token TEXT NOT NULL,
chat_id TEXT NOT NULL,
notification_types TEXT NOT NULL, -- JSON数组
is_enabled INTEGER NOT NULL DEFAULT 1,
created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP
);
```
### 后端实现
- `apps/backend/utils/telegram-bot.ts`: Telegram Bot核心功能
- `apps/backend/api/telegram/`: 通知配置管理API
- `apps/backend/api/finance/transactions.post.ts`: 集成通知发送
## 示例使用curl测试
```bash
# 1. 测试Bot配置
curl -X POST http://localhost:3000/api/telegram/test \
-H "Content-Type: application/json" \
-d '{
"botToken": "YOUR_BOT_TOKEN",
"chatId": "YOUR_CHAT_ID"
}'
# 2. 创建通知配置
curl -X POST http://localhost:3000/api/telegram/notifications \
-H "Content-Type: application/json" \
-d '{
"name": "测试配置",
"botToken": "YOUR_BOT_TOKEN",
"chatId": "YOUR_CHAT_ID",
"notificationTypes": ["transaction"]
}'
# 3. 添加账目记录(触发通知)
curl -X POST http://localhost:3000/api/finance/transactions \
-H "Content-Type: application/json" \
-d '{
"type": "expense",
"amount": 100,
"currency": "CNY",
"transactionDate": "2025-01-15",
"description": "测试通知功能"
}'
```
## 前端配置界面
Telegram 通知现已集成在 Web 端的系统设置页面:
- 入口路径:`财务系统 → ⚙️ 系统设置 → Telegram 通知配置`
- 列表内容展示配置名称、Bot Token掩码、Chat ID、通知类型、启用状态以及最近更新时间
- 支持操作:快速启用/禁用、编辑、发送测试通知、删除
### 新增或编辑配置
1. 点击「➕ 新增配置」或列表中的「编辑」按钮
2. 填写/更新以下字段:
- **配置名称**:用于标识通知触达对象(例如“财务通知群”)
- **Bot Token**:来自 @BotFather 的完整 Token
- **Chat ID**:个人或群组的 ID群组需将 Bot 加入并通过 `getUpdates` 获取)
- **启用状态**:控制是否参与通知投递
3. 可直接在弹窗内点击「发送测试」,验证 Bot Token 与 Chat ID 是否有效
4. 点击「创建配置」或「保存更新」提交,成功后自动刷新列表
### 使用提示
- 所有启用的配置会在新增账目时同步收到通知
- 「测试」按钮会向对应的聊天发送标准测试消息,方便确认权限
- 删除配置后即刻停止向该聊天推送消息