API 集成 #

API 概述 #

Zoho Writer API 允许开发者通过编程方式创建、编辑和管理文档,实现文档自动化和系统集成。

text
┌─────────────────────────────────────────────────────────────┐
│                    API 功能概览                              │
├─────────────────────────────────────────────────────────────┤
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐         │
│  │  文档管理    │  │  内容编辑    │  │  协作功能    │         │
│  └─────────────┘  └─────────────┘  └─────────────┘         │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐         │
│  │  邮件合并    │  │  模板操作    │  │  导出功能    │         │
│  └─────────────┘  └─────────────┘  └─────────────┘         │
└─────────────────────────────────────────────────────────────┘

API 基础 #

获取 API 凭证 #

text
步骤:
1. 登录 Zoho 账号
2. 访问 https://api-console.zoho.com
3. 点击"添加客户端"
4. 选择客户端类型
5. 输入客户端信息
6. 获取 Client ID 和 Client Secret

认证方式 #

text
OAuth 2.0 认证流程:

1. 获取授权码
GET https://accounts.zoho.com/oauth/v2/auth
?response_type=code
&client_id={client_id}
&redirect_uri={redirect_uri}
&scope=ZohoWriter.documents.ALL

2. 获取访问令牌
POST https://accounts.zoho.com/oauth/v2/token
?code={code}
&client_id={client_id}
&client_secret={client_secret}
&redirect_uri={redirect_uri}
&grant_type=authorization_code

3. 使用令牌访问 API
Authorization: Zoho-oauthtoken {access_token}

API 端点 #

text
基础 URL:
https://writer.zoho.com/api/v1

主要端点:
- /documents:文档管理
- /templates:模板管理
- /merge:邮件合并
- /export:文档导出

文档管理 API #

创建文档 #

text
POST /api/v1/documents

请求示例:
{
  "name": "新文档",
  "content": "<p>文档内容</p>",
  "folder_id": "folder_123"
}

响应示例:
{
  "document_id": "doc_123456",
  "name": "新文档",
  "created_time": "2024-01-15T10:30:00Z",
  "modified_time": "2024-01-15T10:30:00Z"
}

获取文档 #

text
GET /api/v1/documents/{document_id}

响应示例:
{
  "document_id": "doc_123456",
  "name": "我的文档",
  "content": "<p>文档内容</p>",
  "created_by": "user_123",
  "created_time": "2024-01-15T10:30:00Z",
  "modified_time": "2024-01-15T11:00:00Z",
  "version": 5
}

更新文档 #

text
PUT /api/v1/documents/{document_id}

请求示例:
{
  "name": "更新的文档名",
  "content": "<p>更新的内容</p>"
}

响应示例:
{
  "document_id": "doc_123456",
  "name": "更新的文档名",
  "modified_time": "2024-01-15T12:00:00Z"
}

删除文档 #

text
DELETE /api/v1/documents/{document_id}

响应示例:
{
  "status": "success",
  "message": "文档已删除"
}

列出文档 #

text
GET /api/v1/documents

查询参数:
- limit:返回数量限制
- offset:偏移量
- folder_id:文件夹 ID
- sort_by:排序字段
- sort_order:排序方向

响应示例:
{
  "documents": [
    {
      "document_id": "doc_1",
      "name": "文档1",
      "created_time": "2024-01-15T10:00:00Z"
    },
    {
      "document_id": "doc_2",
      "name": "文档2",
      "created_time": "2024-01-15T11:00:00Z"
    }
  ],
  "total_count": 50,
  "limit": 10,
  "offset": 0
}

内容编辑 API #

插入内容 #

text
POST /api/v1/documents/{document_id}/content

请求示例:
{
  "content": "<p>新段落</p>",
  "position": {
    "type": "end"
  }
}

位置类型:
- start:文档开头
- end:文档末尾
- after:指定元素后
- before:指定元素前

替换内容 #

text
PUT /api/v1/documents/{document_id}/content

请求示例:
{
  "find": "旧文本",
  "replace": "新文本",
  "match_case": true,
  "match_whole_word": false
}

获取文档内容 #

text
GET /api/v1/documents/{document_id}/content

查询参数:
- format:html 或 plain

响应示例:
{
  "content": "<p>文档内容</p>",
  "format": "html"
}

模板 API #

从模板创建文档 #

text
POST /api/v1/documents/fromtemplate

请求示例:
{
  "template_id": "template_123",
  "name": "从模板创建的文档",
  "folder_id": "folder_456"
}

响应示例:
{
  "document_id": "doc_789",
  "name": "从模板创建的文档",
  "template_id": "template_123"
}

列出模板 #

text
GET /api/v1/templates

响应示例:
{
  "templates": [
    {
      "template_id": "template_1",
      "name": "商业计划书",
      "category": "商业",
      "created_time": "2024-01-01T00:00:00Z"
    }
  ]
}

邮件合并 API #

执行邮件合并 #

text
POST /api/v1/documents/{document_id}/merge

请求示例:
{
  "data": [
    {
      "name": "张三",
      "email": "zhang@example.com",
      "company": "ABC公司"
    },
    {
      "name": "李四",
      "email": "li@example.com",
      "company": "XYZ公司"
    }
  ],
  "output_format": "pdf",
  "filename_prefix": "邀请函_"
}

响应示例:
{
  "merge_id": "merge_123",
  "status": "processing",
  "total_records": 2
}

查询合并状态 #

text
GET /api/v1/merge/{merge_id}/status

