ClawSkills logoClawSkills

Zoho

与 Zoho CRM、Projects 和 Meeting API 交互。在管理交易、联系人、线索、任务、项目、里程碑、会议录制或任何 Zoho 工作...

介绍

# Zoho Integration (CRM + Projects + Meeting)

由 [Zone 99](https://99.zone) 制作 · [GitHub](https://github.com/shreefentsar/clawdbot-zoho) · [Contribute](https://github.com/shreefentsar/clawdbot-zoho/issues)

## 快速开始

使用 `zoho` CLI 包装器 —— 它会自动处理 OAuth 令牌刷新和缓存。

```bash zoho help # Show all commands zoho token # Print current access token (auto-refreshes) ```

## 认证设置

### 第 1 步:注册您的应用程序

1. 前往 [Zoho API Console](https://api-console.zoho.com/) 2. 点击 **Add Client** → 选择 **Server-based Applications** 3. 填写: - **Client Name**:您的应用名称(例如 "Clawdbot Zoho Integration") - **Homepage URL**:您的域名或 `https://localhost` - **Redirect URI**:`https://localhost/callback`(或您控制的任何 URL —— 您只需使用一次来获取代码) 4. 点击 **Create** 5. 记下 **Client ID** 和 **Client Secret**

### 第 2 步:生成授权码(许可令牌)

构建此 URL 并在浏览器中打开(替换占位符):

``` https://accounts.zoho.com/oauth/v2/auth ?response_type=code &client_id=YOUR_CLIENT_ID &scope=ZohoCRM.modules.ALL,ZohoCRM.settings.ALL,ZohoProjects.projects.ALL,ZohoProjects.tasks.ALL,ZohoMeeting.recording.READ,ZohoMeeting.meeting.READ,ZohoMeeting.meetinguds.READ,ZohoFiles.files.READ &redirect_uri=https://localhost/callback &access_type=offline &prompt=consent ```

> **重要提示:** 使用与您的数据中心匹配的 accounts URL: > | Region | Accounts URL | > |--------|-------------| > | US | `https://accounts.zoho.com` | > | EU | `https://accounts.zoho.eu` | > | IN | `https://accounts.zoho.in` | > | AU | `https://accounts.zoho.com.au` | > | JP | `https://accounts.zoho.jp` | > | UK | `https://accounts.zoho.uk` | > | CA | `https://accounts.zohocloud.ca` | > | SA | `https://accounts.zoho.sa` |

授予访问权限后,您将被重定向到类似以下的地址: ``` https://localhost/callback?code=1000.abc123...&location=us&accounts-server=https://accounts.zoho.com ```

复制 `code` 参数的值。**此代码在 2 分钟后过期** —— 请立即进行第 3 步。

### 第 3 步:交换代码以获取刷新令牌

运行此 curl 命令(替换占位符):

```bash curl -X POST "https://accounts.zoho.com/oauth/v2/token" \ -d "client_id=YOUR_CLIENT_ID" \ -d "client_secret=YOUR_CLIENT_SECRET" \ -d "grant_type=authorization_code" \ -d "redirect_uri=https://localhost/callback" \ -d "code=PASTE_CODE_FROM_STEP_2" ```

响应: ```json { "access_token": "1000.xxxx.yyyy", "refresh_token": "1000.xxxx.zzzz", "api_domain": "https://www.zohoapis.com", "token_type": "Bearer", "expires_in": 3600 } ```

保存 **refresh_token** —— 这是您的长期凭证。访问令牌会在 1 小时后过期,但 CLI 会使用刷新令牌自动刷新它。

### 第 4 步:查找您的组织 ID

**CRM/Projects 组织 ID:** ```bash # After setting up .env with client_id, client_secret, refresh_token: zoho raw GET /crm/v7/org | jq '.org[0].id' ```

**Meeting 组织 ID:** 登录 [Zoho Meeting](https://meeting.zoho.com) → Admin Settings → 在 URL 或设置页面中查找 Organization ID。它与 CRM 组织 ID 不同。

### 第 5 步:配置 .env

在技能目录中创建 `.env`:

```bash ZOHO_CLIENT_ID=1000.XXXXXXXXXXXXXXXXXXXXXXXXX ZOHO_CLIENT_SECRET=your_client_secret_here ZOHO_REFRESH_TOKEN=1000.your_refresh_token_here ZOHO_ORG_ID=123456789 # CRM/Projects org ID ZOHO_MEETING_ORG_ID=987654321 # Meeting org ID (different from CRM) ZOHO_CRM_DOMAIN=https://www.zohoapis.com ZOHO_PROJECTS_DOMAIN=https://projectsapi.zoho.com/restapi ZOHO_MEETING_DOMAIN=https://meeting.zoho.com ZOHO_ACCOUNTS_URL=https://accounts.zoho.com ```

> 如果您位于非美国数据中心(例如 `.eu`、`.in`、`.com.au`),请调整域名 URL。

### OAuth 范围参考

| Scope | 用于 | |-------|----------| | `ZohoCRM.modules.ALL` | 读/写 CRM 记录(商机、联系人、线索等) | | `ZohoCRM.settings.ALL` | 读取 CRM 字段定义和组织设置 | | `ZohoProjects.projects.ALL` | 读/写项目 | | `ZohoProjects.tasks.ALL` | 读/写任务、里程碑、Bug、工时日志 | | `ZohoMeeting.recording.READ` | 列出和访问会议录制 | | `ZohoMeeting.meeting.READ` | 列出会议和会话详情 | | `ZohoMeeting.meetinguds.READ` | 下载录制文件 | | `ZohoFiles.files.READ` | 下载文件(录制、转录) |

如果您只需要 CRM 或只需要 Meeting,可以请求更少的范围。授权 URL 范围参数以逗号分隔。

### 认证故障排除

- **"invalid_code"** → 授权代码已过期(有效期 2 分钟)。重新执行第 2 步。 - **"invalid_client"** → 客户端 ID 错误,或者您所在数据中心的 accounts-server URL 错误。 - **"invalid_redirect_uri"** → curl 中的 redirect_uri 必须与您在 API Console 中注册的完全匹配。 - **令牌刷新失败** → 刷新令牌可能被撤销。重新执行第 2–3 步以获取新的令牌。 - **"Given URL is wrong"** → 您访问的数据中心对应的 API 域名不正确。

## CRM 命令

```bash # List records from any module zoho crm list Deals zoho crm list Deals "page=1&per_page=5&sort_by=Created_Time&sort_order=desc" zoho crm list Contacts zoho crm list Leads

# Get a specific record zoho crm get Deals 1234567890

# Search with criteria zoho crm search Deals "(Stage:equals:Closed Won)" zoho crm search Contacts "(Email:contains:@acme.com)" zoho crm search Leads "(Lead_Source:equals:Web)"

# Create a record zoho crm create Contacts '{"data":[{"Last_Name":"Smith","First_Name":"John","Email":"[email protected]"}]}' zoho crm create Deals '{"data":[{"Deal_Name":"New Project","Stage":"Qualification","Amount":50000}]}'

# Update a record zoho crm update Deals 1234567890 '{"data":[{"Stage":"Closed Won"}]}'

# Delete a record zoho crm delete Deals 1234567890 ```

### CRM 模块 线索、联系人、客户、商机、任务、活动、通话、备注、产品、报价单、销售订单、采购订单、发票

### 搜索运算符 equals, not_equal, starts_with, contains, not_contains, in, not_in, between, greater_than, less_than

## Projects 命令

```bash # List all projects zoho proj list

# Get project details zoho proj get 12345678

# Tasks zoho proj tasks 12345678 zoho proj create-task 12345678 "name=Fix+login+bug&priority=High&start_date=01-27-2026" zoho proj update-task 12345678 98765432 "percent_complete=50"

# Other zoho proj milestones 12345678 zoho proj tasklists 12345678 zoho proj bugs 12345678 zoho proj timelogs 12345678 ```

### 任务字段 name, start_date (MM-DD-YYYY), end_date, priority (None/Low/Medium/High), owner, description, tasklist_id, percent_complete

## Meeting 命令

```bash # List all recordings zoho meeting recordings zoho meeting recordings | jq '[.recordings[] | {topic, sDate, sTime, durationInMins, erecordingId}]'

# Download a recording (use downloadUrl from recordings list) zoho meeting download "https://files-accl.zohopublic.com/public?event-id=..." output.mp4

# List meetings/sessions zoho meeting list zoho meeting list "fromDate=2026-01-01T00:00:00Z&toDate=2026-01-31T23:59:59Z"

# Get meeting details zoho meeting get 1066944216 ```

### 录制响应字段 来自 `zoho meeting recordings` 的关键字段: - `erecordingId` —— 加密录制 ID(用于去重/跟踪) - `topic` —— 会议标题 - `sDate`, `sTime` —— 开始日期/时间(人类可读) - `startTimeinMs` —— 开始时间(以纪元毫秒为单位,用于日期过滤) - `durationInMins` —— 录制时长 - `downloadUrl` / `publicDownloadUrl` —— MP4 下载 URL - `transcriptionDownloadUrl` —— Zoho 生成的转录(如果可用) - `summaryDownloadUrl` —— Zoho 生成的摘要(如果可用) - `fileSize` / `fileSizeInMB` —— 录制文件大小 - `status` —— 例如 `UPLOADED` - `meetingKey` —— 会议标识符 - `creatorName` —— 启动录制的人员

### 会议录制流程

用于自动站立会议/会议摘要:

```bash # 1. List recordings, filter by today's date (epoch ms) zoho meeting recordings | jq --argjson start "$START_MS" --argjson end "$END_MS" \ '[.recordings[] | select(.startTimeinMs >= $start and .startTimeinMs <= $end)]'

# 2. Download recording zoho meeting download "$DOWNLOAD_URL" /tmp/recording.mp4

# 3. Extract audio ffmpeg -i /tmp/recording.mp4 -vn -acodec pcm_s16le -ar 16000 -ac 1 /tmp/audio.wav -y

# 4. Transcribe via Gemini Flash API (great for Arabic + English mix) # See scripts/standup-summarizer.sh for full implementation

# 5. Summarize transcript with Claude/GPT # 6. Clean up temp files ```

包含一个完整的站立会议摘要脚本,位于 `scripts/standup-summarizer.sh`。

## 原始 API 调用

对于子命令未涵盖的任何操作: ```bash # CRM endpoints zoho raw GET /crm/v7/settings/fields?module=Deals zoho raw GET /crm/v7/org

# Meeting endpoints zoho raw GET "https://meeting.zoho.com/meeting/api/v2/{zsoid}/recordings.json"

# Custom modules zoho raw GET /crm/v7/Custom_Module ```

## 使用模式

### 检查商机/销售漏斗时 ```bash zoho crm list Deals "sort_by=Created_Time&sort_order=desc&per_page=10" | jq '.data[] | {Deal_Name, Stage, Amount, Closing_Date}' ```

### 检查项目进度时 ```bash zoho proj list | jq '.projects[] | {name, status, id: .id_string}' zoho proj tasks <project_id> | jq '.tasks[] | {name, status: .status.name, percent_complete, priority}' ```

### 从对话创建任务时 ```bash zoho proj create-task <project_id> "name=Task+description&priority=High&start_date=MM-DD-YYYY&end_date=MM-DD-YYYY" ```

### 总结会议录制时 ```bash # Quick list of recent recordings zoho meeting recordings | jq '[.recordings[:5] | .[] | {topic, sDate, sTime, durationInMins, fileSize}]'

# Download latest recording URL=$(zoho meeting recordings | jq -r '.recordings[0].downloadUrl') zoho meeting download "$URL" /tmp/latest.mp4 ```

## 速率限制 - CRM:100 次/分钟 - Projects:因计划而异 - Meeting:标准 API 限制 - 令牌刷新:不要不必要地频繁调用(自动缓存)

## 参考资料 - [CRM API 字段](references/crm-api.md) - [Projects API 端点](references/projects-api.md) - [Meeting API 参考](references/meeting-api.md)

更多产品