Zoom कनेक्टर

मीटिंग प्रतिभागियों और वेबिनार उपस्थित लोगों को कॉन्टैक्ट्स के रूप में स्वचालित रूप से सिंक करने, पोस्ट-मीटिंग फ़ॉलो-अप अनुक्रम ट्रिगर करने, और अपने मार्केटिंग ऑटोमेशन्स के लिए एंगेजमेंट मेट्रिक्स ट्रैक करने के लिए Tajo के माध्यम से Zoom को Brevo से कनेक्ट करें।

अवलोकन

गुणमान
प्लेटफ़ॉर्मZoom
श्रेणीVideo Conferencing (Custom)
सेटअप जटिलतामध्यम
आधिकारिक इंटीग्रेशननहीं
सिंक किया गया डेटाप्रतिभागी, इवेंट्स, वेबिनार्स, कॉन्टैक्ट्स
Auth MethodOAuth 2.0 / Server-to-Server OAuth

विशेषताएं

  • प्रतिभागी सिंक - मीटिंग प्रतिभागियों से Brevo कॉन्टैक्ट्स ऑटो-क्रिएट करें
  • वेबिनार उपस्थित कैप्चर - वेबिनार पंजीकरणकर्ताओं और उपस्थित लोगों को सिंक करें
  • मीटिंग इवेंट ट्रिगर्स - मीटिंग प्रारंभ, समाप्त, और रिकॉर्डिंग इवेंट्स पर ऑटोमेशन्स फ़ायर करें
  • एंगेजमेंट ट्रैकिंग - उपस्थिति अवधि और भागीदारी मेट्रिक्स ट्रैक करें
  • वेबिनार फ़ॉलो-अप - वेबिनार उपस्थिति के आधार पर लक्षित ईमेल अनुक्रम ट्रिगर करें
  • रिकॉर्डिंग सूचनाएं - Brevo ईमेल कैंपेन के माध्यम से रिकॉर्डिंग लिंक भेजें

पूर्वावश्यकताएं

शुरू करने से पहले, सुनिश्चित करें कि आपके पास है:

  1. एक Zoom खाता (Pro प्लान या ऊपर)
  2. Zoom App Marketplace के माध्यम से एक Zoom Server-to-Server OAuth ऐप या OAuth ऐप
  3. API एक्सेस वाला एक Brevo खाता
  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 (User-Level)

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

API एंडपॉइंट्स

एंडपॉइंटमेथडविवरण
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वेबिनार्स सूचीबद्ध करें
https://api.zoom.us/v2/webinars/{webinarId}/registrantsGETवेबिनार पंजीकरणकर्ता सूचीबद्ध करें
https://api.zoom.us/v2/webinars/{webinarId}/participantsGETवेबिनार प्रतिभागी सूचीबद्ध करें
https://api.zoom.us/v2/meetings/{meetingId}/recordingsGETमीटिंग रिकॉर्डिंग्स प्राप्त करें
https://api.zoom.us/v2/webhooksPOSTवेबहुक्स को सब्सक्राइब करें

कोड उदाहरण

कनेक्टर प्रारंभ करें

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

वेबिनार उपस्थित लोगों को सिंक करें

// 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 वेबहुक्स हैंडल करें

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

दर सीमाएं

श्रेणीसीमानोट्स
Light API calls30 req/secGET user, meeting info
Medium API calls20 req/secList participants, webinars
Heavy API calls10 req/secReports, recordings
दैनिक सीमा5,000+प्लान स्तर पर निर्भर

दर सीमा हेडर्स

Zoom X-RateLimit-Limit, X-RateLimit-Remaining, और Retry-After हेडर्स लौटाता है। 429 त्रुटियों से बचने के लिए इन हेडर्स के आधार पर बैकऑफ़ लॉजिक लागू करें।

समस्या निवारण

समस्याकारणसमाधान
401 Unauthorizedटोकन समाप्तServer-to-Server OAuth टोकन रीफ्रेश करें
गायब प्रतिभागीमीटिंग समाप्त नहींपूर्ण डेटा के लिए मीटिंग समाप्त होने तक प्रतीक्षा करें
Webhook सत्यापन विफलगलत secretZoom Marketplace में webhook secret सत्यापित करें
कोई ईमेल डेटा नहींअतिथि प्रतिभागीईमेल कैप्चर करने के लिए पंजीकरण सक्षम करें
दर सीमा 429बहुत अधिक अनुरोधexponential backoff लागू करें

डीबग मोड

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

सर्वोत्तम प्रथाएं

  1. Server-to-Server OAuth का उपयोग करें - उपयोगकर्ता इंटरैक्शन के बिना सरल प्रमाणीकरण
  2. वेबिनार पंजीकरण सक्षम करें - उपस्थित लोगों के ईमेल पते कैप्चर करने के लिए आवश्यक
  3. मीटिंग समाप्ति के बाद प्रोसेस करें - मीटिंग समाप्त होने के बाद ही प्रतिभागी डेटा पूर्ण होता है
  4. इवेंट प्रकार के अनुसार सेगमेंट करें - मीटिंग्स बनाम वेबिनार के लिए विभिन्न Brevo लिस्ट्स असाइन करें
  5. एंगेजमेंट मेट्रिक्स ट्रैक करें - लीड स्कोरिंग के लिए duration और join time का उपयोग करें
  6. रिकॉर्डिंग फ़ॉलो-अप भेजें - Brevo के माध्यम से रिकॉर्डिंग लिंक डिलीवरी ऑटोमेट करें

सुरक्षा

  • OAuth 2.0 - Server-to-Server या user-level OAuth प्रमाणीकरण
  • Webhook सत्यापन - HMAC-SHA256 सिग्नेचर सत्यापन
  • URL सत्यापन - webhook एंडपॉइंट्स के लिए challenge-response सत्यापन
  • Scoped अनुमतियां - न्यूनतम आवश्यक OAuth scopes का अनुरोध करें
  • टोकन रोटेशन - Server-to-Server टोकन ऑटो-एक्सपायर (1 घंटा)
  • एन्क्रिप्टेड परिवहन - सभी API संचार के लिए TLS 1.2+

संबंधित संसाधन

Subscribe to updates

developer-docs

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

auto-detect
AI Assistant

Hi! Ask me anything about the docs.