Conector Zoom
Starea conectorului: Planificat Încă neconstruit. Tajo nu rulează astăzi acest conector.
Ilustrație · date de exemplu
Exemplu de sincronizare
Sursă
Zoom
Starea conectorului: Planificat
Destinație
Celălalt instrument al tău
Starea conectorului: Instrument personalizat
Maparea câmpurilor
| Câmp sursă | Câmp destinație | Valoare exemplu |
|---|---|---|
record.id | source_id | record_1042 |
record.updated_at | updated_at | 2026-10-18T08:00:00Z |
record.value | value | sample_value |
- Ciornă
- Verifică o înregistrare
- Aprobă această versiune
Stările se referă la fiecare conector și nu garantează că această sincronizare este pregătită. Câmpurile sunt ilustrative. Verifică schema și permisiunile reale înainte de sincronizare.
Conectați Zoom la Brevo prin Tajo pentru a sincroniza automat participanții la întâlniri și participanții la webinare ca contacte, a declanșa secvențe de urmărire post-întâlnire și a urmări metricile de implicare pentru automatizările de marketing.
Prezentare generală
| Proprietate | Valoare |
|---|---|
| Platformă | Zoom |
| Categorie | Conferințe video (Personalizat) |
| Complexitate configurare | Medie |
| Integrare oficială | Nu |
| Date sincronizate | Participanți, Evenimente, Webinare, Contacte |
| Metodă de autentificare | OAuth 2.0 / Server-to-Server OAuth |
Funcționalități
- Sincronizare participanți - Creați automat contacte Brevo din participanții la întâlniri
- Captură participanți webinar - Sincronizați înregistrații și participanții la webinar
- Declanșatoare evenimente întâlnire - Declanșați automatizări la începutul, sfârșitul și evenimentele de înregistrare ale întâlnirilor
- Urmărire implicare - Urmăriți durata participării și metricile de participare
- Urmărire post-webinar - Declanșați secvențe de e-mail targetate bazate pe participarea la webinar
- Notificări înregistrări - Trimiteți linkuri de înregistrare prin campaniile de e-mail Brevo
Cerințe preliminare
Înainte de a începe, asigurați-vă că aveți:
- Un cont Zoom (plan Pro sau superior)
- O aplicație Zoom Server-to-Server OAuth sau OAuth prin Zoom App Marketplace
- Un cont Brevo cu acces API
- Un cont Tajo cu permisiuni de conector
Autentificare
Server-to-Server OAuth (Recomandat)
# Create a Server-to-Server OAuth app at marketplace.zoom.usexport ZOOM_ACCOUNT_ID=your_account_idexport ZOOM_CLIENT_ID=your_client_idexport ZOOM_CLIENT_SECRET=your_client_secret// Get access token via Server-to-Server OAuthconst 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 (La nivel de utilizator)
// Authorization URL for user-level OAuthconst 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 tokensconst 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' })});Configurare
Configurare de bază
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: 17Mapare câmpuri
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_SOURCEPuncte finale API
| Punct final | Metodă | Descriere |
|---|---|---|
https://api.zoom.us/v2/users | GET | Listează utilizatorii |
https://api.zoom.us/v2/users/{userId}/meetings | GET | Listează întâlnirile |
https://api.zoom.us/v2/meetings/{meetingId} | GET | Obține detalii întâlnire |
https://api.zoom.us/v2/past_meetings/{meetingId}/participants | GET | Listează participanții la întâlnirile trecute |
https://api.zoom.us/v2/users/{userId}/webinars | GET | Listează webinarele |
https://api.zoom.us/v2/webinars/{webinarId}/registrants | GET | Listează înregistrații la webinar |
https://api.zoom.us/v2/webinars/{webinarId}/participants | GET | Listează participanții la webinar |
https://api.zoom.us/v2/meetings/{meetingId}/recordings | GET | Obține înregistrările întâlnirii |
https://api.zoom.us/v2/webhooks | POST | Abonați la webhook-uri |
Exemple de cod
Inițializare conector
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});Sincronizare participanți întâlnire
// Retrieve past meeting participantsconst 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] }); }}Sincronizare participanți webinar
// Get webinar attendees and sync to Brevoconst 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] });}Gestionare webhook-uri 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');});Limite de rată
| Categorie | Limită | Note |
|---|---|---|
| Apeluri API ușoare | 30 cereri/sec | GET utilizator, informații întâlnire |
| Apeluri API medii | 20 cereri/sec | Listare participanți, webinare |
| Apeluri API grele | 10 cereri/sec | Rapoarte, înregistrări |
| Limită zilnică | 5.000+ | Depinde de nivelul planului |
Anteturi limite de rată
Zoom returnează anteturile X-RateLimit-Limit, X-RateLimit-Remaining și Retry-After. Implementați logică de backoff bazată pe aceste anteturi pentru a evita erorile 429.
Depanare
| Problemă | Cauză | Soluție |
|---|---|---|
| 401 Neautorizat | Token expirat | Reîmprospătați token-ul Server-to-Server OAuth |
| Participanți lipsă | Întâlnire neterminată | Așteptați până la terminarea întâlnirii pentru date complete |
| Validare webhook eșuată | Secret incorect | Verificați secretul webhook în Zoom Marketplace |
| Fără date e-mail | Participanți oaspeți | Activați înregistrarea pentru a captura e-mailurile |
| Limită de rată 429 | Prea multe cereri | Implementați backoff exponențial |
Modul de depanare
connectors: zoom: debug: true log_level: verbose log_webhooks: trueBune practici
- Utilizați Server-to-Server OAuth - Autentificare mai simplă fără interacțiunea utilizatorului
- Activați înregistrarea la webinar - Necesară pentru a captura adresele de e-mail ale participanților
- Procesați după terminarea întâlnirii - Datele participanților sunt complete doar după terminarea întâlnirilor
- Segmentați după tipul evenimentului - Atribuiți liste Brevo diferite pentru întâlniri față de webinare
- Urmăriți metricile de implicare - Utilizați durata și ora de conectare pentru scorarea lead-urilor
- Trimiteți urmăriri cu înregistrări - Automatizați livrarea linkului de înregistrare prin Brevo
Securitate
- OAuth 2.0 - Autentificare OAuth Server-to-Server sau la nivel de utilizator
- Verificare webhook - Validare semnătură HMAC-SHA256
- Validare URL - Verificare provocare-răspuns pentru punctele finale webhook
- Permisiuni cu scope - Solicitați scope-urile OAuth minime necesare
- Rotație token - Token-urile Server-to-Server expiră automat (1 oră)
- Transport criptat - TLS 1.2+ pentru toate comunicațiile API