Σύνδεσμος Zoom

Συνδέστε το Zoom με το Brevo μέσω Tajo για αυτόματο συγχρονισμό συμμετεχόντων σύσκεψης και παρευρισκόμενων σε webinar ως επαφές, ενεργοποίηση ακολουθιών παρακολούθησης μετά τη σύσκεψη και παρακολούθηση μετρικών αφοσίωσης για τους αυτοματισμούς marketing σας.

Επισκόπηση

ΙδιότηταΤιμή
ΠλατφόρμαZoom
ΚατηγορίαΤηλεδιάσκεψη (Προσαρμοσμένο)
Πολυπλοκότητα ΡύθμισηςΜεσαία
Επίσημη ΕνσωμάτωσηΌχι
Δεδομένα που ΣυγχρονίζονταιΣυμμετέχοντες, Εκδηλώσεις, Webinars, Επαφές
Μέθοδος ΠιστοποίησηςOAuth 2.0 / Server-to-Server OAuth

Χαρακτηριστικά

  • Συγχρονισμός συμμετεχόντων - Αυτόματη δημιουργία επαφών Brevo από συμμετέχοντες σύσκεψης
  • Καταγραφή παρευρισκόμενων webinar - Συγχρονισμός εγγεγραμμένων και παρευρισκόμενων σε webinar
  • Ενεργοποιητές εκδηλώσεων σύσκεψης - Εκκίνηση αυτοματισμών κατά έναρξη, λήξη σύσκεψης και εκδηλώσεις ηχογράφησης
  • Παρακολούθηση αφοσίωσης - Παρακολούθηση διάρκειας παρουσίας και μετρικών συμμετοχής
  • Παρακολούθηση webinar - Ενεργοποίηση στοχευμένων ακολουθιών email βάσει παρουσίας σε webinar
  • Ειδοποιήσεις ηχογράφησης - Αποστολή συνδέσμων ηχογράφησης μέσω καμπανιών email Brevo

Προαπαιτούμενα

Πριν ξεκινήσετε, βεβαιωθείτε ότι διαθέτετε:

  1. Λογαριασμό Zoom (Pro πλάνο ή παραπάνω)
  2. Εφαρμογή Zoom Server-to-Server OAuth ή OAuth μέσω Zoom App Marketplace
  3. Λογαριασμό Brevo με πρόσβαση API
  4. Λογαριασμό Tajo με δικαιώματα συνδέσμου

Πιστοποίηση

Server-to-Server OAuth (Συνιστάται)

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 (Επίπεδο Χρήστη)

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

Διαμόρφωση

Βασική Ρύθμιση

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

Αντιστοίχιση Πεδίων

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

Endpoints API

EndpointΜέθοδοςΠεριγραφή
https://api.zoom.us/v2/usersGETΛίστα χρηστών
https://api.zoom.us/v2/users/{userId}/meetingsGETΛίστα συσκέψεων
https://api.zoom.us/v2/meetings/{meetingId}GETΛήψη λεπτομερειών σύσκεψης
https://api.zoom.us/v2/past_meetings/{meetingId}/participantsGETΛίστα συμμετεχόντων παρελθοντικής σύσκεψης
https://api.zoom.us/v2/users/{userId}/webinarsGETΛίστα webinars
https://api.zoom.us/v2/webinars/{webinarId}/registrantsGETΛίστα εγγεγραμμένων webinar
https://api.zoom.us/v2/webinars/{webinarId}/participantsGETΛίστα συμμετεχόντων webinar
https://api.zoom.us/v2/meetings/{meetingId}/recordingsGETΛήψη ηχογραφήσεων σύσκεψης
https://api.zoom.us/v2/webhooksPOSTΕγγραφή σε webhooks

Παραδείγματα Κώδικα

Αρχικοποίηση Συνδέσμου

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

Συγχρονισμός Συμμετεχόντων Σύσκεψης

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

Συγχρονισμός Παρευρισκόμενων Webinar

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

Χειρισμός 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');
});

Όρια Ρυθμού

ΚατηγορίαΌριοΣημειώσεις
Ελαφριές κλήσεις API30 αιτ./δευτ.GET χρήστη, πληροφορίες σύσκεψης
Μεσαίες κλήσεις API20 αιτ./δευτ.Λίστα συμμετεχόντων, webinars
Βαριές κλήσεις API10 αιτ./δευτ.Αναφορές, ηχογραφήσεις
Ημερήσιο όριο5.000+Εξαρτάται από το επίπεδο πλάνου

Headers Ορίου Ρυθμού

Το Zoom επιστρέφει headers X-RateLimit-Limit, X-RateLimit-Remaining και Retry-After. Εφαρμόστε λογική backoff βάσει αυτών των headers για αποφυγή σφαλμάτων 429.

Αντιμετώπιση Προβλημάτων

ΠρόβλημαΑιτίαΛύση
401 UnauthorizedΛηγμένο tokenΑνανεώστε Server-to-Server OAuth token
Λείπουν συμμετέχοντεςΗ σύσκεψη δεν έχει λήξειΑναμείνετε τη λήξη σύσκεψης για πλήρη δεδομένα
Αποτυχία επικύρωσης webhookΛανθασμένο μυστικόΕπαληθεύστε το μυστικό webhook στο Zoom Marketplace
Δεν υπάρχουν δεδομένα emailΕπισκέπτες συμμετέχοντεςΕνεργοποιήστε εγγραφή για καταγραφή emails
Όριο ρυθμού 429Υπερβολικά πολλά αιτήματαΕφαρμόστε εκθετική καθυστέρηση

Λειτουργία Εντοπισμού Σφαλμάτων

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

Βέλτιστες Πρακτικές

  1. Χρησιμοποιήστε Server-to-Server OAuth - Απλούστερη πιστοποίηση χωρίς αλληλεπίδραση χρήστη
  2. Ενεργοποιήστε εγγραφή webinar - Απαιτείται για καταγραφή διευθύνσεων email παρευρισκόμενων
  3. Επεξεργαστείτε μετά τη λήξη σύσκεψης - Τα δεδομένα συμμετεχόντων είναι πλήρη μόνο μετά τη λήξη συσκέψεων
  4. Τμηματοποιήστε κατά τύπο εκδήλωσης - Αναθέστε διαφορετικές λίστες Brevo για συσκέψεις έναντι webinars
  5. Παρακολουθήστε μετρικές αφοσίωσης - Χρησιμοποιήστε διάρκεια και ώρα σύνδεσης για βαθμολόγηση lead
  6. Αποστέλλετε παρακολούθηση ηχογράφησης - Αυτοματοποιήστε παράδοση συνδέσμου ηχογράφησης μέσω Brevo

Ασφάλεια

  • OAuth 2.0 - Server-to-Server ή OAuth πιστοποίηση επιπέδου χρήστη
  • Επικύρωση webhook - Επικύρωση υπογραφής HMAC-SHA256
  • Επικύρωση URL - Επαλήθευση challenge-response για endpoints webhook
  • Δικαιώματα με εύρος - Αίτηση ελάχιστων απαιτούμενων OAuth scopes
  • Εναλλαγή token - Τα Server-to-Server tokens λήγουν αυτόματα (1 ώρα)
  • Κρυπτογραφημένη μεταφορά - TLS 1.2+ για όλες τις επικοινωνίες API

Σχετικοί Πόροι

Subscribe to updates

developer-docs

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

auto-detect
AI Βοηθός

Γεια! Ρωτήστε με οτιδήποτε για την τεκμηρίωση.