Vraag vroegtijdige toegang aan

Vul je voornaam en je zakelijke e-mailadres in. We sturen je een link om je aanvraag voor toegang tot Tajo te bevestigen.

Zoom-connector

Connectorstatus: Gepland Nog niet gebouwd. Tajo draait deze connector vandaag niet.

Illustratie · voorbeelddata

Voorbeeld van synchronisatie

Eén record controleren

Bron

Zoom

Connectorstatus: Gepland

Bestemming

Je andere tool

Connectorstatus: Eigen tool

BronveldDoelveldVoorbeeldwaarde
record.id source_id record_1042
record.updated_at updated_at 2026-10-18T08:00:00Z
record.value value sample_value
  1. Opstellen
  2. Eén record controleren
  3. Deze versie goedkeuren

Statussen gelden per connector en garanderen niet dat deze synchronisatie klaar is. De velden zijn illustratief. Controleer het echte schema en de rechten voordat een synchronisatie draait.

Verbind Zoom met Brevo via Tajo om automatisch vergaderingsdeelnemers en webinardeelnemers als contacten te synchroniseren, follow-up-sequenties na vergaderingen te triggeren en engagementmetrics te volgen voor je marketingautomatiseringen.

Overzicht

EigenschapWaarde
PlatformZoom
CategorieVideo Conferencing (Custom)
SetupcomplexiteitGemiddeld
Officiële integratieNee
Gesynchroniseerde dataDeelnemers, Events, Webinars, Contacten
Auth-methodeOAuth 2.0 / Server-to-Server OAuth

Functies

  • Deelnemerssynchronisatie - Maak automatisch Brevo-contacten aan vanuit vergaderingsdeelnemers
  • Webinar-attendee-capture - Synchroniseer webinarregistranten en -deelnemers
  • Vergader-event-triggers - Activeer automatiseringen bij start, einde en opname van vergaderingen
  • Engagement-tracking - Volg aanwezigheidsduur en participatiemetrics
  • Webinar-follow-up - Trigger gerichte e-mailsequenties op basis van webinar-aanwezigheid
  • Opname-notificaties - Verstuur opnamelinks via Brevo-e-mailcampagnes

Vereisten

Voordat je begint, zorg dat je beschikt over:

  1. Een Zoom-account (Pro-plan of hoger)
  2. Een Zoom Server-to-Server OAuth-app of OAuth-app via Zoom App Marketplace
  3. Een Brevo-account met API-toegang
  4. Een Tajo-account met connector-rechten

Authenticatie

Server-to-Server OAuth (aanbevolen)

Terminal window
# Create a Server-to-Server OAuth app at marketplace.zoom.us
export ZOOM_ACCOUNT_ID=your_account_id
export ZOOM_CLIENT_ID=your_client_id
export ZOOM_CLIENT_SECRET=your_client_secret
// Get access token via Server-to-Server OAuth
const tokenResponse = await fetch('https://zoom.us/oauth/token', {
method: 'POST',
headers: {
'Authorization': `Basic ${Buffer.from(
`${process.env.ZOOM_CLIENT_ID}:${process.env.ZOOM_CLIENT_SECRET}`
).toString('base64')}`,
'Content-Type': 'application/x-www-form-urlencoded'
},
body: new URLSearchParams({
grant_type: 'account_credentials',
account_id: process.env.ZOOM_ACCOUNT_ID
})
});
const { access_token } = await tokenResponse.json();

OAuth 2.0 (op gebruikersniveau)

// Authorization URL for user-level OAuth
const authUrl = 'https://zoom.us/oauth/authorize?' +
new URLSearchParams({
client_id: process.env.ZOOM_CLIENT_ID,
redirect_uri: 'https://your-app.com/callback',
response_type: 'code'
});
// Exchange code for tokens
const tokenResponse = await fetch('https://zoom.us/oauth/token', {
method: 'POST',
headers: {
'Authorization': `Basic ${Buffer.from(
`${process.env.ZOOM_CLIENT_ID}:${process.env.ZOOM_CLIENT_SECRET}`
).toString('base64')}`,
'Content-Type': 'application/x-www-form-urlencoded'
},
body: new URLSearchParams({
grant_type: 'authorization_code',
code: authorizationCode,
redirect_uri: 'https://your-app.com/callback'
})
});

