Ansök om tidig åtkomst

Ange ditt förnamn och din e-postadress på jobbet. Vi skickar en länk för att bekräfta din begäran om åtkomst till Tajo.

Calendly-koppling

Kopplingens status: Planerad Inte byggd än. Tajo kör inte den här kopplingen i dag.

Illustration · exempeldata

Exempel på synkronisering

Granska en post

Källa

Calendly

Kopplingens status: Planerad

Mål

Ditt andra verktyg

Kopplingens status: Eget verktyg

KällfältMålfältExempelvärde
record.id source_id record_1042
record.updated_at updated_at 2026-10-18T08:00:00Z
record.value value sample_value
  1. Utkast
  2. Granska en post
  3. Godkänn den här versionen

Status gäller varje enskild koppling och garanterar inte att den här synkroniseringen är klar. Fälten är illustrativa. Kontrollera det faktiska schemat och behörigheterna innan synkronisering körs.

Anslut Calendly till Brevo via Tajo för att automatiskt synka mötesinbjudna som kontakter, utlösa e-postsekvenser baserat på bokningshändelser och strömlinjeforma dina sälj- och onboardingflöden.

Översikt

EgenskapVärde
PlattformCalendly
KategoriSchemaläggning (Anpassad)
InstallationskomplexitetEnkel
Officiell integrationNej
Data som synkasHändelser, kontakter, bokningar, avbokningar
AutentiseringsmetodOAuth 2.0 / Personal Access Token

Funktioner

  • Synk av inbjudna - Skapa automatiskt Brevo-kontakter från mötesinbjudna
  • Bokningsutlösare - Avfyra Brevo-automationer när möten bokas
  • Hantering av avbokningar - Utlös återengagemangsflöden vid avbokningar
  • Detektering av no-show - Uppdatera kontaktstatus när inbjudna missar möten
  • Mappning av händelsetyper - Mappa olika Calendly-händelsetyper till Brevo-listor
  • Schemaläggnings-API - Bygg schemaläggning direkt in i din app utan omdirigeringar

Förutsättningar

Innan du börjar, se till att du har:

  1. Ett Calendly-konto (Professional-plan eller högre för API-åtkomst)
  2. En Personal Access Token från Calendly Integrations
  3. Ett Brevo-konto med API-åtkomst
  4. Ett Tajo-konto med kopplingsbehörigheter

Autentisering

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

Konfiguration

Grundinställning

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

Fältmappning

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

EndpointMetodBeskrivning
https://api.calendly.com/users/meGETHämta aktuell användare
https://api.calendly.com/event_typesGETLista händelsetyper
https://api.calendly.com/scheduled_eventsGETLista schemalagda händelser
https://api.calendly.com/scheduled_events/{uuid}GETHämta en schemalagd händelse
https://api.calendly.com/scheduled_events/{uuid}/inviteesGETLista inbjudna
https://api.calendly.com/scheduling_linksPOSTSkapa schemaläggningslänk
https://api.calendly.com/webhook_subscriptionsPOSTSkapa webhook
https://api.calendly.com/webhook_subscriptionsGETLista webhooks
https://api.calendly.com/invitee_no_shows/{uuid}GETHämta no-show-status

Kodexempel

Initiera kopplingen

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

Lista schemalagda händelser

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

Synka inbjudna till 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]
});
}

Sätt upp webhook-prenumerationer

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

Adressen example.com ovan är en platshållare tills Tajo-endpointen är tillgänglig.

Hantera webhook-händelser

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

Hastighetsbegränsningar

ResursGränsNoteringar
API-förfrågningar6 000/minOrganisationsomfattande gräns
Webhook-prenumerationer30 per organisationÖver alla händelsetyper
SchemaläggningslänkarObegränsatIngen per-minut-gräns

Paginering

Calendlys API-svar använder cursor-baserad paginering. Använd next_page_token från pagination-objektet för att hämta ytterligare resultat. Standardsidstorleken är 20 objekt, med ett maxvärde på 100.

Felsökning

ProblemOrsakLösning
Webhook tas inte emotFel scopeAnvänd organization-scope för webhooks
401 UnauthorizedToken utgångenGenerera ny token eller uppdatera OAuth-token
Saknar inbjudendataFrågor ej konfigureradeLägg till anpassade frågor i händelsetypen
DubblettkontakterIngen dedup-logikAnvänd e-post som unik identifierare för upserts
Hastighetsbegränsning 429För många förfrågningarImplementera backoff och batcha förfrågningar

Felsökningsläge

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

Bästa praxis

  1. Använd webhooks - Prenumerera på invitee.created och invitee.canceled för synk i realtid
  2. Lägg till anpassade frågor - Samla in företag, roll och telefondata för rikare kontaktprofiler
  3. Mappa händelsetyper - Tilldela olika Brevo-listor per Calendly-händelsetyp
  4. Hantera no-shows - Följ no-shows för att justera leadscoring och uppföljningssekvenser
  5. Använd schemaläggningslänkar - Generera unika schemaläggningslänkar för personliga bokningsupplevelser
  6. Sätt organisationsscope - Använd webhooks på org-nivå för att fånga händelser från alla teammedlemmar

Säkerhet

  • OAuth 2.0 - Scopad tokenbaserad autentisering
  • Webhook-signaturer - HMAC-signaturvalidering för inkommande webhooks
  • Endast HTTPS - Alla API-endpoints kräver TLS-kryptering
  • Token-utgång - OAuth-tokens går ut och kräver refresh-flöden
  • Minimala scopes - Begär endast nödvändiga OAuth-scopes
  • Säker lagring - Lagra tokens i miljövariabler eller hemlighetshanterare

Relaterade resurser

Ansök om tidig åtkomst

Ange ditt förnamn och din e-postadress på jobbet. Vi skickar en länk för att bekräfta din begäran om åtkomst till Tajo.

AI-assistent

Hej! Fråga mig om dokumentationen.

Den här sidan som Markdown: calendly.md

Läser in Markdown …
Öppna i Claude Öppna i ChatGPT