iiuniversitet.ruЦентр обучения нейросетямОткрыть каталог

Вебхуки Zoom: приём событий

Справочник по вебхукам Zoom: как подписаться на события встреч и записей, проверить подпись запроса и обработать доставку.

СкиллAnthropic (партнёр: Zoom)ClaudeMITНужен терминалПроверка не требуется
Что делает
Справочник по вебхукам Zoom: как подписаться на события встреч и записей, проверить подпись запроса и обработать доставку.
Когда брать
Когда нужно, чтобы ваш сервис автоматически получал события Zoom: начало и конец встречи, вход участников, готовую запись.
Когда не брать
Если нужна постоянная связь с минимальной задержкой без публичного адреса: тогда смотри скилл про WebSockets.
Пример запроса
Настрой приём вебхуков Zoom с проверкой подписи, чтобы после каждой встречи мы получали уведомление о готовой записи.
Нужно подключить
терминал

Входит в плагин zoom-plugin. В Cowork и Claude Code можно поставить плагин целиком.

Как включить

  1. Скачайте архив и распакуйте его.
  2. Положите папку setup-zoom-webhooks в ~/.claude/skills/.
  3. Откройте Claude Code и опишите задачу своими словами: Claude подхватит скилл по описанию.

Текст

---
name: setup-zoom-webhooks
description: Справочный скилл по вебхукам Zoom. Используй после маршрутизации в событийный рабочий процесс, когда реализуешь подписки, проверку подписи, обработку доставки, повторные попытки или выбор типов событий.
triggers:
  - "zoom webhook"
  - "webhook signature"
  - "x-zm-signature"
  - "event subscription"
  - "recording completed webhook"
---

/setup-zoom-webhooks

Справочный материал о доставке событий Zoom по HTTP. Сначала обращайся к скиллам рабочих процессов, а этот файл используй за подробностями о проверке, подписках и доставке.

Предварительные требования

  • Приложение Zoom с включёнными подписками на события (Event Subscriptions)
  • HTTPS-адрес для приёма вебхуков
  • Секретный токен вебхука для проверки подписи

Нужна помощь с аутентификацией? Настройку OAuth смотри в скилле [zoom-oauth](../oauth/SKILL.md).

Быстрый старт

// 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();
});

Частые события

СобытиеОписание
meeting.startedВстреча началась
meeting.endedВстреча закончилась
meeting.participant_joinedУчастник вошёл во встречу
recording.completedОблачная запись готова
user.createdДобавлен новый пользователь

Подробные справочники

  • [references/events.md](references/events.md) - Полный справочник типов событий
  • [references/verification.md](references/verification.md) - Проверка адреса вебхука
  • [references/subscriptions.md](references/subscriptions.md) - API подписок на события

Устранение неполадок

  • [RUNBOOK.md](RUNBOOK.md) - Пятиминутная предварительная проверка перед глубокой отладкой
  • [troubleshooting/common-issues.md](troubleshooting/common-issues.md) - Проверка подписи, повторные попытки, проверка адреса

Примеры репозиториев

Официальные (от Zoom)

ТипРепозиторийЗвёзды
Node.jswebhook-sample34
PostgreSQLwebhook-to-postgres5
Go/FiberGo-Webhooks-
Header Authzoom-webhook-verification-headers-

Сообщество

ЯзыкРепозиторийОписание
Laravelbinary-cats/laravel-webhooksОбработчик вебхуков для Laravel
AWS Lambdasplunk/zoom-webhook-to-hecБессерверная передача в Splunk HEC
Node.jsWill4950/zoom-webhook-listenerПересылка вебхуков
Express+Redisojusave/eventSubscriptionPlaygroundSocket.io + Redis

Примеры на разных языках (автор tanchunsiong)

Полный список: см. [general/references/community-repos.md](../general/references/community-repos.md)

Ресурсы

Переменные окружения

  • Стандартизированные ключи .env и где найти каждое значение — в [references/environment-variables.md](references/environment-variables.md).

