Konektor Calendly

Propojte Calendly s Brevo přes Tajo pro automatickou synchronizaci pozvaných na schůzky jako kontaktů, spouštění e-mailových sekvencí na základě událostí rezervace a zjednodušení prodejních a onboardingových pracovních toků.

Přehled

VlastnostHodnota
PlatformaCalendly
KategoriePlánování (Vlastní)
Složitost nastaveníSnadná
Oficiální integraceNe
Synchronizovaná dataUdálosti, Kontakty, Rezervace, Zrušení
Metoda ověřeníOAuth 2.0 / Osobní přístupový token

Funkce

  • Synchronizace pozvaných – Automaticky vytvářejte kontakty Brevo z pozvaných na schůzky
  • Spouštěče rezervací – Spouštějte automatizace Brevo při rezervaci schůzek
  • Zpracování zrušení – Spouštějte toky pro opětovné zapojení při zrušeních
  • Detekce nedostavení – Aktualizujte stav kontaktu, když se pozvaní nedostaví na schůzku
  • Mapování typů událostí – Mapujte různé typy událostí Calendly na seznamy Brevo
  • Scheduling API – Integrujte plánování přímo do vaší aplikace bez přesměrování

Předpoklady

Než začnete, ujistěte se, že máte:

  1. Účet Calendly (plán Professional nebo vyšší pro přístup k API)
  2. Osobní přístupový token z Calendly Integrations
  3. Účet Brevo s přístupem k API
  4. Účet Tajo s oprávněními ke konektoru

Ověření

Osobní přístupový token

Terminal window
# Vygenerujte na 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

// Flow autorizačního kódu OAuth 2.0
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'
});
// Výměna kódu za 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'
})
});

Konfigurace

Základní nastavení

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

Mapování 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

Koncové body API

Koncový bodMetodaPopis
https://api.calendly.com/users/meGETZískání aktuálního uživatele
https://api.calendly.com/event_typesGETVýpis typů událostí
https://api.calendly.com/scheduled_eventsGETVýpis naplánovaných událostí
https://api.calendly.com/scheduled_events/{uuid}GETZískání naplánované události
https://api.calendly.com/scheduled_events/{uuid}/inviteesGETVýpis pozvaných
https://api.calendly.com/scheduling_linksPOSTVytvoření plánovacího odkazu
https://api.calendly.com/webhook_subscriptionsPOSTVytvoření webhooku
https://api.calendly.com/webhook_subscriptionsGETVýpis webhooků
https://api.calendly.com/invitee_no_shows/{uuid}GETZískání stavu nedostavení

Příklady kódu

Inicializace konektoru

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

Výpis naplánovaných událostí

// Načtení naplánovaných událostí
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();

Synchronizace pozvaných do Brevo

// Získání pozvaných pro naplánovanou událost a synchronizace do 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]
});
}

Nastavení odběrů webhooků

// Přihlášení k odběru událostí Calendly
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
})
}
);

Zpracování webhookových událostí

app.post('/webhooks/calendly', async (req, res) => {
// Ověření podpisu webhooku
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');
});

Omezení rychlosti

ProstředekLimitPoznámky
API požadavky6 000/minCelofiremní limit
Odběry webhooků30 na organizaciNapříč všemi typy událostí
Plánovací odkazyNeomezenoŽádný limit za minutu

Stránkování

Odpovědi Calendly API používají stránkování na základě kurzoru. Použijte next_page_token z objektu pagination pro načtení dalších výsledků. Výchozí velikost stránky je 20 položek, maximum je 100.

Řešení problémů

ProblémPříčinaŘešení
Webhook není přijatNesprávný rozsahPoužívejte rozsah organization pro webhooky
401 UnauthorizedToken vypršelVygenerujte nový token nebo obnovte OAuth token
Chybějící data pozvanéhoOtázky nejsou nakonfiguroványPřidejte vlastní otázky k typu události
Duplicitní kontaktyŽádná logika deduplikacePoužívejte e-mail jako jedinečný identifikátor pro upserty
Limit rychlosti 429Příliš mnoho požadavkůImplementujte zpětné odběrání a dávkování požadavků

Režim ladění

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

Osvědčené postupy

  1. Používejte webhooky – Přihlaste se k odběru invitee.created a invitee.canceled pro synchronizaci v reálném čase
  2. Přidejte vlastní otázky – Sbírejte data o společnosti, roli a telefonu pro bohatší profily kontaktů
  3. Mapujte typy událostí – Přiřaďte různé seznamy Brevo každému typu události Calendly
  4. Zpracovávejte nedostavení – Sledujte nedostavení pro úpravu bodování leadů a sekvencí sledování
  5. Používejte plánovací odkazy – Generujte jedinečné plánovací odkazy pro personalizované zkušenosti s rezervací
  6. Nastavte rozsah organizace – Používejte webhooky na úrovni organizace pro zachycení událostí od všech členů týmu

Zabezpečení

  • OAuth 2.0 – Ověřování na základě tokenů s omezeným rozsahem
  • Podpisy webhooků – Ověření podpisu HMAC pro příchozí webhooky
  • Pouze HTTPS – Všechny koncové body API vyžadují šifrování TLS
  • Vypršení tokenů – OAuth tokeny vypršejí a vyžadují toky obnovení
  • Minimální rozsahy – Požadujte pouze požadované rozsahy OAuth
  • Bezpečné úložiště – Ukládejte tokeny v proměnných prostředí nebo správcích tajných klíčů

Související zdroje

Subscribe to updates

developer-docs

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

auto-detect
AI asistent

Ahoj! Zeptejte se mě na dokumentaci.