Zoom Bağlayıcısı

Toplantı katılımcılarını ve web semineri katılımcılarını otomatik olarak kişi olarak senkronize etmek, toplantı sonrası takip dizilerini tetiklemek ve pazarlama otomasyonlarınız için etkileşim metriklerini izlemek üzere Zoom’u Tajo üzerinden Brevo’ya bağlayın.

Genel Bakış

ÖzellikDeğer
PlatformZoom
KategoriVideo Konferans (Özel)
Kurulum KarmaşıklığıOrta
Resmi EntegrasyonHayır
Senkronize Edilen VeriKatılımcılar, Olaylar, Web Seminerleri, Kişiler
Kimlik Doğrulama YöntemiOAuth 2.0 / Sunucudan Sunucuya OAuth

Özellikler

  • Katılımcı senkronizasyonu - Toplantı katılımcılarından otomatik olarak Brevo kişileri oluşturun
  • Web semineri katılımcı yakalama - Web semineri kayıtlı kullanıcılarını ve katılımcılarını senkronize edin
  • Toplantı olay tetikleyicileri - Toplantı başlatma, sona erme ve kayıt olaylarında otomasyonları başlatın
  • Etkileşim takibi - Katılım süresi ve katılım metriklerini izleyin
  • Web semineri takibi - Web semineri katılımına göre hedefli e-posta dizilerini tetikleyin
  • Kayıt bildirimleri - Brevo e-posta kampanyaları aracılığıyla kayıt bağlantılarını gönderin

Ön Koşullar

Başlamadan önce şunlara sahip olduğunuzdan emin olun:

  1. Bir Zoom hesabı (Pro plan veya üzeri)
  2. Zoom App Marketplace aracılığıyla bir Zoom Sunucudan Sunucuya OAuth uygulaması veya OAuth uygulaması
  3. API erişimi olan bir Brevo hesabı
  4. Bağlayıcı izinlerine sahip bir Tajo hesabı

Kimlik Doğrulama

Sunucudan Sunucuya OAuth (Önerilen)

Terminal window
# marketplace.zoom.us adresinde bir Sunucudan Sunucuya OAuth uygulaması oluşturun
export ZOOM_ACCOUNT_ID=your_account_id
export ZOOM_CLIENT_ID=your_client_id
export ZOOM_CLIENT_SECRET=your_client_secret
// Sunucudan Sunucuya OAuth aracılığıyla erişim belirteci al
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 (Kullanıcı Düzeyi)

// Kullanıcı düzeyi OAuth için yetkilendirme URL'si
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'
});
// Kodu belirteçlere dönüştür
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'
})
});

Yapılandırma

Temel Kurulum

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

Alan Eşleştirme

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 Uç Noktaları

Uç NoktaYöntemAçıklama
https://api.zoom.us/v2/usersGETKullanıcıları listele
https://api.zoom.us/v2/users/{userId}/meetingsGETToplantıları listele
https://api.zoom.us/v2/meetings/{meetingId}GETToplantı ayrıntılarını al
https://api.zoom.us/v2/past_meetings/{meetingId}/participantsGETGeçmiş toplantı katılımcılarını listele
https://api.zoom.us/v2/users/{userId}/webinarsGETWeb seminerlerini listele
https://api.zoom.us/v2/webinars/{webinarId}/registrantsGETWeb semineri kayıtlı kullanıcılarını listele
https://api.zoom.us/v2/webinars/{webinarId}/participantsGETWeb semineri katılımcılarını listele
https://api.zoom.us/v2/meetings/{meetingId}/recordingsGETToplantı kayıtlarını al
https://api.zoom.us/v2/webhooksPOSTWebhook’lara abone ol

Kod Örnekleri

Bağlayıcıyı Başlatma

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

Toplantı Katılımcılarını Senkronize Etme

// Geçmiş toplantı katılımcılarını al
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]
});
}
}

Web Semineri Katılımcılarını Senkronize Etme

// Web semineri katılımcılarını al ve Brevo'ya senkronize et
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 Webhook’larını İşleme

app.post('/webhooks/zoom', async (req, res) => {
// Zoom URL doğrulama zorluğunu işle
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
});
}
// Webhook imzasını doğrula
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');
});

Hız Sınırları

KategoriSınırNotlar
Hafif API çağrılarısaniyede 30 istekGET kullanıcı, toplantı bilgisi
Orta API çağrılarısaniyede 20 istekKatılımcıları, web seminerlerini listele
Ağır API çağrılarısaniyede 10 istekRaporlar, kayıtlar
Günlük sınır5.000+Plan düzeyine bağlıdır

Hız Sınırı Başlıkları

Zoom X-RateLimit-Limit, X-RateLimit-Remaining ve Retry-After başlıklarını döndürür. 429 hatalarını önlemek için bu başlıklara dayalı geri çekilme mantığı uygulayın.

Sorun Giderme

SorunNedenÇözüm
401 UnauthorizedBelirteç süresi dolmuşSunucudan Sunucuya OAuth belirtecini yenileyin
Eksik katılımcılarToplantı sona ermediTam veri için toplantının sona ermesini bekleyin
Webhook doğrulaması başarısızYanlış gizli anahtarZoom Marketplace’te webhook gizli anahtarını doğrulayın
E-posta verisi yokMisafir katılımcılarE-postaları yakalamak için kaydı etkinleştirin
Hız sınırı 429Çok fazla istekÜstel geri çekilme uygulayın

Hata Ayıklama Modu

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

En İyi Uygulamalar

  1. Sunucudan Sunucuya OAuth kullanın - Kullanıcı etkileşimi olmadan daha basit kimlik doğrulama
  2. Web semineri kaydını etkinleştirin - Katılımcı e-posta adreslerini yakalamak için gereklidir
  3. Toplantı bittikten sonra işleyin - Katılımcı verileri yalnızca toplantılar sona erdikten sonra tamamdır
  4. Olay türüne göre segmentlere ayırın - Toplantılar ile web seminerleri için farklı Brevo listeleri atayın
  5. Etkileşim metriklerini izleyin - Müşteri adayı puanlaması için süre ve katılma zamanını kullanın
  6. Kayıt takipleri gönderin - Brevo aracılığıyla kayıt bağlantısı teslimatını otomatikleştirin

Güvenlik

  • OAuth 2.0 - Sunucudan Sunucuya veya kullanıcı düzeyi OAuth kimlik doğrulaması
  • Webhook doğrulaması - HMAC-SHA256 imza doğrulama
  • URL doğrulaması - Webhook uç noktaları için soru-yanıt doğrulaması
  • Kapsamlı izinler - Minimum gerekli OAuth kapsamlarını talep edin
  • Belirteç rotasyonu - Sunucudan Sunucuya belirteçleri otomatik olarak süresi dolar (1 saat)
  • Şifreli taşıma - Tüm API iletişimleri için TLS 1.2+

İlgili Kaynaklar

Subscribe to updates

developer-docs

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

auto-detect
AI Asistan

Merhaba! Belgeler hakkında her şeyi sorabilirsiniz.