Files
gdrive-upload-robot/README.zh.md
T

211 lines
6.6 KiB
Markdown
Raw 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.
# Google Drive 上传机器人
一个基于 Cloudflare Workers 构建的 Telegram 机器人,会自动把发送给它的文件和照片上传到 Google Drive。
## 功能特性
* 📁 **自动文件上传**:将发送给机器人的任意文档自动上传到 Google Drive
* 📷 **支持照片**:支持照片上传并自动命名
* ☁️ **无服务器架构**:运行在 Cloudflare Workers 上,零服务器运维成本
* 🔒 **安全**:使用 Google 服务账号(Service Account)进行身份验证
* 📱 **实时通知**:向管理员发送上传成功的确认消息
## 工作原理
1. 用户向 Telegram 机器人发送文件或照片
2. 机器人从 Telegram 服务器下载该文件
3. 使用服务账号凭据与 Google Drive 进行身份验证
4. 将文件上传到指定的 Google Drive 文件夹
5. 向管理员发送确认消息
## 快速开始
[![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/xixu-me/gdrive-upload-robot)
使用上面的 “Deploy to Cloudflare” 按钮可以获得最快的部署体验。
## 安装配置
### 前置条件
在开始之前,请确保你已经具备:
* 一个 [Cloudflare 账号](https://dash.cloudflare.com/sign-up)(提供免费套餐)
* 已安装 [Node.js](https://nodejs.org/)(版本 16 或更高)
* 本机已安装 Git
### 第 1 步:配置 Google Drive
1. **创建 Google Cloud 项目**
* 访问 [Google Cloud Console](https://console.cloud.google.com/)
* 创建一个新项目或选择已有项目
* 记下你的项目 ID
2. **启用 Google Drive API**
* 在 Google Cloud Console 中,进入 “APIs & Services” > “Library”
* 搜索 “Google Drive API” 并点击 “Enable(启用)”
3. **创建服务账号(Service Account)**
* 进入 “APIs & Services” > “Credentials”
* 点击 “Create Credentials” > “Service Account”
* 填写服务账号信息并创建
* 点击刚创建的服务账号
* 前往 “Keys” 标签页 > “Add Key” > “Create New Key”
* 选择 JSON 格式并下载文件
* **务必妥善保存该 JSON 文件——其中包含敏感凭据**
4. **配置 Google Drive 文件夹**
* 在你的 Google Drive 中创建一个用于保存上传文件的文件夹
* 右键该文件夹 > “共享(Share)”
* 将服务账号的邮箱(在 JSON 文件中可找到)添加为编辑者
* 从浏览器地址栏中复制该文件夹的 ID(例如:`https://drive.google.com/drive/folders/FOLDER_ID_HERE` 中的 `FOLDER_ID_HERE`)
### 第 2 步:配置 Telegram 机器人
1. **创建 Telegram 机器人**
* 在 Telegram 中私聊 [@BotFather](https://t.me/botfather)
* 发送 `/newbot` 命令
* 按提示设置机器人名称和用户名
* 保存 BotFather 提供的机器人 Token
2. **获取你的 Chat ID**
* 私聊 [@userinfobot](https://t.me/userinfobot) 来获取你的 Chat ID
* 或者给你的机器人发送一条消息,然后访问:
`https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getUpdates`
* 在返回的数据中查找 `"chat":{"id":CHAT_ID}`
### 第 3 步:环境变量
你需要配置以下环境变量。**务必妥善保管这些变量!**
| 变量名 | 描述 | 示例 |
| ------------------------ | ----------------------- | ---------------------------------------------- |
| `TELEGRAM_BOT_TOKEN` | 来自 BotFather 的机器人 Token | `123456789:ABCdefGHIjklMNOpqrsTUVwxyz` |
| `GOOGLE_DRIVE_FOLDER_ID` | Google Drive 文件夹 ID | `1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms` |
| `ADMIN_CHAT_ID` | 你的 Telegram Chat ID | `123456789` |
| `GOOGLE_CREDENTIALS` | 服务账号 JSON(转成字符串) | `{"type":"service_account",...}` |
### 第 4 步:本地环境搭建
1. **克隆仓库**
```bash
git clone https://github.com/xixu-me/gdrive-upload-robot.git
cd gdrive-upload-robot
```
2. **安装依赖**
```bash
npm install
```
3. **登录 Cloudflare**
```bash
npx wrangler login
```
4. **配置机密变量(用于生产环境)**
```bash
# 添加机器人 Token
npx wrangler secret put TELEGRAM_BOT_TOKEN
# 添加 Google Drive 文件夹 ID
npx wrangler secret put GOOGLE_DRIVE_FOLDER_ID
# 添加你的 Chat ID
npx wrangler secret put ADMIN_CHAT_ID
# 添加 Google 凭据(粘贴整个 JSON 内容)
npx wrangler secret put GOOGLE_CREDENTIALS
```
### 第 5 步:部署
1. **部署到 Cloudflare Workers**
```bash
npx wrangler deploy
```
2. **配置 Telegram Webhook**
```bash
curl -X POST "https://api.telegram.org/bot<YOUR_BOT_TOKEN>/setWebhook" \
-H "Content-Type: application/json" \
-d '{"url": "https://your-worker.your-subdomain.workers.dev"}'
```
将 `<YOUR_BOT_TOKEN>` 替换为你的实际机器人 Token,并把 URL 换成你 Worker 的实际地址。
3. **测试机器人**
* 向你的 Telegram 机器人发送一个文件或照片
* 检查该文件是否出现在你的 Google Drive 文件夹中
* 你应当会收到一条确认消息
### 故障排查
* **机器人没有响应**:检查 Webhook 是否配置正确
* **上传失败**:确认 Google Drive 文件夹权限和服务账号访问权限是否正确
* **身份验证错误**:检查所有环境变量是否已正确设置
* **本地开发调试**:可以使用 `npx wrangler dev` 进行本地测试
## API 接口
Worker 期望接收来自 Telegram Webhook 的 POST 请求,Payload 结构如下:
### 文档上传
```json
{
"message": {
"document": {
"file_id": "telegram_file_id",
"file_name": "document.pdf"
}
}
}
```
### 照片上传
```json
{
"message": {
"photo": [
{
"file_id": "telegram_file_id",
"width": 1280,
"height": 720
}
]
}
}
```
## 安全注意事项
* 包含敏感数据的环境变量会安全地存储在 Cloudflare Workers 中
* Google 服务账号只应授予最小必要权限
* 机器人 Token 必须保密,不要提交到版本控制系统
* 在生产环境中建议实现访问频率限制(Rate Limiting)
## 许可证
本项目采用 GNU 通用公共许可证 v3.0(GNU General Public License v3.0)授权——详情见 [LICENSE](LICENSE) 文件。
## 致谢
* 基于 [Cloudflare Workers](https://workers.cloudflare.com/) 构建
* 使用 [Google Drive API](https://developers.google.com/drive/api)
* 集成 [Telegram Bot API](https://core.telegram.org/bots/api)