278 lines
6.8 KiB
Markdown
278 lines
6.8 KiB
Markdown
# 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. 点击「创建配置」或「保存更新」提交,成功后自动刷新列表
|
||
|
||
### 使用提示
|
||
|
||
- 所有启用的配置会在新增账目时同步收到通知
|
||
- 「测试」按钮会向对应的聊天发送标准测试消息,方便确认权限
|
||
- 删除配置后即刻停止向该聊天推送消息
|