Calendly Bağlayıcısı
Bağlayıcı durumu: Planlandı Henüz oluşturulmadı. Tajo bu bağlayıcıyı bugün çalıştırmıyor.
Temsili görsel · örnek veriler
Senkronizasyon örneği
Kaynak
Calendly
Bağlayıcı durumu: Planlandı
Hedef
Diğer aracınız
Bağlayıcı durumu: Özel araç
Alan eşleme
| Kaynak alanı | Hedef alanı | Örnek değer |
|---|---|---|
record.id | source_id | record_1042 |
record.updated_at | updated_at | 2026-10-18T08:00:00Z |
record.value | value | sample_value |
- Taslak
- Bir kaydı inceleyin
- Bu sürümü onaylayın
Durumlar tek tek bağlayıcılara aittir; bu senkronizasyonun hazır olduğunu garanti etmez. Alanlar örnektir. Senkronizasyon çalışmadan önce gerçek şemayı ve izinleri kontrol edin.
Calendly’yi Tajo üzerinden Brevo’ya bağlayarak toplantı davetlilerini otomatik olarak kişi olarak senkronize edin, rezervasyon olaylarına göre e-posta dizilerini tetikleyin ve satış ile onboarding iş akışlarınızı kolaylaştırın.
Genel Bakış
| Özellik | Değer |
|---|---|
| Platform | Calendly |
| Kategori | Planlama (Özel) |
| Kurulum Karmaşıklığı | Kolay |
| Resmi Entegrasyon | Hayır |
| Senkronize Edilen Veri | Olaylar, Kişiler, Rezervasyonlar, İptaller |
| Kimlik Doğrulama Yöntemi | OAuth 2.0 / Kişisel Erişim Belirteci |
Özellikler
- Davetli senkronizasyonu - Toplantı davetlilerinden otomatik olarak Brevo kişileri oluşturun
- Rezervasyon tetikleyicileri - Toplantılar rezerve edildiğinde Brevo otomasyonlarını tetikleyin
- İptal yönetimi - İptallerde yeniden etkileşim akışlarını tetikleyin
- No-show tespiti - Davetliler toplantıları kaçırdığında kişi durumunu güncelleyin
- Olay türü eşlemesi - Farklı Calendly olay türlerini Brevo listelerine eşleyin
- Planlama API’si - Yönlendirme olmadan doğrudan uygulamanıza planlama oluşturun
Ön Koşullar
Başlamadan önce sahip olmanız gerekenler:
- Bir Calendly hesabı (API erişimi için Professional plan veya üzeri)
- Calendly Integrations adresinden bir Kişisel Erişim Belirteci
- API erişimi olan bir Brevo hesabı
- Bağlayıcı izinleri olan bir Tajo hesabı
Kimlik Doğrulama
Kişisel Erişim Belirteci
# Generate at https://calendly.com/integrations/api_webhooksexport CALENDLY_ACCESS_TOKEN=your_personal_access_tokenexport TAJO_API_KEY=your_tajo_api_keyexport BREVO_API_KEY=your_brevo_api_keyOAuth 2.0
// OAuth 2.0 Authorization Code Flowconst authUrl = 'https://auth.calendly.com/oauth/authorize?' + new URLSearchParams({ client_id: process.env.CALENDLY_CLIENT_ID, redirect_uri: 'https://your-app.com/callback', response_type: 'code' });
// Exchange code for tokenconst tokenResponse = await fetch('https://auth.calendly.com/oauth/token', { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: new URLSearchParams({ grant_type: 'authorization_code', code: authorizationCode, client_id: process.env.CALENDLY_CLIENT_ID, client_secret: process.env.CALENDLY_CLIENT_SECRET, redirect_uri: 'https://your-app.com/callback' })});Yapılandırma
Temel Kurulum
connectors: calendly: enabled: true access_token: "${CALENDLY_ACCESS_TOKEN}"
sync: contacts: true events: true cancellations: true
event_mapping: discovery_call: list_id: 10 event_type_uri: "https://api.calendly.com/event_types/abc123" demo: list_id: 11 event_type_uri: "https://api.calendly.com/event_types/xyz789"
webhook: signing_key: "${CALENDLY_WEBHOOK_SIGNING_KEY}"Alan Eşleme
field_mapping: email: email name: FIRSTNAME questions_and_answers: company: COMPANY role: JOB_TITLE phone: SMS event_type_name: CALENDLY_EVENT_TYPE scheduled_at: MEETING_DATE status: BOOKING_STATUSAPI Uç Noktaları
| Uç Nokta | Yöntem | Açıklama |
|---|---|---|
https://api.calendly.com/users/me | GET | Mevcut kullanıcıyı getir |
https://api.calendly.com/event_types | GET | Olay türlerini listele |
https://api.calendly.com/scheduled_events | GET | Planlanmış olayları listele |
https://api.calendly.com/scheduled_events/{uuid} | GET | Bir planlanmış olayı getir |
https://api.calendly.com/scheduled_events/{uuid}/invitees | GET | Davetlileri listele |
https://api.calendly.com/scheduling_links | POST | Planlama bağlantısı oluştur |
https://api.calendly.com/webhook_subscriptions | POST | Webhook oluştur |
https://api.calendly.com/webhook_subscriptions | GET | Webhook’ları listele |
https://api.calendly.com/invitee_no_shows/{uuid} | GET | No-show durumunu getir |
Kod Örnekleri
Bağlayıcıyı Başlat
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('calendly', { accessToken: process.env.CALENDLY_ACCESS_TOKEN});Planlanmış Olayları Listele
// Retrieve scheduled eventsconst response = await fetch( 'https://api.calendly.com/scheduled_events?' + new URLSearchParams({ user: 'https://api.calendly.com/users/YOUR_USER_ID', min_start_time: '2024-01-01T00:00:00Z', max_start_time: '2024-12-31T23:59:59Z', status: 'active', count: 100 }), { headers: { 'Authorization': `Bearer ${process.env.CALENDLY_ACCESS_TOKEN}`, 'Content-Type': 'application/json' } });
const events = await response.json();Davetlileri Brevo’ya Senkronize Et
// Get invitees for a scheduled event and sync to Brevoconst inviteesResponse = await fetch( `https://api.calendly.com/scheduled_events/${eventUuid}/invitees`, { headers: { 'Authorization': `Bearer ${process.env.CALENDLY_ACCESS_TOKEN}` } });
const { collection } = await inviteesResponse.json();
for (const invitee of collection) { await tajo.contacts.sync({ email: invitee.email, attributes: { FIRSTNAME: invitee.name, CALENDLY_EVENT_TYPE: invitee.event, MEETING_DATE: invitee.created_at, BOOKING_STATUS: invitee.status }, listIds: [10] });}Webhook Abonelikleri Kur
// Subscribe to Calendly eventsconst webhook = await fetch( 'https://api.calendly.com/webhook_subscriptions', { method: 'POST', headers: { 'Authorization': `Bearer ${process.env.CALENDLY_ACCESS_TOKEN}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ url: 'https://api.example.com/webhooks/calendly', events: [ 'invitee.created', 'invitee.canceled', 'invitee_no_show.created' ], organization: 'https://api.calendly.com/organizations/YOUR_ORG_ID', scope: 'organization', signing_key: process.env.CALENDLY_WEBHOOK_SIGNING_KEY }) });Caution
Yukarıdaki example.com adresi, Tajo uç noktası kullanıma sunulana kadar bir yer tutucudur.
Webhook Olaylarını İşle
app.post('/webhooks/calendly', async (req, res) => { // Verify webhook signature const signature = req.headers['calendly-webhook-signature']; const isValid = verifyCalendlySignature( req.rawBody, signature, process.env.CALENDLY_WEBHOOK_SIGNING_KEY );
if (!isValid) return res.status(401).send('Unauthorized');
const { event, payload } = req.body;
switch (event) { case 'invitee.created': await tajo.contacts.sync({ email: payload.email, attributes: { BOOKING_STATUS: 'booked' }, listIds: [10] }); break; case 'invitee.canceled': await tajo.contacts.update(payload.email, { attributes: { BOOKING_STATUS: 'cancelled' } }); break; case 'invitee_no_show.created': await tajo.contacts.update(payload.email, { attributes: { BOOKING_STATUS: 'no_show' } }); break; }
res.status(200).send('OK');});Hız Limitleri
| Kaynak | Limit | Notlar |
|---|---|---|
| API istekleri | 6.000/dakika | Organizasyon geneli limit |
| Webhook abonelikleri | Organizasyon başına 30 | Tüm olay türlerinde |
| Planlama bağlantıları | Sınırsız | Dakika başına limit yok |
Sayfalama
Calendly API yanıtları imleç tabanlı sayfalama kullanır. Ek sonuçları almak için pagination nesnesinden next_page_token değerini kullanın. Varsayılan sayfa boyutu 20 öğedir, maksimum 100’dür.
Sorun Giderme
| Sorun | Neden | Çözüm |
|---|---|---|
| Webhook alınmıyor | Yanlış kapsam | Webhook’lar için organization kapsamını kullanın |
| 401 Unauthorized | Belirtecin süresi doldu | Yeni belirteç oluşturun veya OAuth belirtecini yenileyin |
| Davetli verileri eksik | Sorular yapılandırılmamış | Olay türüne özel sorular ekleyin |
| Yinelenen kişiler | Tekrar giderme mantığı yok | Upsert için e-postayı benzersiz tanımlayıcı olarak kullanın |
| Hız limiti 429 | Çok fazla istek | Geri çekilme ve istek gruplandırma uygulayın |
Hata Ayıklama Modu
connectors: calendly: debug: true log_level: verbose log_webhooks: trueEn İyi Uygulamalar
- Webhook kullanın - Gerçek zamanlı senkronizasyon için
invitee.createdveinvitee.canceledolaylarına abone olun - Özel sorular ekleyin - Daha zengin kişi profilleri için şirket, rol ve telefon verisi toplayın
- Olay türlerini eşleyin - Calendly olay türü başına farklı Brevo listeleri atayın
- No-show’ları yönetin - Aday puanlama ve takip dizilerini ayarlamak için no-show’ları izleyin
- Planlama bağlantılarını kullanın - Kişiselleştirilmiş rezervasyon deneyimleri için benzersiz planlama bağlantıları oluşturun
- Organizasyon kapsamını ayarlayın - Tüm ekip üyelerinin olaylarını yakalamak için organizasyon düzeyinde webhook kullanın
Güvenlik
- OAuth 2.0 - Kapsamlandırılmış belirteç tabanlı kimlik doğrulama
- Webhook imzaları - Gelen webhook’lar için HMAC imza doğrulaması
- Yalnızca HTTPS - Tüm API uç noktaları TLS şifrelemesi gerektirir
- Belirteç süresi - OAuth belirteçleri sona erer ve yenileme akışları gerektirir
- Minimum kapsam - Yalnızca gerekli OAuth kapsamlarını isteyin
- Güvenli depolama - Belirteçleri ortam değişkenlerinde veya gizli anahtar yöneticilerinde saklayın