Calendly-kobling
Koblingsstatus: Planlagt Ikke bygget ennå. Tajo kjører ikke denne koblingen i dag.
Illustrasjon · eksempeldata
Eksempel på synkronisering
Kilde
Calendly
Koblingsstatus: Planlagt
Mål
Det andre verktøyet ditt
Koblingsstatus: Eget verktøy
Feltkobling
| Kildefelt | Målfelt | Eksempelverdi |
|---|---|---|
record.id | source_id | record_1042 |
record.updated_at | updated_at | 2026-10-18T08:00:00Z |
record.value | value | sample_value |
- Utkast
- Se gjennom én oppføring
- Godkjenn denne versjonen
Status gjelder hver enkelt kobling og garanterer ikke at denne synkroniseringen er klar. Feltene er illustrative. Kontroller faktisk skjema og tillatelser før synkroniseringen kjører.
Koble Calendly til Brevo via Tajo for automatisk å synkronisere møte-invitees som kontakter, utløse e-postsekvenser basert på bookinghendelser og effektivisere salgs- og onboarding-arbeidsflytene dine.
Oversikt
| Egenskap | Verdi |
|---|---|
| Plattform | Calendly |
| Kategori | Planlegging (Custom) |
| Oppsettskompleksitet | Enkel |
| Offisiell integrasjon | Nei |
| Synkroniserte data | Hendelser, kontakter, bookinger, kanselleringer |
| Autentiseringsmetode | OAuth 2.0 / Personal Access Token |
Funksjoner
- Invitee-synkronisering - Opprett automatisk Brevo-kontakter fra møte-invitees
- Booking-triggere - Utløs Brevo-automatiseringer når møter bookes
- Håndtering av kanselleringer - Utløs re-engasjementsflyter ved kanselleringer
- No-show-deteksjon - Oppdater kontaktstatus når invitees ikke dukker opp på møter
- Mapping av hendelsestyper - Mapp ulike Calendly-hendelsestyper til Brevo-lister
- Scheduling API - Bygg planlegging direkte inn i appen din uten redirects
Forutsetninger
Før du begynner, sørg for at du har:
- En Calendly-konto (Professional-plan eller høyere for API-tilgang)
- En Personal Access Token fra Calendly Integrations
- En Brevo-konto med API-tilgang
- En Tajo-konto med koblingstillatelser
Autentisering
Personal Access Token
# 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' })});Konfigurasjon
Grunnleggende oppsett
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}"Feltmapping
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-endepunkter
| Endepunkt | Metode | Beskrivelse |
|---|---|---|
https://api.calendly.com/users/me | GET | Hent gjeldende bruker |
https://api.calendly.com/event_types | GET | List hendelsestyper |
https://api.calendly.com/scheduled_events | GET | List planlagte hendelser |
https://api.calendly.com/scheduled_events/{uuid} | GET | Hent en planlagt hendelse |
https://api.calendly.com/scheduled_events/{uuid}/invitees | GET | List invitees |
https://api.calendly.com/scheduling_links | POST | Opprett planleggingslenke |
https://api.calendly.com/webhook_subscriptions | POST | Opprett webhook |
https://api.calendly.com/webhook_subscriptions | GET | List webhooks |
https://api.calendly.com/invitee_no_shows/{uuid} | GET | Hent no-show-status |
Kodeeksempler
Initialiser kobling
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});List planlagte hendelser
// 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();Synkroniser invitees til Brevo
// 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] });}Sett opp webhook-abonnementer
// 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
Adressen example.com ovenfor er en plassholder til Tajo-endepunktet er tilgjengelig.
Håndter webhook-hendelser
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');});Hastighetsgrenser
| Ressurs | Grense | Merknader |
|---|---|---|
| API-forespørsler | 6 000/min | Organisasjonsomfattende grense |
| Webhook-abonnementer | 30 per organisasjon | På tvers av alle hendelsestyper |
| Planleggingslenker | Ubegrenset | Ingen per-minutt-grense |
Paginering
Calendly API-responser bruker cursor-basert paginering. Bruk next_page_token fra pagination-objektet for å hente flere resultater. Standard sidestørrelse er 20 elementer, med maksimalt 100.
Feilsøking
| Problem | Årsak | Løsning |
|---|---|---|
| Webhook ikke mottatt | Feil scope | Bruk organization-scope for webhooks |
| 401 Unauthorized | Token utløpt | Generer ny token eller oppdater OAuth-token |
| Manglende invitee-data | Spørsmål ikke konfigurert | Legg til egendefinerte spørsmål til hendelsestype |
| Dupliserte kontakter | Ingen dedup-logikk | Bruk e-post som unik identifikator for upserts |
| Hastighetsgrense 429 | For mange forespørsler | Implementer backoff og batchfordeling av forespørsler |
Feilsøkingsmodus
connectors: calendly: debug: true log_level: verbose log_webhooks: trueBeste praksis
- Bruk webhooks - Abonner på
invitee.createdoginvitee.canceledfor sanntidssynkronisering - Legg til egendefinerte spørsmål - Samle inn selskap-, rolle- og telefondata for rikere kontaktprofiler
- Mapp hendelsestyper - Tildel ulike Brevo-lister per Calendly-hendelsestype
- Håndter no-shows - Spor no-shows for å justere lead-scoring og oppfølgingssekvenser
- Bruk planleggingslenker - Generer unike planleggingslenker for personaliserte bookingopplevelser
- Sett organisasjonsscope - Bruk org-nivå-webhooks for å fange hendelser fra alle teammedlemmer
Sikkerhet
- OAuth 2.0 - Scopet tokenbasert autentisering
- Webhook-signaturer - HMAC-signaturvalidering for innkommende webhooks
- Kun HTTPS - Alle API-endepunkter krever TLS-kryptering
- Token-utløp - OAuth-tokens utløper og krever refresh-flyter
- Minimale scopes - Be kun om nødvendige OAuth-scopes
- Sikker lagring - Lagre tokens i miljøvariabler eller secret managers