Vraag vroegtijdige toegang aan

Vul je voornaam en je zakelijke e-mailadres in. We sturen je een link om je aanvraag voor toegang tot Tajo te bevestigen.

Calendly-connector

Connectorstatus: Gepland Nog niet gebouwd. Tajo draait deze connector vandaag niet.

Illustratie · voorbeelddata

Voorbeeld van synchronisatie

Eén record controleren

Bron

Calendly

Connectorstatus: Gepland

Bestemming

Je andere tool

Connectorstatus: Eigen tool

BronveldDoelveldVoorbeeldwaarde
record.id source_id record_1042
record.updated_at updated_at 2026-10-18T08:00:00Z
record.value value sample_value
  1. Opstellen
  2. Eén record controleren
  3. Deze versie goedkeuren

Statussen gelden per connector en garanderen niet dat deze synchronisatie klaar is. De velden zijn illustratief. Controleer het echte schema en de rechten voordat een synchronisatie draait.

Verbind Calendly met Brevo via Tajo om meeting-invitees automatisch te synchroniseren als contacten, e-mailreeksen te triggeren op basis van boekingsevents en je sales- en onboardingworkflows te stroomlijnen.

Overzicht

EigenschapWaarde
PlatformCalendly
CategorieScheduling (Custom)
SetupcomplexiteitEenvoudig
Officiële integratieNee
Gesynchroniseerde dataEvents, Contacten, Boekingen, Annuleringen
Auth-methodeOAuth 2.0 / Personal Access Token

Functies

  • Invitee-sync - Maak automatisch Brevo-contacten aan op basis van meeting-invitees
  • Boeking-triggers - Start Brevo-automatiseringen wanneer meetings worden geboekt
  • Annuleringsafhandeling - Trigger re-engagement-flows bij annuleringen
  • No-show-detectie - Werk contactstatus bij wanneer invitees meetings missen
  • Event type-mapping - Map verschillende Calendly-eventtypes naar Brevo-lijsten
  • Scheduling API - Bouw scheduling rechtstreeks in je app zonder redirects

Vereisten

Voordat je begint, zorg dat je beschikt over:

  1. Een Calendly-account (Professional-plan of hoger voor API-toegang)
  2. Een Personal Access Token via Calendly Integrations
  3. Een Brevo-account met API-toegang
  4. Een Tajo-account met connector-rechten

Authenticatie

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

Configuratie

Basisinstelling

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

Veldmapping

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-endpoints

EndpointMethodBeschrijving
https://api.calendly.com/users/meGETHaal huidige gebruiker op
https://api.calendly.com/event_typesGETLijst eventtypes
https://api.calendly.com/scheduled_eventsGETLijst geplande events
https://api.calendly.com/scheduled_events/{uuid}GETHaal een gepland event op
https://api.calendly.com/scheduled_events/{uuid}/inviteesGETLijst invitees
https://api.calendly.com/scheduling_linksPOSTMaak scheduling link
https://api.calendly.com/webhook_subscriptionsPOSTMaak een webhook
https://api.calendly.com/webhook_subscriptionsGETLijst webhooks
https://api.calendly.com/invitee_no_shows/{uuid}GETHaal no-show-status op

Codevoorbeelden

Connector initialiseren

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

Geplande events opvragen

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

Invitees synchroniseren naar 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]
});
}

Webhook-subscriptions opzetten

// 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.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

Het example.com-adres hierboven is een placeholder totdat het Tajo-endpoint beschikbaar is.

Webhook-events afhandelen

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

Rate limits

ResourceLimietOpmerkingen
API-requests6.000/minOrganisatiebrede limiet
Webhook-subscriptions30 per organisatieOver alle eventtypes
Scheduling-linksOnbeperktGeen limiet per minuut

Paginering

Calendly API-responses gebruiken cursor-gebaseerde paginering. Gebruik de next_page_token uit het pagination-object om extra resultaten op te halen. De default pagegrootte is 20 items, met een maximum van 100.

Probleemoplossing

ProbleemOorzaakOplossing
Webhook niet ontvangenVerkeerde scopeGebruik organization-scope voor webhooks
401 UnauthorizedToken verlopenGenereer een nieuw token of ververs het OAuth-token
Ontbrekende invitee-dataVragen niet geconfigureerdVoeg custom vragen toe aan het eventtype
Dubbele contactenGeen dedup-logicaGebruik e-mail als unieke identifier voor upserts
Rate limit 429Te veel requestsImplementeer backoff en batch je requests

Debugmodus

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

Best practices

  1. Gebruik webhooks - Abonneer op invitee.created en invitee.canceled voor realtime sync
  2. Voeg custom vragen toe - Verzamel bedrijf-, functie- en telefoongegevens voor rijkere contactprofielen
  3. Map eventtypes - Wijs per Calendly-eventtype verschillende Brevo-lijsten toe
  4. Handel no-shows af - Track no-shows om lead scoring en follow-up-reeksen aan te passen
  5. Gebruik scheduling-links - Genereer unieke scheduling-links voor gepersonaliseerde boekingservaringen
  6. Zet organisatie-scope - Gebruik org-level-webhooks om events van alle teamleden vast te leggen

Beveiliging

  • OAuth 2.0 - Scoped token-gebaseerde authenticatie
  • Webhook-signatures - HMAC-signature-validatie voor inkomende webhooks
  • Alleen HTTPS - Alle API-endpoints vereisen TLS-encryptie
  • Token-verloop - OAuth-tokens verlopen en vereisen refresh-flows
  • Minimale scopes - Vraag alleen benodigde OAuth-scopes aan
  • Veilige opslag - Sla tokens op in omgevingsvariabelen of secret managers

Gerelateerde bronnen

Vraag vroegtijdige toegang aan

Vul je voornaam en je zakelijke e-mailadres in. We sturen je een link om je aanvraag voor toegang tot Tajo te bevestigen.

AI-assistent

Hallo! Stel me vragen over de documentatie.

Deze pagina als Markdown: calendly.md

Markdown laden…
Openen in Claude Openen in ChatGPT