Open-Source Wikis

/

Cal.com

/

Features

/

Workflows and reminders

calcom/cal.com

Workflows and reminders

Purpose

Workflows let organizers attach automation to event types: send a reminder 24 hours before, send an SMS thanks-you 1 hour after, mark no-show automatically if the host doesn't join. In upstream Cal.com these are richly configurable via an EE workflow runtime; in Cal.diy that runtime is being deprecated as part of the EE removal sprint. The remaining facilities are simpler reminder + no-show flows that hook directly into the tasker.

The recent commit d2a54e2 — refactor: remove dead workflow runtime config (2026-04-28) is part of this cleanup.

What still exists in Cal.diy

  • Reminder cadence — booking reminders (email, SMS, WhatsApp) scheduled via packages/features/tasker and drained by cron-bookingReminder.yml, cron-scheduleEmailReminders.yml, cron-scheduleSMSReminders.yml, cron-scheduleWhatsappReminders.yml.
  • No-show flowpackages/features/handleMarkNoShow.ts (top-level), packages/features/noShow/, plus scheduleNoShowTriggers.ts inside the booking pipeline. This is wired from both attendee + host perspectives.
  • Webhook-based automation — for any "if booking happens, do X" use case, the supported pattern is an outbound webhook to Zapier / n8n / Make (apps under packages/app-store/).
  • Workflow constants and schemas — preserved in packages/features/ee/workflows/lib/constants.ts (AGENTS.md references this path) for backward compatibility with persisted workflow configurations on existing event types.

What's being removed

The EE workflow runtime — the engine that interpreted workflow definitions and dispatched their actions — has been progressively removed. Recent cleanup PRs include:

  • d2a54e2refactor: remove dead workflow runtime config
  • Multiple cleanup(test): remove ... integration coverage commits that drop EE-specific test fixtures

The removed pieces were tightly coupled to Cal.com's hosted product (license-key checks, EE billing). Self-hosted Cal.diy users replace them with webhook-based automation through the App Store.

Reminder flow (what's left)

sequenceDiagram
    participant Booking as RegularBookingService
    participant Tasker as features/tasker
    participant DB as Postgres (Task table)
    participant Cron as cron-bookingReminder.yml
    participant Endpoint as apps/web/pages/api/cron/...
    participant Email as packages/emails

    Booking->>Tasker: enqueue("reminder", payload, runAt = booking.startTime - 24h)
    Tasker->>DB: INSERT Task
    Cron->>Endpoint: HTTP GET /api/cron/...
    Endpoint->>DB: SELECT pending tasks where runAt <= now()
    Endpoint->>Email: render + send
    Endpoint->>DB: UPDATE Task status = succeeded

Migration guidance

If you are migrating from a Cal.com (EE) deployment to Cal.diy:

  1. Existing workflow definitions on event types remain in the Workflow table but the runtime no longer interprets them.
  2. The recommended replacement is an outbound webhook subscription that posts to your automation tool of choice (Zapier, n8n, Make, Pipedream).
  3. For per-attendee reminders, use the standard reminder fields on the event type (these still flow through tasker).
  4. For no-show handling, the no-show flow is preserved; the EE-only "post-no-show" workflow actions are not.

Entry points for modification

  • Reminder content: edit templates in packages/emails/.
  • Reminder timing: edit the producer in packages/features/bookings/lib/handleNewBooking/scheduleNoShowTriggers.ts and similar.
  • No-show logic: edit packages/features/handleMarkNoShow.ts and packages/features/noShow/.

Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.

Workflows and reminders – Cal.com wiki | Factory