响应示例:
{
  "merge_id": "merge_123",
  "status": "completed",
  "processed_records": 2,
  "failed_records": 0,
  "download_url": "https://..."
}

下载合并结果 #

text
GET /api/v1/merge/{merge_id}/download

响应:合并后的文件

导出 API #

导出文档 #

text
POST /api/v1/documents/{document_id}/export

请求示例:
{
  "format": "pdf",
  "options": {
    "quality": "high",
    "include_comments": false,
    "page_range": "1-10"
  }
}

响应示例:
{
  "export_id": "export_123",
  "status": "processing"
}

下载导出文件 #

text
GET /api/v1/export/{export_id}/download

响应:导出的文件

协作 API #

分享文档 #

text
POST /api/v1/documents/{document_id}/share

请求示例:
{
  "recipients": [
    {
      "email": "user1@example.com",
      "permission": "write"
    },
    {
      "email": "user2@example.com",
      "permission": "read"
    }
  ],
  "message": "请查看此文档"
}

权限类型:
- read:只读
- comment:评论
- write:编辑
- share:分享

获取协作者列表 #

text
GET /api/v1/documents/{document_id}/collaborators

响应示例:
{
  "collaborators": [
    {
      "user_id": "user_1",
      "name": "张三",
      "email": "zhang@example.com",
      "permission": "write"
    }
  ]
}

添加评论 #

text
POST /api/v1/documents/{document_id}/comments

请求示例:
{
  "content": "这段需要修改",
  "position": {
    "start": 100,
    "end": 150
  }
}

响应示例:
{
  "comment_id": "comment_123",
  "content": "这段需要修改",
  "created_by": "user_123",
  "created_time": "2024-01-15T10:00:00Z"
}

Webhook #

配置 Webhook #

text
POST /api/v1/webhooks

请求示例:
{
  "url": "https://your-server.com/webhook",
  "events": [
    "document.created",
    "document.updated",
    "document.deleted"
  ],
  "secret": "your_webhook_secret"
}

支持的事件:
- document.created
- document.updated
- document.deleted
- document.shared
- comment.added
- merge.completed

Webhook 载荷 #

text
POST https://your-server.com/webhook

请求头:
X-Zoho-Signature: sha256签名
X-Zoho-Event: document.updated

请求体:
{
  "event": "document.updated",
  "timestamp": "2024-01-15T10:00:00Z",
  "data": {
    "document_id": "doc_123",
    "name": "更新的文档",
    "modified_by": "user_456"
  }
}

SDK 使用 #

JavaScript SDK #

javascript
// 安装
npm install zoho-writer-sdk

// 初始化
const ZohoWriter = require('zoho-writer-sdk');
const client = new ZohoWriter({
  clientId: 'your_client_id',
  clientSecret: 'your_client_secret',
  refreshToken: 'your_refresh_token'
});

// 创建文档
const doc = await client.documents.create({
  name: '新文档',
  content: '<p>内容</p>'
});

console.log(doc.document_id);

Python SDK #

python
# 安装
pip install zoho-writer

# 初始化
from zoho_writer import ZohoWriter

client = ZohoWriter(
    client_id='your_client_id',
    client_secret='your_client_secret',
    refresh_token='your_refresh_token'
)

# 创建文档
doc = client.documents.create(
    name='新文档',
    content='<p>内容</p>'
)

print(doc['document_id'])

API 限制 #

速率限制 #

text
限制规则:
- 每分钟 100 次请求
- 每小时 2000 次请求
- 每天 50000 次请求

响应头:
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 1640000000

超出限制处理 #

text
HTTP 429 响应:
{
  "error": "rate_limit_exceeded",
  "message": "已超出速率限制",
  "retry_after": 60
}

建议:
1. 实现指数退避
2. 缓存 API 响应
3. 批量处理请求

最佳实践 #

错误处理 #

text
常见错误码:
- 400:请求参数错误
- 401:认证失败
- 403:权限不足
- 404:资源不存在
- 429:超出速率限制
- 500:服务器错误

处理建议:
1. 检查错误响应
2. 实现重试逻辑
3. 记录错误日志
4. 提供用户反馈

性能优化 #

text
优化建议:
1. 批量操作
2. 异步处理
3. 缓存结果
4. 压缩请求
5. 使用 Webhook 代替轮询

实践练习 #

练习一:创建文档 #

text
任务:使用 API 创建文档

要求:
1. 获取 API 凭证
2. 编写代码创建文档
3. 添加内容
4. 获取文档列表

练习二:邮件合并 #

text
任务:使用 API 执行邮件合并

要求:
1. 准备数据
2. 调用合并 API
3. 查询合并状态
4. 下载结果

练习三:Webhook 集成 #

text
任务:配置 Webhook 接收事件

要求:
1. 创建 Webhook 端点
2. 配置 Webhook
3. 处理接收的事件
4. 验证签名

常见问题 #

Q1:认证失败? #

text
检查步骤:
1. 确认 Client ID 和 Secret 正确
2. 检查访问令牌是否过期
3. 确认权限范围正确
4. 检查重定向 URI

Q2:请求超时? #

text
解决方法:
1. 增加超时时间
2. 优化请求大小
3. 使用异步处理
4. 检查网络连接

Q3:权限不足? #

text
解决方法:
1. 检查 OAuth 权限范围
2. 确认文档分享权限
3. 联系管理员授权

下一步 #

现在你已经掌握了 API 集成,接下来学习 最佳实践 提升文档管理能力!

最后更新:2026-04-13