Zoom कनेक्टर
कनेक्टर की स्थिति: नियोजित अभी बना नहीं है। Tajo आज यह कनेक्टर नहीं चलाता।
उदाहरण · सैंपल डेटा
सिंक का उदाहरण
स्रोत
Zoom
कनेक्टर की स्थिति: नियोजित
गंतव्य
आपका दूसरा टूल
कनेक्टर की स्थिति: कस्टम टूल
फ़ील्ड मैपिंग
| स्रोत फ़ील्ड | गंतव्य फ़ील्ड | नमूना मान |
|---|---|---|
record.id | source_id | record_1042 |
record.updated_at | updated_at | 2026-10-18T08:00:00Z |
record.value | value | sample_value |
- ड्राफ़्ट
- एक रिकॉर्ड जाँचें
- यह वर्ज़न मंज़ूर करें
स्थिति हर कनेक्टर की अलग है; इससे यह सिंक तैयार होने की गारंटी नहीं मिलती। ये फ़ील्ड केवल उदाहरण हैं। सिंक चलने से पहले असली स्कीमा और अनुमतियाँ जाँचें।
मीटिंग प्रतिभागियों और वेबिनार उपस्थित लोगों को कॉन्टैक्ट्स के रूप में स्वचालित रूप से सिंक करने, पोस्ट-मीटिंग फ़ॉलो-अप अनुक्रम ट्रिगर करने, और अपने मार्केटिंग ऑटोमेशन्स के लिए एंगेजमेंट मेट्रिक्स ट्रैक करने के लिए Tajo के माध्यम से Zoom को Brevo से कनेक्ट करें।
अवलोकन
| गुण | मान |
|---|---|
| प्लेटफ़ॉर्म | Zoom |
| श्रेणी | Video Conferencing (Custom) |
| सेटअप जटिलता | मध्यम |
| आधिकारिक इंटीग्रेशन | नहीं |
| सिंक किया गया डेटा | प्रतिभागी, इवेंट्स, वेबिनार्स, कॉन्टैक्ट्स |
| Auth Method | OAuth 2.0 / Server-to-Server OAuth |
विशेषताएं
- प्रतिभागी सिंक - मीटिंग प्रतिभागियों से Brevo कॉन्टैक्ट्स ऑटो-क्रिएट करें
- वेबिनार उपस्थित कैप्चर - वेबिनार पंजीकरणकर्ताओं और उपस्थित लोगों को सिंक करें
- मीटिंग इवेंट ट्रिगर्स - मीटिंग प्रारंभ, समाप्त, और रिकॉर्डिंग इवेंट्स पर ऑटोमेशन्स फ़ायर करें
- एंगेजमेंट ट्रैकिंग - उपस्थिति अवधि और भागीदारी मेट्रिक्स ट्रैक करें
- वेबिनार फ़ॉलो-अप - वेबिनार उपस्थिति के आधार पर लक्षित ईमेल अनुक्रम ट्रिगर करें
- रिकॉर्डिंग सूचनाएं - Brevo ईमेल कैंपेन के माध्यम से रिकॉर्डिंग लिंक भेजें
पूर्वावश्यकताएं
शुरू करने से पहले, सुनिश्चित करें कि आपके पास है:
- एक Zoom खाता (Pro प्लान या ऊपर)
- Zoom App Marketplace के माध्यम से एक Zoom Server-to-Server OAuth ऐप या OAuth ऐप
- API एक्सेस वाला एक Brevo खाता
- कनेक्टर अनुमतियों के साथ एक Tajo खाता
प्रमाणीकरण
Server-to-Server OAuth (अनुशंसित)
# 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 (User-Level)
// 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' })});कॉन्फ़िगरेशन
बुनियादी सेटअप
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_SOURCEAPI एंडपॉइंट्स
| एंडपॉइंट | मेथड | विवरण |
|---|---|---|
https://api.zoom.us/v2/users | GET | उपयोगकर्ता सूचीबद्ध करें |
https://api.zoom.us/v2/users/{userId}/meetings | GET | मीटिंग्स सूचीबद्ध करें |
https://api.zoom.us/v2/meetings/{meetingId} | GET | मीटिंग विवरण प्राप्त करें |
https://api.zoom.us/v2/past_meetings/{meetingId}/participants | GET | पिछले मीटिंग प्रतिभागी सूचीबद्ध करें |
https://api.zoom.us/v2/users/{userId}/webinars | GET | वेबिनार्स सूचीबद्ध करें |
https://api.zoom.us/v2/webinars/{webinarId}/registrants | GET | वेबिनार पंजीकरणकर्ता सूचीबद्ध करें |
https://api.zoom.us/v2/webinars/{webinarId}/participants | GET | वेबिनार प्रतिभागी सूचीबद्ध करें |
https://api.zoom.us/v2/meetings/{meetingId}/recordings | GET | मीटिंग रिकॉर्डिंग्स प्राप्त करें |
https://api.zoom.us/v2/webhooks | POST | वेबहुक्स को सब्सक्राइब करें |
कोड उदाहरण
कनेक्टर प्रारंभ करें
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 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] }); }}वेबिनार उपस्थित लोगों को सिंक करें
// 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] });}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 calls | 30 req/sec | GET user, meeting info |
| Medium API calls | 20 req/sec | List participants, webinars |
| Heavy API calls | 10 req/sec | Reports, recordings |
| दैनिक सीमा | 5,000+ | प्लान स्तर पर निर्भर |
दर सीमा हेडर्स
Zoom X-RateLimit-Limit, X-RateLimit-Remaining, और Retry-After हेडर्स लौटाता है। 429 त्रुटियों से बचने के लिए इन हेडर्स के आधार पर बैकऑफ़ लॉजिक लागू करें।
समस्या निवारण
| समस्या | कारण | समाधान |
|---|---|---|
| 401 Unauthorized | टोकन समाप्त | Server-to-Server OAuth टोकन रीफ्रेश करें |
| गायब प्रतिभागी | मीटिंग समाप्त नहीं | पूर्ण डेटा के लिए मीटिंग समाप्त होने तक प्रतीक्षा करें |
| Webhook सत्यापन विफल | गलत secret | Zoom Marketplace में webhook secret सत्यापित करें |
| कोई ईमेल डेटा नहीं | अतिथि प्रतिभागी | ईमेल कैप्चर करने के लिए पंजीकरण सक्षम करें |
| दर सीमा 429 | बहुत अधिक अनुरोध | exponential backoff लागू करें |
डीबग मोड
connectors: zoom: debug: true log_level: verbose log_webhooks: trueसर्वोत्तम प्रथाएं
- Server-to-Server OAuth का उपयोग करें - उपयोगकर्ता इंटरैक्शन के बिना सरल प्रमाणीकरण
- वेबिनार पंजीकरण सक्षम करें - उपस्थित लोगों के ईमेल पते कैप्चर करने के लिए आवश्यक
- मीटिंग समाप्ति के बाद प्रोसेस करें - मीटिंग समाप्त होने के बाद ही प्रतिभागी डेटा पूर्ण होता है
- इवेंट प्रकार के अनुसार सेगमेंट करें - मीटिंग्स बनाम वेबिनार के लिए विभिन्न Brevo लिस्ट्स असाइन करें
- एंगेजमेंट मेट्रिक्स ट्रैक करें - लीड स्कोरिंग के लिए duration और join time का उपयोग करें
- रिकॉर्डिंग फ़ॉलो-अप भेजें - 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+