π― Zoom + Calendly ExecModules Integration Guide
Overviewβ
This document describes the complete integration of Zoom Meeting and Calendly Scheduling modules into the Workflow Studio.
Backend Implementation (Java)β
ZoomMeetingModuleβ
Location: com.valkyrlabs.workflow.modules.social.ZoomMeetingModule
Supported Actions:
create- Create a new Zoom meetingget- Retrieve meeting detailslist- List all meetingsupdate- Update meeting settingsdelete- Delete a meeting
Features:
- Reactive streams (Project Reactor)
- Full RBAC support
- Comprehensive exception handling
- Support for recurring meetings, PAC, instant meetings
- Meeting settings (host video, participant video, auto recording, etc.)
CalendlySchedulingModuleβ
Location: com.valkyrlabs.workflow.modules.social.CalendlySchedulingModule
Supported Actions:
get_user- Get user profile informationget_events- List calendar eventsschedule_event- Create new appointmentcancel_event- Cancel an appointment
Features:
- Non-blocking I/O
- Bidirectional integration
- Full calendar management
- Timezone support
- Event filtering
Frontend Implementation (TypeScript/React)β
1. Module Catalog Registrationβ
File: execModuleCatalog.ts
// Zoom module
{
className: "com.valkyrlabs.workflow.modules.social.ZoomMeetingModule",
moduleType: "social.zoom.meeting",
title: "Zoom Meeting",
category: "Meetings",
icon: "πΉ",
accentColor: "#2D8CFF",
// ...
}
// Calendly module
{
className: "com.valkyrlabs.workflow.modules.social.CalendlySchedulingModule",
moduleType: "social.calendly.scheduling",
title: "Calendly Scheduling",
category: "Meetings",
icon: "π
",
accentColor: "#2D8CFF",
// ...
}
2. Connection Managementβ
Files:
ZoomCalendlyConnectionDialog.tsx- Beautiful floating dialog for API credential managementZoomCalendlyConnectionDialog.css- Animated overlay styling
Features:
- Service-specific forms (Zoom vs Calendly)
- Input validation with helpful error messages
- Success notifications
- Links to API documentation
- Persistent credential storage via
IntegrationAccountMutation
3. Module Configuration Designersβ
ZoomModuleDesigner.tsxβ
<ZoomModuleDesigner
module={selectedModule}
onConfigChange={(config) => updateModule(config)}
/>
Provides:
- Action selector (create, get, list, update, delete)
- Meeting configuration (topic, type, duration, timezone)
- Settings (video, recording, join-before-host, mute-upon-entry)
- Real-time config preview
CalendlyModuleDesigner.tsxβ
<CalendlyModuleDesigner
module={selectedModule}
onConfigChange={(config) => updateModule(config)}
/>
Provides:
- Action selector (get_user, get_events, schedule_event, cancel_event)
- Email and timezone configuration
- Event type and guest management
- Time slot selection
- Real-time config preview
4. Floating Dialog System (SageChat-style)β
Execution Modules Palette:
- π¦ Right-positioned panel (320px Γ 70vh)
- Draggable with persistent positioning
- Smooth animations
Module Configuration Dialog:
- βοΈ Centered dialog (480px Γ 80vh)
- Draggable configuration interface
- No modal conflicts
Connection Credentials Dialog:
- π Floating overlay with backdrop blur
- Service-specific forms
- Input validation & error handling
- API documentation links
Usage Examplesβ
Example 1: Zoom Meeting Schedulerβ
Workflow: zoom-meeting-scheduler.json
Flow:
- Trigger: Manual trigger
- Create Zoom Meeting: Configure meeting details
- Send Email: Share meeting link via SendGrid
- Success: Complete
{
"id": "zoom-meeting-scheduler-example",
"name": "πΉ Zoom Meeting Scheduler",
"description": "Create a Zoom meeting and automatically share the link via email"
}
Example 2: Calendly Appointment Syncβ
Workflow: calendly-appointment-sync.json
Flow:
- Trigger: Scheduled (every 30 minutes)
- Fetch Calendly Events: List all confirmed events
- Filter: Keep only confirmed appointments
- Loop: Process each event
- Notify Team: Send Slack notification
- Success: Complete
{
"id": "calendly-appointment-sync-example",
"name": "π
Calendly Appointment Sync",
"description": "Sync Calendly appointments and notify team"
}
Mobile Optimizationβ
Mushroom Handles (Touch-Friendly)β
TaskModuleChain.css:
- Drag handle: 48px (was 32px)
- Action buttons: 44Γ44px (iOS standard)
LooperNode.css:
- Connection handles: 24Γ24px (was 12Γ12px)
- Loop body port: 28Γ28px (GIANT!)
- Enhanced shadows & glow for visibility
Integration Checklistβ
- Zoom module registered in execModuleCatalog
- Calendly module registered in execModuleCatalog
- Connection dialog implemented
- Zoom designer component created
- Calendly designer component created
- Example workflows included
- Mobile handles optimized
- Floating dialogs styled
- Module designers exported via index.ts
File Structureβ
WorkflowStudio/
βββ execModuleCatalog.ts (module definitions)
βββ ZoomCalendlyConnectionDialog.tsx (connection UI)
βββ ZoomCalendlyConnectionDialog.css (connection styling)
βββ ZOOM_CALENDLY_INTEGRATION.md (this file)
βββ ModuleDesigner/
β βββ ZoomModuleDesigner.tsx (Zoom config UI)
β βββ CalendlyModuleDesigner.tsx (Calendly config UI)
β βββ index.ts (designer exports)
βββ exampleWorkflows/
β βββ zoom-meeting-scheduler.json (example 1)
β βββ calendly-appointment-sync.json (example 2)
βββ TaskModuleChain.css (mobile handles)