attioom
v0.1.0
Published
Native Zoom cloud recording, bridged into Attio Call Intelligence — no bot participant required.
Maintainers
Readme
attioom
Native Zoom cloud recording, bridged into Attio Call Intelligence — no bot participant required.
Attio cannot join Zoom calls as a recorder. This package listens for Zoom recording.completed webhooks, stages the MP4 in Supabase Storage, pushes it to Attio as a call recording, and optionally uploads the Zoom VTT transcript. A scheduler enables cloud recording on upcoming meetings that match your policy.
Architecture
See docs/architecture.md for the full component breakdown. Overview:
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 rowsFeatures
- Resumable queue with lease-based claiming and per-row retry budgets
- Transcript polling — fetches Zoom VTT and pushes to Attio; handles late transcripts
- Auto-recording scheduler — patches
auto_recording: cloudon meetings for configured users - Webhook deduplication — durable claim → process → commit lifecycle
- Policy engine — external-participant checks, min duration, topic skip patterns, 1:1 filtering
- Size limits — enforces Attio's 500MB video cap before upload
Quickstart
- Follow docs/setup.md — Zoom S2S OAuth app, Attio token + workspace enablement, Supabase schema, env vars.
- Deploy the reference app in example/nextjs (Vercel or any Node host).
- Point Zoom's webhook URL at
https://<host>/api/webhooks/zoom. - Configure your scheduler to hit the cron routes with
Authorization: Bearer $CRON_SECRET.
npm install
npm run build
npm run check:proprietary && npm run typecheck && npm run lint && npm testTunable constants and env defaults: docs/tuning.md.
API gotchas (Zoom + Attio): docs/api-notes.md.
License
MIT — see LICENSE.
