Shreef Entsar

Zoho

商业运营v2.0.2
作者:Shreef Entsar更新于 2026-05-18共 7 个版本 · 最新版本发布于 2026-02-18zoho@clawhub_shreefentsar/zoho
销售助手CRM 管理项目管理#CRM#Meeting#Pipeline

据 AlphaMoat 统计,截至 2026-09,Zoho 累计下载 4,180 次、获 2 个星标,在全部 5,078 个 AI 技能中排名第 2,402 位,在「商业运营」分类(297 个)中排名第 134 位。

累计安装
147
累计下载
4,180
星标
2
全站排名
#2,402
全站前 48% · 「商业运营」前 46%
平台累计安装累计下载星标评论
ClawHub ↗1474,0922-
SkillHub ↗1474,1802—

各平台的计数口径不同,统计时间不一致。

这个技能是做什么的

该技能使用 OAuth 令牌连接 Zoho CRM、Projects 和 Meeting,可查询或修改业务记录及项目工作项,也可下载会议录制供转写。请求范围应限制在实际需要的最小权限,长期凭据须放在受保护的密钥存储中。新增、修改、删除、下载录制或发送给第三方处理前,应取得明确授权,并确认参与者和数据所有者允许该处理。 使用前应确认 Zoho CLI 已安装并配置。

资料发布于 2026-10-29

可以用来做什么

  • 检索或维护 CRM 联系人、商机和任务
  • 查看项目任务和里程碑
  • 在获授权时获取会议录制及文字稿

什么时候用

  • 已配置最小必要的 OAuth 权限时
  • 业务记录写入或删除操作已经确认时
  • 会议录制已获准下载或交由第三方处理时

示例提示词

以下是根据技能文档生成的示例,不代表实际运行结果。

只查询指定 CRM 商机并总结状态,不要修改或删除记录;需要访问会议录制或交由第三方处理时,先说明数据流并等待确认。

月度数据趋势

累计下载4,180
3,4063,8224,2372026-05 · 累计下载 3,4632026-06 · 累计下载 3,5922026-07 · 累计下载 3,8652026-08 · 累计下载 3,9882026-09 · 累计下载 4,18026-0526-09
星标2
1232026-05 · 星标 22026-06 · 星标 22026-07 · 星标 22026-08 · 星标 22026-09 · 星标 226-0526-09

2026-09 起统计方法调整:同名技能按作者分别统计,并覆盖全部技能。图中虚线为调整前的月份,与之后的数据不直接比较,也不计算跨越调整的增长。

月份累计下载环比星标
2026-094,180—2
2026-083,988+3.2%2
2026-073,865+7.6%2
2026-063,592+3.7%2
2026-053,463—2

SKILL.md 原文

以下是作者发布的原始文件,按纯文本显示,本站未做修改或审核;其中的链接不可点击,命令请核实后再运行。抓取于 2026-10-23。

10 KB · ClawHub v2.0.2
---
name: zoho
description: Interact with Zoho CRM, Projects, and Meeting APIs. Use when managing deals, contacts, leads, tasks, projects, milestones, meeting recordings, or any Zoho workspace data. Triggers on mentions of Zoho, CRM, deals, pipeline, projects, tasks, milestones, meetings, recordings, standups.
author: Zone 99 team
homepage: https://99.zone
repository: https://github.com/shreefentsar/clawdbot-zoho
---

