Native Zoom cloud recording, bridged into Attio Call Intelligence — no bot participant required.
Text version of the same flow:
Zoom webhook (recording.completed)
│
▼
┌───────────────────┐
│ Webhook handler │ verify signature, dedup-claim, enqueue row (< 3s)
└─────────┬─────────┘
│
▼
┌───────────────────┐
│ Supabase Postgres │ zoom_attio_bridge_recordings (resumable queue + leases)
│ Supabase Storage │ temporary MP4 staging (signed URLs for Attio)
└─────────┬─────────┘
│
▼ cron: process-queue (every 5 min)
┌───────────────────┐
│ Bridge processor │ policy → match Attio meeting → download → stage → push
└─────────┬─────────┘
│
▼
┌───────────────────┐
│ Attio API │ POST call_recording (video_url) + transcript push
└───────────────────┘
Parallel cron ladder:
• scheduler (every 10 min) — enable cloud recording on upcoming meetings
• sweep-dedup (every 5 min) — reclaim stale webhook claim rows
| Layer | Role |
|---|---|
| Webhook handler | Answers Zoom within 3s: signature verify, dedup claim, enqueue one row per recording |
| Postgres queue | zoom_attio_bridge_recordings — resumable status ladder with lease-based claiming |
| Storage staging | Temporary MP4 in Supabase Storage; signed public URL for Attio to fetch |
| Bridge processor | Policy checks, Attio meeting match/create, download, stage, push video + transcript |
| Scheduler | Enables auto_recording: cloud on upcoming meetings for configured users |
| Dedup sweep | Reclaims stale webhook claim rows |
Deploy the Next.js app in example/nextjs (Vercel or any Node host). See setup.md for credentials and env vars, tuning.md for policy knobs, and api-notes.md for Zoom/Attio gotchas.
