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

常用事件

EventDescription
meeting.started
Meeting has started
meeting.ended
Meeting has ended
meeting.participant_joined
Participant joined meeting
recording.completed
Cloud recording ready
user.created
New user added
EventDescription
meeting.started
会议已开始
meeting.ended
会议已结束
meeting.participant_joined
参会者加入会议
recording.completed
云录制已就绪
user.created
新增用户

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出品)

TypeRepositoryStars
Node.jswebhook-sample34
PostgreSQLwebhook-to-postgres5
Go/FiberGo-Webhooks-
Header Authzoom-webhook-verification-headers-
类型仓库星数
Node.jswebhook-sample34
PostgreSQLwebhook-to-postgres5
Go/FiberGo-Webhooks-
Header Authzoom-webhook-verification-headers-

Community

社区贡献

LanguageRepositoryDescription
Laravelbinary-cats/laravel-webhooksLaravel webhook handler
AWS Lambdasplunk/zoom-webhook-to-hecServerless to Splunk HEC
Node.jsWill4950/zoom-webhook-listenerWebhook forwarder
Express+Redisojusave/eventSubscriptionPlaygroundSocket.io + Redis
语言仓库描述
Laravelbinary-cats/laravel-webhooksLaravel webhook处理器
AWS Lambdasplunk/zoom-webhook-to-hec对接Splunk HEC的无服务实现
Node.jsWill4950/zoom-webhook-listenerWebhook转发器
Express+Redisojusave/eventSubscriptionPlaygroundSocket.io + Redis实现

Multi-Language Samples (by tanchunsiong)

多语言示例(tanchunsiong贡献)

Resources

资源

Environment Variables

环境变量

  • See references/environment-variables.md for standardized
    .env
    keys and where to find each value.
  • 参见 references/environment-variables.md 了解标准化的
    .env
    键名以及各值的获取位置。