Calendly konnektor

Csatlakoztasd a Calendly-t a Brevóhoz a Tajo segítségével, hogy automatikusan szinkronizáld a találkozó meghívottakat kapcsolatokként, foglalási eseményeken alapuló e-mail sorozatokat indíts, és korszerűsítsd az értékesítési és onboarding munkafolyamataidat.

Áttekintés

TulajdonságÉrték
PlatformCalendly
KategóriaÜtemezés (Egyéni)
Telepítés bonyolultságaKönnyű
Hivatalos integrációNem
Szinkronizált adatokEsemények, Kapcsolatok, Foglalások, Lemondások
Hitelesítési módszerOAuth 2.0 / Személyes hozzáférési token

Funkciók

  • Meghívott-szinkronizáció – Automatikusan hozz létre Brevo kapcsolatokat a találkozó meghívottakból
  • Foglalási triggerek – Indíts Brevo automatizálásokat találkozók foglalásakor
  • Lemondás-kezelés – Indíts újrabekapcsolási folyamatokat lemondásokkor
  • Megjelenési probléma-észlelés – Frissítsd a kapcsolat státuszát, ha a meghívottak lemaradnak a találkozókról
  • Eseménytípus-leképezés – Különböző Calendly eseménytípusok leképezése Brevo listákhoz
  • Ütemezési API – Ütemezés beépítése közvetlenül az alkalmazásodba átirányítás nélkül

Előfeltételek

Mielőtt elkezdenéd, győződj meg róla, hogy rendelkezel:

  1. Egy Calendly fiókkal (Professional csomag vagy feljebb az API hozzáféréshez)
  2. Egy személyes hozzáférési tokennel a Calendly Integrations oldalról
  3. Egy Brevo fiókkal API-hozzáféréssel
  4. Egy Tajo fiókkal konnektor engedélyekkel

Hitelesítés

Személyes hozzáférési token

Terminal window
# Generate at https://calendly.com/integrations/api_webhooks
export CALENDLY_ACCESS_TOKEN=your_personal_access_token
export TAJO_API_KEY=your_tajo_api_key
export BREVO_API_KEY=your_brevo_api_key

OAuth 2.0

// OAuth 2.0 Authorization Code Flow
const 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 token
const 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'
})
});

Konfiguráció

Alapbeállítás

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}"

Mezőleképezés

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_STATUS

API végpontok

VégpontMódszerLeírás
https://api.calendly.com/users/meGETJelenlegi felhasználó lekérése
https://api.calendly.com/event_typesGETEseménytípusok listázása
https://api.calendly.com/scheduled_eventsGETÜtemezett események listázása
https://api.calendly.com/scheduled_events/{uuid}GETÜtemezett esemény lekérése
https://api.calendly.com/scheduled_events/{uuid}/inviteesGETMeghívottak listázása
https://api.calendly.com/scheduling_linksPOSTÜtemezési link létrehozása
https://api.calendly.com/webhook_subscriptionsPOSTWebhook létrehozása
https://api.calendly.com/webhook_subscriptionsGETWebhookok listázása
https://api.calendly.com/invitee_no_shows/{uuid}GETMegjelenési probléma státuszának lekérése

Kódpéldák

A konnektor inicializálása

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

Ütemezett események listázása

// Retrieve scheduled events
const 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();

Meghívottak szinkronizálása a Brevóba

// Get invitees for a scheduled event and sync to Brevo
const 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-előfizetések beállítása

// Subscribe to Calendly events
const 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.tajo.io/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
})
}
);

Webhook-események kezelése

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

Ráta-korlátok

ErőforrásKorlátMegjegyzések
API kérések6 000/percSzervezeti szintű korlát
Webhook-előfizetések30 szervezetenkéntAz összes eseménytípuson átívelően
Ütemezési linkekKorlátlanNincs perenkénti korlát

Oldalazás

A Calendly API válaszok kurzor alapú oldalazást használnak. A pagination objektum next_page_token értékét használd további eredmények lekéréséhez. Az alapértelmezett oldalméret 20 elem, maximum 100.

Hibaelhárítás

ProblémaOkMegoldás
Webhook nem érkezik megRossz hatókörWebhookok esetén használd az organization hatókört
401 UnauthorizedToken lejártGenerálj új tokent vagy frissítsd az OAuth tokent
Hiányzó meghívott adatokKérdések nincsenek konfigurálvaAdj egyedi kérdéseket az eseménytípushoz
Duplikált kapcsolatokNincs deduplikációs logikaHasználd az e-mailt egyedi azonosítóként az upsertekhez
Ráta-korlát 429Túl sok kérésImplementálj visszalépést és kérés-kötegezést

Hibakeresési mód

connectors:
calendly:
debug: true
log_level: verbose
log_webhooks: true

Legjobb gyakorlatok

  1. Használj webhookokat – Iratkozz fel az invitee.created és invitee.canceled eseményekre valós idejű szinkronizáláshoz
  2. Adj hozzá egyedi kérdéseket – Gyűjtsd össze a cég, szerepkör és telefonszám adatokat a gazdagabb kapcsolati profilokhoz
  3. Képezd le az eseménytípusokat – Rendelj különböző Brevo listákat az egyes Calendly eseménytípusokhoz
  4. Kezelj megjelenési problémákat – Kövesd a meg nem jelenteket a lead pontozás és utókövetési sorozatok módosításához
  5. Használj ütemezési linkeket – Generálj egyedi ütemezési linkeket személyre szabott foglalási élményekhez
  6. Állíts be szervezeti hatókört – Org szintű webhookokat használj az összes csapattag eseményeinek rögzítéséhez

Biztonság

  • OAuth 2.0 – Hatókörrel korlátozott token alapú hitelesítés
  • Webhook aláírások – HMAC aláírás-ellenőrzés bejövő webhookok esetén
  • Csak HTTPS – Minden API végpont TLS titkosítást igényel
  • Token lejárat – Az OAuth tokenek lejárnak és frissítési folyamokat igényelnek
  • Minimális hatókörök – Csak a szükséges OAuth hatóköröket kérd
  • Biztonságos tárolás – Tárold a tokeneket környezeti változókban vagy titkos kezelőkben

Kapcsolódó források

Subscribe to updates

developer-docs

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

auto-detect
AI asszisztens

Szia! Kérdezz bármit a dokumentációról.