# Zoho Integration (CRM + Projects + Meeting)
展开全部(共 313 行)
Made by [Zone 99](https://99.zone) · [GitHub](https://github.com/shreefentsar/clawdbot-zoho) · [Contribute](https://github.com/shreefentsar/clawdbot-zoho/issues)

## Quick Start

Use the `zoho` CLI wrapper — it handles OAuth token refresh and caching automatically.

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

## Authentication Setup

### Step 1: Register Your Application

1. Go to [Zoho API Console](https://api-console.zoho.com/)
2. Click **Add Client** → choose **Server-based Applications**
3. Fill in:
   - **Client Name**: your app name (e.g. "Clawdbot Zoho Integration")
   - **Homepage URL**: your domain or `https://localhost`
   - **Redirect URI**: `https://localhost/callback` (or any URL you control — you only need it once to grab the code)
4. Click **Create**
5. Note down the **Client ID** and **Client Secret**

### Step 2: Generate Authorization Code (Grant Token)

Build this URL and open it in your browser (replace the placeholders):

```
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
```

> **Important:** Use the accounts URL matching your datacenter:
> | 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` |

After granting access, you'll be redirected to something like:
```
https://localhost/callback?code=1000.abc123...&location=us&accounts-server=https://accounts.zoho.com
```

Copy the `code` parameter value. **This code expires in 2 minutes** — move to Step 3 immediately.

### Step 3: Exchange Code for Refresh Token

Run this curl command (replace placeholders):

```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"
```

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

Save the **refresh_token** — this is your long-lived credential. The access token expires in 1 hour, but the CLI auto-refreshes it using the refresh token.

### Step 4: Find Your Org IDs

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

**Meeting Org ID:**
Log into [Zoho Meeting](https://meeting.zoho.com) → Admin Settings → look for the Organization ID in the URL or settings page. It's different from the CRM org ID.

### Step 5: Configure .env

Create `.env` in the skill directory:

```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
```

> Adjust the domain URLs if you're on a non-US datacenter (e.g. `.eu`, `.in`, `.com.au`).

### OAuth Scopes Reference

| Scope | Used For |
|-------|----------|
| `ZohoCRM.modules.ALL` | Read/write CRM records (Deals, Contacts, Leads, etc.) |
| `ZohoCRM.settings.ALL` | Read CRM field definitions and org settings |
| `ZohoProjects.projects.ALL` | Read/write projects |
| `ZohoProjects.tasks.ALL` | Read/write tasks, milestones, bugs, timelogs |
| `ZohoMeeting.recording.READ` | List and access meeting recordings |
| `ZohoMeeting.meeting.READ` | List meetings and session details |
| `ZohoMeeting.meetinguds.READ` | Download recording files |
| `ZohoFiles.files.READ` | Download files (recordings, transcripts) |

You can request fewer scopes if you only need CRM or only need Meeting. The authorization URL scope parameter is comma-separated.

### Troubleshooting Auth

- **"invalid_code"** → The authorization code expired (2 min lifetime). Redo Step 2.
- **"invalid_client"** → Wrong Client ID, or wrong accounts-server URL for your datacenter.
- **"invalid_redirect_uri"** → The redirect_uri in the curl must exactly match what you registered in API Console.
- **Token refresh fails** → Refresh tokens can be revoked. Redo Steps 2–3 to get a new one.
- **"Given URL is wrong"** → You're hitting the wrong API domain for your datacenter.

## CRM Commands

```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 Modules
Leads, Contacts, Accounts, Deals, Tasks, Events, Calls, Notes, Products, Quotes, Sales_Orders, Purchase_Orders, Invoices

### Search Operators
equals, not_equal, starts_with, contains, not_contains, in, not_in, between, greater_than, less_than

## Projects Commands

```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
```

### Task Fields
name, start_date (MM-DD-YYYY), end_date, priority (None/Low/Medium/High), owner, description, tasklist_id, percent_complete

## Meeting Commands

```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
```

### Recording Response Fields
Key fields from `zoho meeting recordings`:
- `erecordingId` — encrypted recording ID (use for dedup/tracking)
- `topic` — meeting title
- `sDate`, `sTime` — start date/time (human-readable)
- `startTimeinMs` — start time as epoch ms (use for date filtering)
- `durationInMins` — recording duration
- `downloadUrl` / `publicDownloadUrl` — MP4 download URL
- `transcriptionDownloadUrl` — Zoho-generated transcript (if available)
- `summaryDownloadUrl` — Zoho-generated summary (if available)
- `fileSize` / `fileSizeInMB` — recording file size
- `status` — e.g. `UPLOADED`
- `meetingKey` — meeting identifier
- `creatorName` — who started the recording

### Meeting Recording Pipeline
For automated standup/meeting summarization:

```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
```

A complete standup summarizer script is included at `scripts/standup-summarizer.sh`.

## Raw API Calls

For anything not covered by subcommands:
```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
```

## Usage Patterns

### When checking deals/pipeline
```bash
zoho crm list Deals "sort_by=Created_Time&sort_order=desc&per_page=10" | jq '.data[] | {Deal_Name, Stage, Amount, Closing_Date}'
```

### When checking project progress
```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}'
```

### When creating tasks from conversation
```bash
zoho proj create-task <project_id> "name=Task+description&priority=High&start_date=MM-DD-YYYY&end_date=MM-DD-YYYY"
```

### When summarizing meeting recordings
```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
```

## Rate Limits
- CRM: 100 requests/min
- Projects: varies by plan
- Meeting: standard API limits
- Token refresh: don't call more than needed (cached automatically)

## References
- [CRM API Fields](references/crm-api.md)
- [Projects API Endpoints](references/projects-api.md)
- [Meeting API Reference](references/meeting-api.md)

「商业运营」分类下的热门技能

Shreef Entsar 的其他技能

数据月份:2026-09 · 下载/星标/安装数聚合自公开技能注册库(ClawHub、SkillHub),按月更新。口径说明见数据方法。