Poproś o wcześniejszy dostęp

Podaj imię i firmowy adres e-mail. Wyślemy Ci link potwierdzający prośbę o dostęp do Tajo.

Konektor Calendly

Status konektora: Planowany Jeszcze niezbudowany. Tajo nie uruchamia dziś tego konektora.

Ilustracja · przykładowe dane

Przykład synchronizacji

Sprawdź jeden rekord

Źródło

Calendly

Status konektora: Planowany

Cel

Twoje drugie narzędzie

Status konektora: Własne narzędzie

Pole źródłowePole docelowePrzykładowa wartość
record.id source_id record_1042
record.updated_at updated_at 2026-10-18T08:00:00Z
record.value value sample_value
  1. Projekt
  2. Sprawdź jeden rekord
  3. Zatwierdź tę wersję

Statusy dotyczą poszczególnych konektorów i nie gwarantują, że ta synchronizacja jest gotowa. Pola są przykładowe. Przed uruchomieniem synchronizacji sprawdź rzeczywisty schemat i uprawnienia.

Połącz Calendly z Brevo przez Tajo, aby automatycznie synchronizować zaproszonych na spotkania jako kontakty, wyzwalać sekwencje e-mailowe na podstawie zdarzeń rezerwacji i usprawniać przepływy sprzedaży i onboardingu.

Przegląd

WłaściwośćWartość
PlatformaCalendly
KategoriaPlanowanie (Niestandardowa)
Poziom konfiguracjiŁatwy
Integracja oficjalnaNie
Synchronizowane daneZdarzenia, Kontakty, Rezerwacje, Anulowania
Metoda uwierzytelnianiaOAuth 2.0 / Personal Access Token

Funkcje

  • Synchronizacja zaproszonych - Automatycznie twórz kontakty Brevo z zaproszonych na spotkania
  • Wyzwalacze rezerwacji - Uruchamiaj automatyzacje Brevo, gdy spotkania są rezerwowane
  • Obsługa anulowań - Wyzwalaj przepływy ponownego zaangażowania przy anulowaniach
  • Wykrywanie nieobecności - Aktualizuj status kontaktu, gdy zaproszeni nie pojawiają się na spotkaniach
  • Mapowanie typów zdarzeń - Mapuj różne typy zdarzeń Calendly na listy Brevo
  • Scheduling API - Wbuduj planowanie bezpośrednio w swoją aplikację bez przekierowań

Wymagania wstępne

Zanim zaczniesz, upewnij się, że masz:

  1. Konto Calendly (plan Professional lub wyższy dla dostępu do API)
  2. Personal Access Token z Calendly Integrations
  3. Konto Brevo z dostępem do API
  4. Konto Tajo z uprawnieniami konektora

Uwierzytelnianie

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

Konfiguracja

Podstawowa konfiguracja

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

Mapowanie pól

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

Endpointy API

EndpointMetodaOpis
https://api.calendly.com/users/meGETPobierz bieżącego użytkownika
https://api.calendly.com/event_typesGETLista typów zdarzeń
https://api.calendly.com/scheduled_eventsGETLista zaplanowanych zdarzeń
https://api.calendly.com/scheduled_events/{uuid}GETPobierz zaplanowane zdarzenie
https://api.calendly.com/scheduled_events/{uuid}/inviteesGETLista zaproszonych
https://api.calendly.com/scheduling_linksPOSTUtwórz link do planowania
https://api.calendly.com/webhook_subscriptionsPOSTUtwórz webhook
https://api.calendly.com/webhook_subscriptionsGETLista webhooków
https://api.calendly.com/invitee_no_shows/{uuid}GETPobierz status nieobecności

Przykłady kodu

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

Lista zaplanowanych zdarzeń

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

Synchronizuj zaproszonych z 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]
});
}

Skonfiguruj subskrypcje webhooków

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

Adres example.com powyżej jest symbolem zastępczym, dopóki endpoint Tajo nie będzie dostępny.

Obsługa zdarzeń webhook

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

Limity API

ZasóbLimitUwagi
Żądania API6 000/minLimit całej organizacji
Subskrypcje webhook30 na organizacjęDla wszystkich typów zdarzeń
Linki do planowaniaNieograniczoneBrak limitu na minutę

Paginacja

Odpowiedzi Calendly API używają paginacji opartej na kursorze. Używaj next_page_token z obiektu pagination, aby pobrać kolejne wyniki. Domyślny rozmiar strony to 20 elementów, z maksimum 100.

Rozwiązywanie problemów

ProblemPrzyczynaRozwiązanie
Webhook nie odebranyZły zakresUżywaj zakresu organization dla webhooków
401 UnauthorizedToken wygasłWygeneruj nowy token lub odśwież token OAuth
Brakujące dane zaproszonychPytania nie skonfigurowaneDodaj niestandardowe pytania do typu zdarzenia
Duplikaty kontaktówBrak logiki deduplikacjiUżywaj e-maila jako unikalnego identyfikatora dla upsert
Limit 429Za dużo żądańWdrożyj wycofanie i wsadowanie żądań

Tryb debug

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

Najlepsze praktyki

  1. Używaj webhooków - Subskrybuj invitee.created i invitee.canceled dla synchronizacji w czasie rzeczywistym
  2. Dodaj niestandardowe pytania - Zbieraj dane o firmie, roli i telefonie dla bogatszych profili kontaktów
  3. Mapuj typy zdarzeń - Przypisz różne listy Brevo dla każdego typu zdarzenia Calendly
  4. Obsługuj nieobecności - Śledź nieobecności, aby dostosować scoring leadów i sekwencje follow-up
  5. Używaj linków do planowania - Generuj unikalne linki do planowania dla spersonalizowanych doświadczeń rezerwacji
  6. Ustaw zakres organizacji - Używaj webhooków na poziomie organizacji, aby przechwytywać zdarzenia od wszystkich członków zespołu

Bezpieczeństwo

  • OAuth 2.0 - Uwierzytelnianie oparte na tokenach z zakresem
  • Podpisy webhook - Weryfikacja podpisu HMAC dla przychodzących webhooków
  • Tylko HTTPS - Wszystkie endpointy API wymagają szyfrowania TLS
  • Wygasanie tokenów - Tokeny OAuth wygasają i wymagają przepływów odświeżania
  • Minimalne zakresy - Żądaj tylko wymaganych zakresów OAuth
  • Bezpieczne przechowywanie - Przechowuj tokeny w zmiennych środowiskowych lub menedżerach sekretów

Powiązane zasoby

Poproś o wcześniejszy dostęp

Podaj imię i firmowy adres e-mail. Wyślemy Ci link potwierdzający prośbę o dostęp do Tajo.

Asystent AI

Cześć! Zapytaj mnie o dokumentację.

Ta strona jako Markdown: calendly.md

Wczytywanie Markdown…
Otwórz w Claude Otwórz w ChatGPT