Calendly konektor

Prepoj Calendly s Brevo cez Tajo na automatickú synchronizáciu pozvaných na stretnutia ako kontaktov, spúšťanie e-mailových sekvencií na základe udalostí rezervácií a zefektívnenie predajných a onboardingových workflowov.

Prehľad

VlastnosťHodnota
PlatformaCalendly
KategóriaPlánovanie (Vlastná)
Zložitosť nastaveniaĽahké
Oficiálna integráciaNie
Synchronizované dátaUdalosti, Kontakty, Rezervácie, Zrušenia
Metóda autentifikácieOAuth 2.0 / Personal Access Token

Funkcie

  • Synchronizácia pozvaných - Automaticky vytváraj kontakty Brevo z pozvaných na stretnutia
  • Spúšťače rezervácií - Spúšťaj automatizácie Brevo pri rezervácii stretnutí
  • Spracovanie zrušení - Spúšťaj re-engagement flow pri zrušeniach
  • Detekcia neprítomnosti - Aktualizuj stav kontaktu, keď pozvaní vynechajú stretnutia
  • Mapovanie typov udalostí - Namapuj rôzne typy udalostí Calendly na zoznamy Brevo
  • Scheduling API - Zabuduj plánovanie priamo do svojej aplikácie bez presmerovaní

Predpoklady

Predtým, než začneš, uisti sa, že máš:

  1. Calendly účet (Professional plán alebo vyšší pre API prístup)
  2. Personal Access Token z Calendly Integrations
  3. Brevo účet s API prístupom
  4. Tajo účet s oprávneniami pre konektory

Autentifikácia

Personal Access 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ácia

Základné nastavenie

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

Mapovanie polí

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 endpointy

EndpointMetódaPopis
https://api.calendly.com/users/meGETZískanie aktuálneho používateľa
https://api.calendly.com/event_typesGETZoznam typov udalostí
https://api.calendly.com/scheduled_eventsGETZoznam naplánovaných udalostí
https://api.calendly.com/scheduled_events/{uuid}GETZískanie naplánovanej udalosti
https://api.calendly.com/scheduled_events/{uuid}/inviteesGETZoznam pozvaných
https://api.calendly.com/scheduling_linksPOSTVytvorenie plánovacieho odkazu
https://api.calendly.com/webhook_subscriptionsPOSTVytvorenie webhooku
https://api.calendly.com/webhook_subscriptionsGETZoznam webhookov
https://api.calendly.com/invitee_no_shows/{uuid}GETStav neprítomnosti

Ukážky kódu

Inicializácia konektora

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

Zoznam naplánovaných udalostí

// 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();

Synchronizácia pozvaných do Brevo

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

Nastavenie webhook predplatného

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

Spracovanie webhook udalostí

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

Obmedzenia rýchlosti

ZdrojLimitPoznámky
API požiadavky6 000/minCeloorganizačný limit
Webhook predplatné30 na organizáciuNaprieč všetkými typmi udalostí
Plánovacie odkazyNeobmedzeneBez limitu za minútu

Stránkovanie

Odpovede Calendly API používajú stránkovanie na základe kurzora. Použi next_page_token z objektu pagination na získanie ďalších výsledkov. Predvolená veľkosť stránky je 20 položiek, s maximom 100.

Riešenie problémov

ProblémPríčinaRiešenie
Webhook nie je prijatýNesprávny scopePouži scope organization pre webhooky
401 UnauthorizedToken vypršalVygeneruj nový token alebo obnov OAuth token
Chýbajúce dáta pozvanýchOtázky nie sú nakonfigurovanéPridaj vlastné otázky k typu udalosti
Duplicitné kontaktyŽiadna deduplikačná logikaPouži e-mail ako unikátny identifikátor pre upserty
Rate limit 429Príliš veľa požiadaviekImplementuj backoff a dávkovanie požiadaviek

Debug režim

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

Odporúčané postupy

  1. Použi webhooky - Prihláš sa na odber invitee.created a invitee.canceled pre synchronizáciu v reálnom čase
  2. Pridaj vlastné otázky - Zbieraj dáta o spoločnosti, role a telefóne pre bohatšie profily kontaktov
  3. Namapuj typy udalostí - Priraď rôzne zoznamy Brevo ku každému typu udalosti Calendly
  4. Spracuj neprítomnosť - Sleduj neprítomnosť na prispôsobenie skórovania leadov a nadväzujúcich sekvencií
  5. Použi plánovacie odkazy - Generuj unikátne plánovacie odkazy pre personalizované rezervačné skúsenosti
  6. Nastav scope organizácie - Použi webhooky na úrovni org na zachytenie udalostí od všetkých členov tímu

Bezpečnosť

  • OAuth 2.0 - Autentifikácia na základe tokenov s obmedzeným rozsahom
  • Podpisy webhookov - Validácia HMAC podpisu pre prichádzajúce webhooky
  • Iba HTTPS - Všetky API endpointy vyžadujú TLS šifrovanie
  • Vypršanie tokenov - OAuth tokeny vypršavajú a vyžadujú refresh flow
  • Minimálne scopes - Požaduj iba požadované OAuth scopes
  • Bezpečné úložisko - Uchovávaj tokeny v premenných prostredia alebo manažéroch tajomstiev

Súvisiace zdroje

Subscribe to updates

developer-docs

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

auto-detect
AI asistent

Ahoj! Opýtajte sa ma na dokumentáciu.