Calendly कनेक्टर

meeting invitees को स्वचालित रूप से contacts के रूप में sync करने, booking events के आधार पर email sequences trigger करने, और अपने sales एवं onboarding workflows को सुव्यवस्थित करने के लिए Tajo के माध्यम से Calendly को Brevo से कनेक्ट करें।

अवलोकन

PropertyValue
PlatformCalendly
CategoryScheduling (Custom)
Setup ComplexityEasy
Official IntegrationNo
Data SyncedEvents, Contacts, Bookings, Cancellations
Auth MethodOAuth 2.0 / Personal Access Token

विशेषताएं

  • Invitee sync - meeting invitees से स्वचालित रूप से Brevo contacts बनाएं
  • Booking triggers - जब meetings book हों तो Brevo automations चलाएं
  • Cancellation handling - cancellations पर re-engagement flows trigger करें
  • No-show detection - जब invitees meetings miss करें तो contact status अपडेट करें
  • Event type mapping - विभिन्न Calendly event types को Brevo lists से map करें
  • Scheduling API - redirects के बिना scheduling को सीधे अपने app में बनाएं

पूर्वावश्यकताएं

शुरू करने से पहले, सुनिश्चित करें कि आपके पास हैं:

  1. एक Calendly account (API access के लिए Professional plan या उससे ऊपर)
  2. Calendly Integrations से एक Personal Access Token
  3. API access वाला एक Brevo account
  4. connector permissions वाला एक Tajo account

प्रमाणीकरण

Personal Access Token

Terminal window
# https://calendly.com/integrations/api_webhooks पर generate करें
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'
});
// token के लिए code exchange करें
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

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

EndpointMethodविवरण
https://api.calendly.com/users/meGETवर्तमान user प्राप्त करें
https://api.calendly.com/event_typesGETevent types list करें
https://api.calendly.com/scheduled_eventsGETscheduled events list करें
https://api.calendly.com/scheduled_events/{uuid}GETएक scheduled event प्राप्त करें
https://api.calendly.com/scheduled_events/{uuid}/inviteesGETinvitees list करें
https://api.calendly.com/scheduling_linksPOSTscheduling link बनाएं
https://api.calendly.com/webhook_subscriptionsPOSTwebhook बनाएं
https://api.calendly.com/webhook_subscriptionsGETwebhooks list करें
https://api.calendly.com/invitee_no_shows/{uuid}GETno-show status प्राप्त करें

कोड उदाहरण

कनेक्टर शुरू करें

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

Scheduled Events List करें

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

Invitees को Brevo से Sync करें

// scheduled event के लिए invitees प्राप्त करें और Brevo से sync करें
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 Subscriptions सेट करें

// Calendly events की subscribe करें
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 Events हैंडल करें

app.post('/webhooks/calendly', async (req, res) => {
// 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');
});

Rate Limits

संसाधनLimitनोट्स
API requests6,000/minOrganization-wide limit
Webhook subscriptionsप्रति organization 30सभी event types में
Scheduling linksअसीमितकोई per-minute limit नहीं

Pagination

Calendly API responses cursor-आधारित pagination का उपयोग करते हैं। अतिरिक्त परिणाम प्राप्त करने के लिए pagination object से next_page_token का उपयोग करें। डिफ़ॉल्ट page size 20 items है, अधिकतम 100।

समस्या निवारण

समस्याकारणसमाधान
Webhook प्राप्त नहीं हुआगलत scopewebhooks के लिए organization scope का उपयोग करें
401 UnauthorizedToken expire हो गयानया token generate करें या OAuth token refresh करें
गायब invitee dataQuestions कॉन्फ़िगर नहींevent type में custom questions जोड़ें
Duplicate contactsdedup logic नहींupserts के लिए email को unique identifier के रूप में उपयोग करें
Rate limit 429बहुत अधिक requestsbackoff और request batching लागू करें

Debug Mode

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

सर्वोत्तम प्रथाएं

  1. Webhooks का उपयोग करें - real-time sync के लिए invitee.created और invitee.canceled की subscribe करें
  2. Custom questions जोड़ें - समृद्ध contact profiles के लिए company, role, और phone data एकत्र करें
  3. Event types को map करें - प्रति Calendly event type अलग Brevo lists assign करें
  4. No-shows संभालें - lead scoring और follow-up sequences adjust करने के लिए no-shows ट्रैक करें
  5. Scheduling links का उपयोग करें - personalized booking experiences के लिए unique scheduling links generate करें
  6. Organization scope सेट करें - सभी team members के events capture करने के लिए org-level webhooks का उपयोग करें

सुरक्षा

  • OAuth 2.0 - Scoped token-आधारित authentication
  • Webhook signatures - incoming webhooks के लिए HMAC signature validation
  • HTTPS only - सभी API endpoints के लिए TLS encryption आवश्यक
  • Token expiry - OAuth tokens expire होते हैं और refresh flows की आवश्यकता होती है
  • Minimal scopes - केवल आवश्यक OAuth scopes का अनुरोध करें
  • Secure storage - tokens को environment variables या secret managers में store करें

संबंधित संसाधन

Subscribe to updates

developer-docs

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

auto-detect
AI Assistant

Hi! Ask me anything about the docs.