Skip to content

Latest commit

 

History

History
72 lines (56 loc) · 3.18 KB

File metadata and controls

72 lines (56 loc) · 3.18 KB

attioom — native Zoom cloud recording, bridged into Attio Call Intelligence, no bot participant required

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 rows

Features

  • 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: cloud on 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

  1. Follow docs/setup.md — Zoom S2S OAuth app, Attio token + workspace enablement, Supabase schema, env vars.
  2. Deploy the reference app in example/nextjs (Vercel or any Node host).
  3. Point Zoom's webhook URL at https://<host>/api/webhooks/zoom.
  4. 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 test

Tunable constants and env defaults: docs/tuning.md.

API gotchas (Zoom + Attio): docs/api-notes.md.

License

MIT — see LICENSE.