setup-zoom-webhooks
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
Chinese/setup-zoom-webhooks
/setup-zoom-webhooks
Background reference for Zoom event delivery over HTTP. Prefer workflow skills first, then use this file for verification, subscription, and delivery details.
通过HTTP传输Zoom事件的背景参考。优先使用工作流技能,随后可参考本文件了解验证、订阅和交付的详细信息。
Prerequisites
前提条件
- Zoom app with Event Subscriptions enabled
- HTTPS endpoint to receive webhooks
- Webhook secret token for verification
Need help with authentication? See the zoom-oauth skill for OAuth setup.
- 已启用事件订阅功能的Zoom应用
- 用于接收webhooks的HTTPS端点
- 用于验证的Webhook密钥令牌
需要身份认证相关帮助? 请查看 zoom-oauth 技能了解OAuth设置。
Quick Start
快速开始
javascript
// Express.js webhook handler
const crypto = require('crypto');
// Capture raw body for signature verification (avoid re-serializing JSON).
app.use(require('express').json({
verify: (req, _res, buf) => { req.rawBody = buf; }
}));
app.post('/webhook', (req, res) => {
// Verify webhook signature
const signature = req.headers['x-zm-signature'];
const timestamp = req.headers['x-zm-request-timestamp'];
const body = req.rawBody ? req.rawBody.toString('utf8') : JSON.stringify(req.body);
const payload = `v0:${timestamp}:${body}`;
const hash = crypto.createHmac('sha256', WEBHOOK_SECRET)
.update(payload).digest('hex');
if (signature !== `v0=${hash}`) {
return res.status(401).send('Invalid signature');
}
// Handle event
const { event, payload } = req.body;
console.log(`Received: ${event}`);
res.status(200).send();
});javascript
// Express.js webhook handler
const crypto = require('crypto');
// Capture raw body for signature verification (avoid re-serializing JSON).
app.use(require('express').json({
verify: (req, _res, buf) => { req.rawBody = buf; }
}));
app.post('/webhook', (req, res) => {
// Verify webhook signature
const signature = req.headers['x-zm-signature'];
const timestamp = req.headers['x-zm-request-timestamp'];
const body = req.rawBody ? req.rawBody.toString('utf8') : JSON.stringify(req.body);
const payload = `v0:${timestamp}:${body}`;
const hash = crypto.createHmac('sha256', WEBHOOK_SECRET)
.update(payload).digest('hex');
if (signature !== `v0=${hash}`) {
return res.status(401).send('Invalid signature');
}
// Handle event
const { event, payload } = req.body;
console.log(`Received: ${event}`);
res.status(200).send();
});Common Events
常用事件
| Event | Description |
|---|---|
| Meeting has started |
| Meeting has ended |
| Participant joined meeting |
| Cloud recording ready |
| New user added |
| Event | Description |
|---|---|
| 会议已开始 |
| 会议已结束 |
| 参会者加入会议 |
| 云录制已就绪 |
| 新增用户 |
Detailed References
详细参考
- references/events.md - Complete event types reference
- references/verification.md - Webhook URL validation
- references/subscriptions.md - Event subscriptions API
- references/events.md - 完整事件类型参考
- references/verification.md - Webhook URL验证
- references/subscriptions.md - 事件订阅API
Troubleshooting
故障排查
- RUNBOOK.md - 5-minute preflight checks before deep debugging
- troubleshooting/common-issues.md - Signature verification, retries, URL validation
- RUNBOOK.md - 深度调试前的5分钟预检检查
- troubleshooting/common-issues.md - 签名验证、重试、URL验证相关问题
Sample Repositories
示例仓库
Official (by Zoom)
官方(Zoom出品)
| Type | Repository | Stars |
|---|---|---|
| Node.js | webhook-sample | 34 |
| PostgreSQL | webhook-to-postgres | 5 |
| Go/Fiber | Go-Webhooks | - |
| Header Auth | zoom-webhook-verification-headers | - |
| 类型 | 仓库 | 星数 |
|---|---|---|
| Node.js | webhook-sample | 34 |
| PostgreSQL | webhook-to-postgres | 5 |
| Go/Fiber | Go-Webhooks | - |
| Header Auth | zoom-webhook-verification-headers | - |
Community
社区贡献
| Language | Repository | Description |
|---|---|---|
| Laravel | binary-cats/laravel-webhooks | Laravel webhook handler |
| AWS Lambda | splunk/zoom-webhook-to-hec | Serverless to Splunk HEC |
| Node.js | Will4950/zoom-webhook-listener | Webhook forwarder |
| Express+Redis | ojusave/eventSubscriptionPlayground | Socket.io + Redis |
| 语言 | 仓库 | 描述 |
|---|---|---|
| Laravel | binary-cats/laravel-webhooks | Laravel webhook处理器 |
| AWS Lambda | splunk/zoom-webhook-to-hec | 对接Splunk HEC的无服务实现 |
| Node.js | Will4950/zoom-webhook-listener | Webhook转发器 |
| Express+Redis | ojusave/eventSubscriptionPlayground | Socket.io + Redis实现 |
Multi-Language Samples (by tanchunsiong)
多语言示例(tanchunsiong贡献)
Full list: See general/references/community-repos.md
完整列表: 参见 general/references/community-repos.md
Resources
资源
- Webhook docs: https://developers.zoom.us/docs/api/webhooks/
- Event reference: https://developers.zoom.us/docs/api/rest/reference/zoom-api/events/
- Developer forum: https://devforum.zoom.us/
Environment Variables
环境变量
- See references/environment-variables.md for standardized keys and where to find each value.
.env
- 参见 references/environment-variables.md 了解标准化的 键名以及各值的获取位置。
.env