Σύνδεσμος Calendly

Συνδέστε το Calendly με το Brevo μέσω Tajo για αυτόματο συγχρονισμό προσκεκλημένων σε συναντήσεις ως επαφές, ενεργοποίηση ακολουθιών email βάσει εκδηλώσεων κράτησης και βελτιστοποίηση ροών εργασίας πωλήσεων και εισαγωγής.

Επισκόπηση

ΙδιότηταΤιμή
ΠλατφόρμαCalendly
ΚατηγορίαΠρογραμματισμός (Προσαρμοσμένο)
Πολυπλοκότητα ΡύθμισηςΕύκολη
Επίσημη ΕνσωμάτωσηΌχι
Δεδομένα που ΣυγχρονίζονταιΕκδηλώσεις, Επαφές, Κρατήσεις, Ακυρώσεις
Μέθοδος ΠιστοποίησηςOAuth 2.0 / Personal Access Token

Χαρακτηριστικά

  • Συγχρονισμός προσκεκλημένων - Αυτόματη δημιουργία επαφών Brevo από προσκεκλημένους σε συναντήσεις
  • Ενεργοποιητές κράτησης - Ενεργοποίηση αυτοματισμών Brevo κατά την κράτηση συναντήσεων
  • Χειρισμός ακυρώσεων - Ενεργοποίηση ροών επαναδέσμευσης κατά τις ακυρώσεις
  • Ανίχνευση μη εμφάνισης - Ενημέρωση κατάστασης επαφής όταν οι προσκεκλημένοι χάνουν συναντήσεις
  • Αντιστοίχιση τύπου εκδήλωσης - Αντιστοίχιση διαφορετικών τύπων εκδηλώσεων Calendly σε λίστες Brevo
  • Scheduling API - Ενσωμάτωση προγραμματισμού απευθείας στην εφαρμογή σας χωρίς ανακατευθύνσεις

Προαπαιτούμενα

Πριν ξεκινήσετε, βεβαιωθείτε ότι διαθέτετε:

  1. Λογαριασμό Calendly (Professional πλάνο ή ανώτερο για πρόσβαση API)
  2. Personal Access Token από το Calendly Integrations
  3. Λογαριασμό Brevo με πρόσβαση API
  4. Λογαριασμό Tajo με δικαιώματα συνδέσμου

Πιστοποίηση

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

Διαμόρφωση

Βασική Ρύθμιση

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

Αντιστοίχιση Πεδίων

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

Endpoints API

EndpointΜέθοδοςΠεριγραφή
https://api.calendly.com/users/meGETΛήψη τρέχοντος χρήστη
https://api.calendly.com/event_typesGETΛίστα τύπων εκδηλώσεων
https://api.calendly.com/scheduled_eventsGETΛίστα προγραμματισμένων εκδηλώσεων
https://api.calendly.com/scheduled_events/{uuid}GETΛήψη προγραμματισμένης εκδήλωσης
https://api.calendly.com/scheduled_events/{uuid}/inviteesGETΛίστα προσκεκλημένων
https://api.calendly.com/scheduling_linksPOSTΔημιουργία συνδέσμου προγραμματισμού
https://api.calendly.com/webhook_subscriptionsPOSTΔημιουργία webhook
https://api.calendly.com/webhook_subscriptionsGETΛίστα webhooks
https://api.calendly.com/invitee_no_shows/{uuid}GETΛήψη κατάστασης μη εμφάνισης

Παραδείγματα Κώδικα

Αρχικοποίηση Συνδέσμου

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

Λίστα Προγραμματισμένων Εκδηλώσεων

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

Συγχρονισμός Προσκεκλημένων στο 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

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

Χειρισμός Εκδηλώσεων 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');
});

Όρια Ρυθμού

ΠόροςΌριοΣημειώσεις
Αιτήματα API6.000/λεπτόΌριο σε επίπεδο οργανισμού
Συνδρομές webhook30 ανά οργανισμόΣε όλους τους τύπους εκδηλώσεων
Σύνδεσμοι προγραμματισμούΑπεριόριστοΧωρίς όριο ανά λεπτό

Σελιδοποίηση

Οι αποκρίσεις API Calendly χρησιμοποιούν σελιδοποίηση βάσει cursor. Χρησιμοποιήστε το next_page_token από το αντικείμενο pagination για ανάκτηση πρόσθετων αποτελεσμάτων. Το προεπιλεγμένο μέγεθος σελίδας είναι 20 στοιχεία, με μέγιστο 100.

Αντιμετώπιση Προβλημάτων

ΠρόβλημαΑιτίαΛύση
Δεν λαμβάνεται webhookΛάθος scopeΧρησιμοποιήστε scope organization για webhooks
401 UnauthorizedΤο token έληξεΔημιουργήστε νέο token ή ανανεώστε OAuth token
Λείπουν δεδομένα προσκεκλημένουΤα ερωτήματα δεν έχουν ρυθμιστείΠροσθέστε προσαρμοσμένα ερωτήματα στον τύπο εκδήλωσης
Διπλές επαφέςΧωρίς λογική dedupΧρησιμοποιήστε email ως μοναδικό αναγνωριστικό για upserts
Όριο ρυθμού 429Υπερβολικά πολλά αιτήματαΕφαρμόστε backoff και ομαδοποίηση αιτημάτων

Λειτουργία Εντοπισμού Σφαλμάτων

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

Βέλτιστες Πρακτικές

  1. Χρησιμοποιήστε webhooks - Εγγραφείτε στα invitee.created και invitee.canceled για συγχρονισμό σε πραγματικό χρόνο
  2. Προσθέστε προσαρμοσμένα ερωτήματα - Συλλέξτε εταιρεία, ρόλο και δεδομένα τηλεφώνου για πλουσιότερα προφίλ επαφών
  3. Αντιστοιχίστε τύπους εκδηλώσεων - Αναθέστε διαφορετικές λίστες Brevo ανά τύπο εκδήλωσης Calendly
  4. Χειριστείτε μη εμφανίσεις - Παρακολουθήστε μη εμφανίσεις για προσαρμογή βαθμολόγησης leads και ακολουθιών παρακολούθησης
  5. Χρησιμοποιήστε συνδέσμους προγραμματισμού - Δημιουργήστε μοναδικούς συνδέσμους προγραμματισμού για εξατομικευμένες εμπειρίες κράτησης
  6. Ορίστε scope οργανισμού - Χρησιμοποιήστε webhooks σε επίπεδο οργανισμού για καταγραφή εκδηλώσεων από όλα τα μέλη της ομάδας

Ασφάλεια

  • OAuth 2.0 - Πιστοποίηση βάσει token με περιορισμένο scope
  • Υπογραφές webhook - Επαλήθευση υπογραφής HMAC για εισερχόμενα webhooks
  • Μόνο HTTPS - Όλα τα endpoints API απαιτούν κρυπτογράφηση TLS
  • Λήξη token - Τα OAuth tokens λήγουν και απαιτούν ροές ανανέωσης
  • Ελάχιστα scopes - Ζητήστε μόνο τα απαιτούμενα scopes OAuth
  • Ασφαλής αποθήκευση - Αποθηκεύστε tokens σε μεταβλητές περιβάλλοντος ή διαχειριστές secrets

Σχετικοί Πόροι

Subscribe to updates

developer-docs

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

auto-detect
AI Βοηθός

Γεια! Ρωτήστε με οτιδήποτε για την τεκμηρίωση.