Configuratie

Basisinstelling

connectors:
zoom:
enabled: true
account_id: "${ZOOM_ACCOUNT_ID}"
client_id: "${ZOOM_CLIENT_ID}"
client_secret: "${ZOOM_CLIENT_SECRET}"
sync:
participants: true
webinars: true
recordings: true
webhook:
secret_token: "${ZOOM_WEBHOOK_SECRET}"
verification_token: "${ZOOM_VERIFICATION_TOKEN}"
lists:
meeting_participants: 15
webinar_attendees: 16
webinar_registrants: 17

Veldmapping

field_mapping:
email: email
name: FIRSTNAME
join_time: MEETING_JOIN_DATE
duration: MEETING_DURATION
webinar_title: WEBINAR_NAME
attendance_status: ATTENDANCE_STATUS
registration_source: UTM_SOURCE

API-endpoints

EndpointMethodBeschrijving
https://api.zoom.us/v2/usersGETGebruikers opvragen
https://api.zoom.us/v2/users/{userId}/meetingsGETVergaderingen opvragen
https://api.zoom.us/v2/meetings/{meetingId}GETVergaderingsdetails ophalen
https://api.zoom.us/v2/past_meetings/{meetingId}/participantsGETDeelnemers van afgelopen vergadering opvragen
https://api.zoom.us/v2/users/{userId}/webinarsGETWebinars opvragen
https://api.zoom.us/v2/webinars/{webinarId}/registrantsGETWebinarregistranten opvragen
https://api.zoom.us/v2/webinars/{webinarId}/participantsGETWebinardeelnemers opvragen
https://api.zoom.us/v2/meetings/{meetingId}/recordingsGETVergaderingsopnames ophalen
https://api.zoom.us/v2/webhooksPOSTAbonneren op webhooks

Codevoorbeelden

Connector initialiseren

import { TajoClient } from '@tajo/sdk';
const tajo = new TajoClient({
apiKey: process.env.TAJO_API_KEY,
brevoApiKey: process.env.BREVO_API_KEY
});
await tajo.connectors.connect('zoom', {
accountId: process.env.ZOOM_ACCOUNT_ID,
clientId: process.env.ZOOM_CLIENT_ID,
clientSecret: process.env.ZOOM_CLIENT_SECRET
});

Vergaderingsdeelnemers synchroniseren

// Retrieve past meeting participants
const response = await fetch(
`https://api.zoom.us/v2/past_meetings/${meetingId}/participants`,
{
headers: {
'Authorization': `Bearer ${accessToken}`,
'Content-Type': 'application/json'
}
}
);
const { participants } = await response.json();
for (const participant of participants) {
if (participant.user_email) {
await tajo.contacts.sync({
email: participant.user_email,
attributes: {
FIRSTNAME: participant.name,
MEETING_DURATION: participant.duration,
MEETING_JOIN_DATE: participant.join_time,
ATTENDANCE_STATUS: 'attended'
},
listIds: [15]
});
}
}

Webinardeelnemers synchroniseren

// Get webinar attendees and sync to Brevo
const attendeesResponse = await fetch(
`https://api.zoom.us/v2/past_webinars/${webinarId}/participants`,
{
headers: { 'Authorization': `Bearer ${accessToken}` }
}
);
const { participants: attendees } = await attendeesResponse.json();
for (const attendee of attendees) {
await tajo.contacts.sync({
email: attendee.user_email,
attributes: {
FIRSTNAME: attendee.name,
WEBINAR_NAME: webinarTitle,
ATTENDANCE_STATUS: 'attended',
MEETING_DURATION: attendee.duration
},
listIds: [16]
});
}

