Human overview · for understanding
Fireflies HYBRID smart relay · built, merged to main, live on v102 · 2026-06-24 · 2026-06-24
Fireflies HYBRID smart relay · built, merged to main, live on v102 · 2026-06-24
Master summary — the gist in 30 seconds
Inputs: a Google Meet call (or a recorded audio file, or a pasted transcript). Outputs: the transcript + a Hungarian AI summary on the lead's deal card AND a full row in a dedicated Notion 'Call Recordings & Transcripts' database — never anything auto-sent to the lead.
flowchart LR
A[Meet call / upload / paste] --> B{how many<br/>humans?}
B -->|≤3| C[bot-free SDK]
B -->|>3| D[Notetaker bot]
C --> E[Fireflies webhook]
D --> E
E --> F[match the deal]
F --> G[store + HU summary]
G --> H[board pill]
G --> I[Notion calls DB]
Input: the Meet participant list. Output: a routing decision — 'sdk' (no bot, the common 1:1 case), 'bot' (auto-invite the notetaker for >3, since the bot-free SDK caps at 3), or 'none' (only one person = a holding room).
flowchart TD
P[participants] --> N{distinct<br/>humans}
N -->|<2| X[none]
N -->|2-3| S[sdk · bot-free]
N -->|>3| B[bot · addToLiveMeeting]
Input: repeated 'participant joined' events for the same meeting. Output: one bot invite, then no-ops. The guard is store().put_if_absent('meet_bot_sent:URL') — the documented store().set(ttl=) would have thrown AttributeError and never dispatched.
flowchart LR
E1[event #1] --> C{claim<br/>meet_bot_sent}
C -->|new| D[dispatch once]
E2[event #2] --> C
C -->|exists| K[skip]
Input: a finished transcript's webhook. Output: the exact deal. New: read clientReferenceId (the deal id we already pass on upload) BEFORE the email→CRM→meeting-id chain, so an aliased or unknown attendee email no longer loses the match.
flowchart TD
W[webhook] --> R1{clientReferenceId?}
R1 -->|yes| D[deal]
R1 -->|no| R2{cal_id / email}
R2 -->|hit| D
R2 -->|miss| SL[Slack flag · link by hand]
Input: a matched + summarized call. Output: a row in 'Call Recordings & Transcripts' — Lead→CRM relation, recording URL, duration, source, Hungarian AI summary, status, and the diarized transcript as markdown. Deduped on Transcript ID so a retried webhook never doubles it.
flowchart LR
T[transcript] --> Q{Transcript ID<br/>seen?}
Q -->|yes| K[skip]
Q -->|no| C[create row]
C --> L[Lead → CRM]
C --> M[markdown body]
Input: your account actions. Output: full automation. Live now: upload + paste → Notion row, the relay routing, idempotency. Blocked on you: Workspace admin approval for the bot-free Meet SDK, the account-level Fireflies webhook, and the Meet participant-joined subscription.
flowchart TD NOW[live v102: upload · paste · relay routing] --> OK[usable today] OWN[owner: admin + plan + webhook + sub] --> SDK[≤3 bot-free auto-capture] OWN --> TRG[automatic >3 live trigger]