Перевод: iiuniversitet. Оригинал: https://github.com/anthropics/knowledge-work-plugins/tree/main/partner-built/zoom-plugin/skills/webhooks, лицензия MIT. Изменения: перевод на русский язык.

Оригинал на английском
---
name: setup-zoom-webhooks
description: Reference skill for Zoom webhooks. Use after routing to an event-driven workflow when implementing subscriptions, signature verification, delivery handling, retries, or event-type selection.
triggers:
  - "zoom webhook"
  - "webhook signature"
  - "x-zm-signature"
  - "event subscription"
  - "recording completed webhook"
---

# /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.

## 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](../oauth/SKILL.md)** skill for OAuth setup.

## 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();
});
```

## Common Events

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

## Detailed References

- **[references/events.md](references/events.md)** - Complete event types reference
- **[references/verification.md](references/verification.md)** - Webhook URL validation
- **[references/subscriptions.md](references/subscriptions.md)** - Event subscriptions API

## Troubleshooting

- **[RUNBOOK.md](RUNBOOK.md)** - 5-minute preflight checks before deep debugging
- **[troubleshooting/common-issues.md](troubleshooting/common-issues.md)** - Signature verification, retries, URL validation

## Sample Repositories

### Official (by Zoom)

| Type | Repository | Stars |
|------|------------|-------|
| Node.js | [webhook-sample](https://github.com/zoom/webhook-sample) | 34 |
| PostgreSQL | [webhook-to-postgres](https://github.com/zoom/webhook-to-postgres) | 5 |
| Go/Fiber | [Go-Webhooks](https://github.com/zoom/Go-Webhooks) | - |
| Header Auth | [zoom-webhook-verification-headers](https://github.com/zoom/zoom-webhook-verification-headers) | - |

### Community

| Language | Repository | Description |
|----------|------------|-------------|
| Laravel | [binary-cats/laravel-webhooks](https://github.com/binary-cats/laravel-webhooks) | Laravel webhook handler |
| AWS Lambda | [splunk/zoom-webhook-to-hec](https://github.com/splunk/zoom-webhook-to-hec) | Serverless to Splunk HEC |
| Node.js | [Will4950/zoom-webhook-listener](https://github.com/Will4950/zoom-webhook-listener) | Webhook forwarder |
| Express+Redis | [ojusave/eventSubscriptionPlayground](https://github.com/ojusave/eventSubscriptionPlayground) | Socket.io + Redis |

### Multi-Language Samples (by tanchunsiong)

| Language | Repository |
|----------|------------|
| Node.js | [Zoom-Webhook-Signature-OAuth-and-REST-API-Development-Sample-In-NodeJS](https://github.com/tanchunsiong/Zoom-Webhook-Signature-OAuth-and-REST-API-Development-Sample-In-NodeJS) |
| C# | [Zoom-Webhook-Signature-OAuth-and-REST-API-Development-Sample-In-ASP.NET-Core-C-](https://github.com/tanchunsiong/Zoom-Webhook-Signature-OAuth-and-REST-API-Development-Sample-In-ASP.NET-Core-C-) |
| Java | [Zoom-Webhook-Signature-OAuth-and-REST-API-Development-Sample-In-Java-Spring-Boot](https://github.com/tanchunsiong/Zoom-Webhook-Signature-OAuth-and-REST-API-Development-Sample-In-Java-Spring-Boot) |
| Python | [Zoom-Webhook-Signature-OAuth-and-REST-API-Development-Sample-In-Python](https://github.com/tanchunsiong/Zoom-Webhook-Signature-OAuth-and-REST-API-Development-Sample-In-Python) |
| PHP | [Zoom-Webhook-Signature-OAuth-and-REST-API-Development-Sample-In-PHP](https://github.com/tanchunsiong/Zoom-Webhook-Signature-OAuth-and-REST-API-Development-Sample-In-PHP) |

**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](references/environment-variables.md) for standardized `.env` keys and where to find each value.

Источник: anthropics/knowledge-work-plugins / zoom-plugin / setup-zoom-webhooks ↗. Ссылка проверена 2026-10-10.