Zoom-webhooks afhandelen

app.post('/webhooks/zoom', async (req, res) => {
// Handle Zoom URL validation challenge
if (req.body.event === 'endpoint.url_validation') {
const hashForValidation = crypto
.createHmac('sha256', process.env.ZOOM_WEBHOOK_SECRET)
.update(req.body.payload.plainToken)
.digest('hex');
return res.json({
plainToken: req.body.payload.plainToken,
encryptedToken: hashForValidation
});
}
// Verify webhook signature
const message = `v0:${req.headers['x-zm-request-timestamp']}:${JSON.stringify(req.body)}`;
const hash = crypto
.createHmac('sha256', process.env.ZOOM_WEBHOOK_SECRET)
.update(message)
.digest('hex');
const signature = `v0=${hash}`;
if (req.headers['x-zm-signature'] !== signature) {
return res.status(401).send('Unauthorized');
}
const { event, payload } = req.body;
await tajo.connectors.handleWebhook('zoom', {
topic: event,
payload: payload
});
res.status(200).send('OK');
});

Rate limits

CategorieLimietOpmerkingen
Lichte API-calls30 req/secGET user, meeting info
Gemiddelde API-calls20 req/secLijsten met deelnemers, webinars
Zware API-calls10 req/secRapporten, opnames
Daglimiet5.000+Afhankelijk van planniveau

Rate limit-headers

Zoom retourneert X-RateLimit-Limit-, X-RateLimit-Remaining- en Retry-After-headers. Implementeer backoff-logica op basis van deze headers om 429-fouten te voorkomen.

Probleemoplossing

ProbleemOorzaakOplossing
401 UnauthorizedToken verlopenVernieuw Server-to-Server OAuth-token
Ontbrekende deelnemersVergadering niet beëindigdWacht tot de vergadering eindigt voor volledige data
Webhook-validatie misluktVerkeerd secretVerifieer webhook secret in Zoom Marketplace
Geen e-maildataGast-deelnemersSchakel registratie in om e-mails te capturen
Rate limit 429Te veel requestsImplementeer exponentiële backoff

Debugmodus

connectors:
zoom:
debug: true
log_level: verbose
log_webhooks: true

Best practices

  1. Gebruik Server-to-Server OAuth - Eenvoudigere authenticatie zonder gebruikersinteractie
  2. Schakel webinarregistratie in - Vereist om e-mailadressen van deelnemers te capturen
  3. Verwerk na het einde van de vergadering - Deelnemersdata is pas compleet nadat vergaderingen eindigen
  4. Segmenteer per eventtype - Wijs verschillende Brevo-lijsten toe voor vergaderingen vs. webinars
  5. Volg engagementmetrics - Gebruik duur en jointijd voor lead scoring
  6. Verstuur opname-follow-ups - Automatiseer opnamelinkbezorging via Brevo

Beveiliging

  • OAuth 2.0 - Server-to-Server- of user-level-OAuth-authenticatie
  • Webhook-verificatie - HMAC-SHA256-signatureverificatie
  • URL-validatie - Challenge-response-verificatie voor webhook-endpoints
  • Gescoopte rechten - Vraag minimaal vereiste OAuth-scopes aan
  • Tokenrotatie - Server-to-Server-tokens vervallen automatisch (1 uur)
  • Versleuteld transport - TLS 1.2+ voor alle API-communicatie

Gerelateerde bronnen

Vraag vroegtijdige toegang aan

Vul je voornaam en je zakelijke e-mailadres in. We sturen je een link om je aanvraag voor toegang tot Tajo te bevestigen.

AI-assistent

Hallo! Stel me vragen over de documentatie.

Deze pagina als Markdown: zoom.md

Markdown laden…
Openen in Claude Openen in ChatGPT