ClientsFlow · Fireflies recording

Call recording, made reliable — what changed + 5-min activation

Bot-free stays the default; the visible Fred bot is now a deliberate fallback you summon from Slack · 2026-06-25 · build 4b42b63+v108

✅ Proven live today. We force-started the recorder on a real test Meet, you admitted the "Fireflies.ai Notetaker", and Fireflies reported the call as state: active — recording confirmed live, end-to-end. The mechanism works 10/10 provided the bot is admitted from the waiting room (see the loop below).

The one thing the research settled

There is no 100%-reliable fully-automatic way to detect "a meeting started, record it": the bot-free Google Meet SDK only auto-records meetings Fireflies synced from your calendar ahead of time — so an early join (before the scheduled start) or a last-minute meeting is missed (exactly what you saw: active_meetings: []). The Google Workspace Events API can't help either — it only delivers join-events for meetings your own account owns. So the robust answer is: keep bot-free as the default, confirm it in Slack, and give you a one-line manual fallback for the cases it misses.

How recording works now

🟢 Default: bot-free auto-record (no bot in the call) 🔴 Confirmation: Slack message when REC is live 🤖 Fallback: paste link in #meetings → Fred joins
MechanismWhat it doesBot visible?When it fires
Bot-free auto-record
default
Fireflies records calendar-synced meetings silently via the Meet SDK.No Scheduled calls that Fireflies synced ahead of time.
Slack "🔴 Recording in progress"
new
A 3-minute background sweep watches Fireflies' live meetings and posts one confirmation to #meetings — tagged (bot-free auto) or (forced via #meetings). This is your "is REC running?" proof. NoWithin ~3 min of any recording going live.
#meetings force-start
fallback
Paste a Meet link in #meetings → the Fireflies bot is dispatched to that live call. Use it only when no "🔴 Recording in progress" message arrived. Yes — you admit "Fireflies.ai Notetaker"On demand, when bot-free missed it.
bot_joined ping
new
When Fred joins, Fireflies fires a webhook → instant "🔴 Fred joined — recording in progress" in Slack. n/aThe instant the bot is admitted (optional webhook).

Your 10/10 loop

Call startsSales call begins (Meet)
Within ~3 minSlack #meetings: "🔴 Recording in progress (bot-free auto)"?
If yes ✅Do nothing — it's recording silently.
If NO messagebot-free missed it (early / last-minute)
Paste the Meet linkinto #meetings
Admit Fred"Fireflies.ai Notetaker" knocks → Admit
Confirmed ✅Slack: "🔴 Recording confirmed live"
The one human step that makes it 10/10: when the bot is summoned, it lands in the Meet waiting room and cannot record until you admit it. If you ever post a link and don't get a "confirmed live" reply, it's almost always Fred waiting to be let in — admit him. The system will nudge you with a "⚠️ if a Notetaker is knocking, admit it" message if it can't confirm within ~3 minutes.

Activate it — one-time, ~5 minutes

The code is live in production (build 4b42b63+v108). Two small config steps in Slack switch it on. The endpoint already answers Slack's verification handshake (tested ✅).

Slack app (required)

  1. Turn on Event Subscriptions. Open api.slack.com/apps → your ClientsFlow app → Event Subscriptions → toggle On → set the Request URL to
    https://matyas--clientsflow-pipeline-web.modal.run/slack/events
    Slack will show “Verified ✓” immediately (the handshake is already handled).
  2. Subscribe to one bot event. Same page → Subscribe to bot events → add message.channelsSave Changes.
  3. Confirm scopes & reinstall if prompted. OAuth & Permissions → Bot Token Scopes include chat:write, channels:history, channels:read. If Slack asks, click Reinstall.
  4. Create + invite the bot to #meetings. Make a public channel named #meetings (or your choice), then in it type /invite @ClientsFlow (your bot's name). Posting a Meet link there now triggers the recorder. (If you use a different channel name, tell me and I'll set MEETINGS_CHANNEL.)

Fireflies (optional — faster confirmation)

  1. Add a "bot joined" webhook. app.fireflies.ai/integrations → Webhooks (V2) → add a subscription for meeting.bot_joined pointing at https://matyas--clientsflow-pipeline-web.modal.run/fireflies/transcription. This makes the "🔴 Fred joined" Slack ping instant instead of waiting for the 3-min sweep. Skip-able — the sweep already covers it.
Test it after activation: post any live meet.google.com/… link into #meetings. You should see "⏳ Force-starting Fireflies bot (fallback)…", then admit Fred, then "🔴 Recording confirmed live". For the default path, just start a calendar-scheduled Meet and watch for the "(bot-free auto)" confirmation within ~3 min.