Zoho Integration (CRM + Projects + Meeting)
Made by Zone 99 · GitHub · Contribute
Quick Start
Use the zoho CLI wrapper — it handles OAuth token refresh and caching automatically.
CODEBLOCK0
Authentication Setup
Step 1: Register Your Application
- 1. Go to Zoho API Console
- Click Add Client → choose Server-based Applications
- 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
- 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):
CODEBLOCK1
Important: Use the accounts URL matching your datacenter:
| Region | Accounts URL |
|---|
| US | INLINECODE3 |
| 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:
CODEBLOCK2
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):
CODEBLOCK3
Response:
CODEBLOCK4
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:
CODEBLOCK5
Meeting Org ID:
Log into Zoho Meeting → 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:
CODEBLOCK6
Adjust the domain URLs if you're on a non-US datacenter (e.g. .eu, .in, .com.au).
OAuth Scopes Reference
| Scope | Used For |
|---|
| INLINECODE16 | Read/write CRM records (Deals, Contacts, Leads, etc.) |
| INLINECODE17 |
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
- - "invalidcode" → The authorization code expired (2 min lifetime). Redo Step 2.
- "invalidclient" → Wrong Client ID, or wrong accounts-server URL for your datacenter.
- "invalidredirecturi" → 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
CODEBLOCK7
CRM Modules
Leads, Contacts, Accounts, Deals, Tasks, Events, Calls, Notes, Products, Quotes, Sales
Orders, PurchaseOrders, Invoices
Search Operators
equals, not
equal, startswith, contains, not
contains, in, notin, between, greater
than, lessthan
Projects Commands
CODEBLOCK8
Task Fields
name, start
date (MM-DD-YYYY), enddate, priority (None/Low/Medium/High), owner, description, tasklist
id, percentcomplete
Meeting Commands
CODEBLOCK9
Recording Response Fields
Key fields from
zoho meeting recordings:
- -
erecordingId — encrypted recording ID (use for dedup/tracking) - INLINECODE26 — meeting title
- INLINECODE27 ,
sTime — start date/time (human-readable) - INLINECODE29 — start time as epoch ms (use for date filtering)
- INLINECODE30 — recording duration
- INLINECODE31 /
publicDownloadUrl — MP4 download URL - INLINECODE33 — Zoho-generated transcript (if available)
- INLINECODE34 — Zoho-generated summary (if available)
- INLINECODE35 /
fileSizeInMB — recording file size - INLINECODE37 — e.g. INLINECODE38
- INLINECODE39 — meeting identifier
- INLINECODE40 — who started the recording
Meeting Recording Pipeline
For automated standup/meeting summarization:
CODEBLOCK10
A complete standup summarizer script is included at scripts/standup-summarizer.sh.
Raw API Calls
For anything not covered by subcommands:
CODEBLOCK11
Usage Patterns
When checking deals/pipeline
CODEBLOCK12
When checking project progress
CODEBLOCK13
When creating tasks from conversation
CODEBLOCK14
When summarizing meeting recordings
CODEBLOCK15
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
Zoho 集成 (CRM + 项目 + 会议)
由 Zone 99 制作 · GitHub · 贡献
快速开始
使用 zoho CLI 封装器——它会自动处理 OAuth 令牌刷新和缓存。
bash
zoho help # 显示所有命令
zoho token # 打印当前访问令牌(自动刷新)
身份验证设置
第一步:注册应用程序
- 1. 前往 Zoho API 控制台
- 点击 添加客户端 → 选择 基于服务器的应用程序
- 填写:
-
客户端名称:你的应用名称(例如 Clawdbot Zoho 集成)
-
主页 URL:你的域名或 https://localhost
-
重定向 URI:https://localhost/callback(或你控制的任何 URL——只需使用一次即可获取授权码)
- 4. 点击 创建
- 记下 客户端 ID 和 客户端密钥
第二步:生成授权码(授权令牌)
构建此 URL 并在浏览器中打开(替换占位符):
https://accounts.zoho.com/oauth/v2/auth
?response_type=code
&client_id=你的客户端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:
| 区域 | Accounts URL |
|---|
| 美国 | https://accounts.zoho.com |
| 欧洲 |
https://accounts.zoho.eu |
| 印度 | https://accounts.zoho.in |
| 澳大利亚 | https://accounts.zoho.com.au |
| 日本 | https://accounts.zoho.jp |
| 英国 | https://accounts.zoho.uk |
| 加拿大 | https://accounts.zohocloud.ca |
| 沙特阿拉伯 | https://accounts.zoho.sa |
授权后,你将被重定向到类似以下地址:
https://localhost/callback?code=1000.abc123...&location=us&accounts-server=https://accounts.zoho.com
复制 code 参数值。此代码在 2 分钟内过期——请立即执行第三步。
第三步:用授权码换取刷新令牌
运行此 curl 命令(替换占位符):
bash
curl -X POST https://accounts.zoho.com/oauth/v2/token \
-d client_id=你的客户端ID \
-d client_secret=你的客户端密钥 \
-d granttype=authorizationcode \
-d redirect_uri=https://localhost/callback \
-d code=粘贴第二步获取的代码
响应:
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 会使用刷新令牌自动刷新它。
第四步:查找你的组织 ID
CRM/项目组织 ID:
bash
在 .env 中设置 clientid、clientsecret、refresh_token 后:
zoho raw GET /crm/v7/org | jq .org[0].id
会议组织 ID:
登录 Zoho Meeting → 管理员设置 → 在 URL 或设置页面中查找组织 ID。它与 CRM 组织 ID 不同。
第五步:配置 .env
在技能目录中创建 .env:
bash
ZOHOCLIENTID=1000.XXXXXXXXXXXXXXXXXXXXXXXXX
ZOHOCLIENTSECRET=你的客户端密钥
ZOHOREFRESHTOKEN=1000.你的刷新令牌
ZOHOORGID=123456789 # CRM/项目组织 ID
ZOHOMEETINGORG_ID=987654321 # 会议组织 ID(与 CRM 不同)
ZOHOCRMDOMAIN=https://www.zohoapis.com
ZOHOPROJECTSDOMAIN=https://projectsapi.zoho.com/restapi
ZOHOMEETINGDOMAIN=https://meeting.zoho.com
ZOHOACCOUNTSURL=https://accounts.zoho.com
如果你使用的是非美国数据中心(例如 .eu、.in、.com.au),请调整域名 URL。
OAuth 作用域参考
| 作用域 | 用途 |
|---|
| ZohoCRM.modules.ALL | 读/写 CRM 记录(交易、联系人、潜在客户等) |
| ZohoCRM.settings.ALL |
读取 CRM 字段定义和组织设置 |
| ZohoProjects.projects.ALL | 读/写项目 |
| ZohoProjects.tasks.ALL | 读/写任务、里程碑、缺陷、时间日志 |
| ZohoMeeting.recording.READ | 列出和访问会议录制文件 |
| ZohoMeeting.meeting.READ | 列出会议和会话详情 |
| ZohoMeeting.meetinguds.READ | 下载录制文件 |
| ZohoFiles.files.READ | 下载文件(录制文件、转录文本) |
如果你只需要 CRM 或只需要会议,可以请求更少的作用域。授权 URL 的作用域参数以逗号分隔。
身份验证故障排除
- - invalidcode → 授权码已过期(2 分钟有效期)。重新执行第二步。
- invalidclient → 客户端 ID 错误,或你的数据中心的 accounts-server URL 错误。
- invalidredirecturi → curl 中的 redirect_uri 必须与你在 API 控制台中注册的完全匹配。
- 令牌刷新失败 → 刷新令牌可能已被撤销。重新执行第二至第三步以获取新令牌。
- Given URL is wrong → 你访问了错误的数据中心 API 域名。
CRM 命令
bash
列出任何模块的记录
zoho crm list Deals
zoho crm list Deals page=1&per
page=5&sortby=Created
Time&sortorder=desc
zoho crm list Contacts
zoho crm list Leads
获取特定记录
zoho crm get Deals 1234567890
按条件搜索
zoho crm search Deals (Stage:equals:Closed Won)
zoho crm search Contacts (Email:contains:@acme.com)
zoho crm search Leads (Lead_Source:equals:Web)
创建记录
zoho crm create Contacts {data:[{Last
Name:Smith,FirstName:John,Email:j@co.com}]}
zoho crm create Deals {data:[{Deal_Name:New Project,Stage:Qualification,Amount:50000}]}
更新记录
zoho crm update Deals 1234567890 {data:[{Stage:Closed Won}]}
删除记录
zoho crm delete Deals 1234567890
CRM 模块
潜在客户、联系人、客户、交易、任务、事件、通话、备注、产品、报价、销售订单、采购订单、发票
搜索运算符
等于、不等于、以...开头、包含、不包含、在...中、不在...中、介于、大于、小于
项目命令
bash
列出所有项目
zoho proj list
获取项目详情
zoho proj get 12345678
任务
zoho proj tasks 12345678
zoho proj create-task 12345678 name=修复+登录+错误&priority=High&start_date=01-27-2026
zoho proj update-task 12345678 98765432 percent_complete=50
其他
zoho proj milestones 12345678
zoho proj tasklists 12345678
zoho proj bugs 12345678
zoho proj timelogs 12345678
任务字段
名称、开始日期(MM-DD-YYYY)、结束日期、优先级(无/低/中/高)、负责人、描述、任务列表 ID、完成百分比
##