Zoom Connector

Poveži Zoom z Brevo prek Tajo za samodejno sinhronizacijo udeležencev sestankov in obiskovalcev spletnih seminarjev kot stikov, sprožanje zaporedij nadaljnjih ukrepov po sestanku in sledenje metrikam angažiranosti za marketinške avtomatizacije.

Pregled

LastnostVrednost
PlatformaZoom
KategorijaVideo konference (po meri)
Zahtevnost nastavitveSrednja
Uradna integracijaNe
Sinhronizirani podatkiUdeleženci, dogodki, spletni seminarji, stiki
Metoda avtentikacijeOAuth 2.0 / Server-to-Server OAuth

Funkcionalnosti

  • Sinhronizacija udeležencev – samodejno ustvari stike Brevo iz udeležencev sestankov
  • Zajem obiskovalcev spletnih seminarjev – sinhroniziraj registrante in obiskovalce spletnih seminarjev
  • Sprožilci dogodkov sestankov – sproži avtomatizacije ob začetku, koncu in snemalnih dogodkih sestankov
  • Sledenje angažiranosti – sledi trajanju prisotnosti in metrikam udeležbe
  • Nadaljevanje po spletnem seminarju – sproži ciljana e-mailna zaporedja glede na prisotnost na spletnem seminarju
  • Obvestila o posnetkih – pošlji povezave do posnetkov prek e-mailnih kampanj Brevo

Predpogoji

Preden začneš, se prepričaj, da imaš:

  1. Račun Zoom (plan Pro ali višji)
  2. Aplikacijo Server-to-Server OAuth ali OAuth aplikacijo Zoom prek Zoom App Marketplace
  3. Brevo račun z dostopom do API
  4. Tajo račun z dovoljenji za konektorje

Avtentikacija

Server-to-Server OAuth (priporočeno)

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 (na ravni uporabnika)

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

Konfiguracija

Osnovna nastavitev

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

Preslikava polj

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

Končne točke API

Končna točkaMetodaOpis
https://api.zoom.us/v2/usersGETSeznam uporabnikov
https://api.zoom.us/v2/users/{userId}/meetingsGETSeznam sestankov
https://api.zoom.us/v2/meetings/{meetingId}GETPridobi podrobnosti sestanka
https://api.zoom.us/v2/past_meetings/{meetingId}/participantsGETSeznam udeležencev preteklega sestanka
https://api.zoom.us/v2/users/{userId}/webinarsGETSeznam spletnih seminarjev
https://api.zoom.us/v2/webinars/{webinarId}/registrantsGETSeznam registrantov spletnega seminarja
https://api.zoom.us/v2/webinars/{webinarId}/participantsGETSeznam udeležencev spletnega seminarja
https://api.zoom.us/v2/meetings/{meetingId}/recordingsGETPridobi posnetke sestanka
https://api.zoom.us/v2/webhooksPOSTNaroči se na webhooks

Primeri kode

Inicializacija konektorja

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

Sinhronizacija udeležencev sestankov

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

Sinhronizacija obiskovalcev spletnih seminarjev

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

Obravnava webhooks Zoom

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');
});

Omejitve hitrosti

KategorijaOmejitevOpombe
Lahki klici API30 zahtevkov/sGET informacije o uporabniku, sestanku
Srednji klici API20 zahtevkov/sSeznam udeležencev, spletnih seminarjev
Težki klici API10 zahtevkov/sPoročila, posnetki
Dnevna omejitev5.000+Odvisno od ravni plana

Glave omejitev hitrosti

Zoom vrača glave X-RateLimit-Limit, X-RateLimit-Remaining in Retry-After. Za izogibanje napakam 429 implementiraj logiko odloga na osnovi teh glav.

Odpravljanje težav

TežavaVzrokRešitev
401 UnauthorizedPotekel žetonOsveži žeton Server-to-Server OAuth
Manjkajoči udeleženciSestanek se še ni končalPočakaj, da se sestanek konča za popolne podatke
Preverjanje webhookov neuspešnoNapačna skrivnostPreveri skrivnost webhooka v Zoom Marketplace
Brez podatkov o e-mailuGostje brez registracijeOmogoči registracijo za zajem e-mailov
Omejitev hitrosti 429Preveč zahtevkovImplementiraj eksponentni odlog

Način odpravljanja napak

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

Najboljše prakse

  1. Uporabi Server-to-Server OAuth – enostavnejša avtentikacija brez interakcije z uporabnikom
  2. Omogoči registracijo za spletne seminarje – potrebno za zajem e-mailnih naslovov obiskovalcev
  3. Obdeluj po zaključku sestanka – podatki o udeležencih so popolni šele po koncu sestankov
  4. Segmentiraj po vrsti dogodka – za sestanke in spletne seminarje dodeli različne sezname Brevo
  5. Sledi metrikam angažiranosti – trajanje in čas pridružitve uporabi za ocenjevanje potencialnih strank
  6. Pošlji nadaljevanja s posnetki – z Brevo avtomatiziraj dostavo povezav do posnetkov

Varnost

  • OAuth 2.0 – avtentikacija Server-to-Server ali na ravni uporabnika OAuth
  • Preverjanje webhooks – preverjanje podpisa HMAC-SHA256
  • Preverjanje URL – preverjanje z odzivom na izziv za končne točke webhooks
  • Obsegasta dovoljenja – zahtevaj minimalne zahtevane obsege OAuth
  • Rotacija žetonov – žetoni Server-to-Server samodejno potečejo (1 ura)
  • Šifrirani prenos – TLS 1.2+ za vse komunikacije API

Povezani viri

Subscribe to updates

developer-docs

Drop your email or phone number — we'll send you what matters next.

auto-detect
AI pomočnik

Živjo! Vprašajte me o dokumentaciji.