How Meeting Bots Work

Meeting bots in Agency Hero automatically join your client calls, record conversations, and extract structured intelligence — decisions, action items, risks, and more. This guide explains the full lifecycle: how bots are triggered, how they join and record, what gets captured, how recordings and transcripts are processed, and what happens when things go wrong.

How Meeting Bots Work

Meeting bots are automated recording participants that Agency Hero dispatches to your video calls. They join silently, capture audio and video, and feed that raw conversation into an AI processing pipeline that produces transcripts, summaries, and structured intelligence items — all linked to your workspace.

This article explains how every step works: from the moment a meeting is created to the moment intelligence is available in your workspace.

How a Bot Gets Dispatched

Agency Hero uses a purpose-built bot infrastructure to manage meeting recordings. When a meeting is scheduled, the system creates a bot reservation and dispatches a bot to the call at the right time. You don’t need to do anything manually — the bot is coordinated automatically.

Meeting Sources That Trigger a Bot

Bots are dispatched when a meeting enters the system through any of these sources:

SourceHow it works
**Zoom webhook**Zoom notifies Agency Hero when a meeting is created, started, updated, or deleted. The system processes these events in real time.
**Google Calendar sync**Your connected Google Calendar is synced periodically. New events with video conference links trigger the bot workflow.
**Manual creation**You can create a meeting record directly in Agency Hero. The bot workflow starts immediately.
**Manual transcript upload**You paste or upload a transcript directly — no bot is needed. The system skips bot scheduling and goes straight to AI processing.

For Zoom and Google Calendar, Agency Hero listens for incoming webhooks or syncs calendar data and then starts the MeetingLifecycleWorkflow — a durable background process (run on Temporal Cloud) that manages everything from bot scheduling through transcript delivery.

The Bot Scheduling Decision

Once a meeting is in the system, the lifecycle workflow decides when to send the bot:

  • More than 10 minutes before start — The bot is created with a join_at time set to 1 minute before the scheduled start. It waits and joins automatically.
  • Within 10 minutes of start — The bot is created with join_now and joins the meeting immediately.
  • Meeting already started (within 30-minute grace period) — The bot joins immediately, capturing whatever portion of the call remains.
  • Meeting started more than 30 minutes ago — The meeting is marked missed_recording and no bot is sent.
  • Meeting never starts (45-minute grace period) — If the meeting doesn’t get a start signal within 45 minutes of its scheduled time, it’s marked no_show.

Handling Early Starts

If a host starts the meeting earlier than scheduled, Zoom sends a meeting.started webhook. Agency Hero handles this in real time:

  • If the bot’s scheduled join time is more than 10 minutes away, Agency Hero patches the bot’s join_at to the current time.
  • If the join time is within 10 minutes, the existing bot is cancelled and a new one is dispatched immediately.
  • If multiple workspaces share the same meeting link (e.g. agency + client both use Agency Hero), cross-org signaling ensures all of their bots respond to the early start at once.

Handling Meeting Updates and Cancellations

  • Time change ≥ 5 minutes — The bot is rescheduled. If it was already close to joining, it’s cancelled and a new one is created.
  • URL change — The bot must be cancelled and re-created (the bot system doesn’t support patching the meeting URL after creation).
  • Meeting deleted — The bot is immediately cancelled and the workflow is closed gracefully.

What the Bot Captures

Once the bot joins the call, it acts as a silent participant. It captures:

  • Audio — Full conversation audio from all participants
  • Video — The meeting video feed (multi-participant layout)
  • Speaker diarization — Which participant is speaking at each moment
  • Participant tracking — Who attended the meeting
  • Real-time transcript chunks — The bot begins streaming transcript data during the meeting, enabling real-time processing before the call even ends

The bot appears as a named participant in the video call. Meeting participants can see it is present. It does not speak or interact in the call.

Note: Transcription is processed by Agency Hero’s recording service, producing timestamped, speaker-attributed transcript segments.

Deduplication: One Bot Per Meeting

Multiple bots joining the same call (from retries, duplicate webhooks, or concurrent sources) would be disruptive and wasteful. Agency Hero prevents this with a multi-layer deduplication system:

  1. reserve-before-create — Before dispatching a bot, the system inserts a reservation row into the database. If two requests race, only one succeeds; the other finds the reservation already exists and backs off.
  2. URL-based deduplication — Meetings are hashed by their normalized video conference URL. Two meetings with the same link in the same time window are treated as the same meeting.
  3. V3 deduplication key — Uses nearest-hour rounding so meetings at 2:58 PM and 3:02 PM from different sources are correctly identified as the same event.

The result: no matter how many sources create or update a meeting, exactly one bot joins.

During the Meeting: Real-Time Processing

Agency Hero doesn’t wait for the meeting to end. While the bot is recording, the bot infrastructure streams transcript chunks as they’re generated. These feed into the PostMeetingSummaryWorkflow in real time — so by the time the meeting ends, processing is already underway.

The workflow listens for:

  • transcript_chunk — An incremental segment of the transcript with speaker labels and timestamps
  • meeting_ended — The signal that triggers final processing
  • item_confirmed — A user has confirmed a proposed intelligence item (task, decision, risk, or question)

After the Meeting: Transcript and Recording Delivery

When the meeting ends, the recording service delivers two key payloads:

1. transcript.done

The full, speaker-attributed transcript is delivered. Agency Hero:

  • Stores the transcript linked to the meeting record
  • Updates the meeting’s lifecycle_state to processing_transcript
  • Signals the PostMeetingSummaryWorkflow to complete final processing
  • Triggers the queue-post-meeting-summary edge function, which starts intelligence extraction

2. recording.done

The video recording is available. Agency Hero:

  • Stores a hosted video URL for immediate playback (free for 7 days)
  • Schedules an audio download workflow (runs within 24–48 hours) to save a compressed audio version as a long-term fallback
  • Schedules a video archival workflow to compress and archive the full video to Agency Hero’s own S3 storage before the 7-day free window expires
  • Schedules a cleanup workflow to remove the recording from the bot infrastructure at the 7-day mark (to avoid storage charges)

Recording Playback Over Time

TimeframeWhat You See
Days 0–7Full video via the recording service (fast, free)
Day 7+Archived video from Agency Hero's S3 storage
If video is cold/restoringAudio playback with a "Restoring video" message

Intelligence Extraction

Once the transcript is processed, Agency Hero’s AI extracts structured intelligence items:

Item TypeWhat it captures
**Action items**Commitments, deliverables, and next steps with owners
**Decisions**Client approvals, strategy choices, direction changes
**Risks**Concerns, blockers, or red flags raised during the call
**Questions**Open issues that need follow-up
**Insights**Notable signals about client sentiment, relationship health, or strategic context

Each extracted item includes:

  • The exact transcript excerpt it was drawn from
  • The speaker and timestamp
  • A confidence score
  • A status (proposedconfirmed or dismissed)

Items start in proposed state. Your team reviews them and confirms or dismisses each one before they become part of the permanent workspace record.

The Meeting Summary

Alongside individual items, an executive summary is generated: key takeaways, major decisions, critical action items, and overall meeting tone. This summary is permanently linked to the meeting and available for AI-assisted search and context retrieval.

Meeting Lifecycle States

Every meeting has a lifecycle_state that reflects where it is in the pipeline:

StateMeaning
`scheduled`Meeting is in the system; workflow is running and waiting for start time
`bot_scheduled`Bot has been reserved and is waiting to join
`recording`Bot is actively in the call and recording
`processing_transcript`Transcript received; AI extraction underway
`processing_summary`Summary generation in progress
`completed`All processing done; intelligence available
`missed_recording`Meeting occurred but bot couldn't join in time
`no_show`Meeting never started within the 45-minute grace window
`failed`Unrecoverable error occurred

Bot Retry and Failure Recovery

Bot failures happen — the host might not admit the bot from the waiting room, or the meeting platform might have a transient issue. Agency Hero handles this automatically:

  • Retryable failures — If the bot fails with a retryable error (e.g. timed out in waiting room, no one joined), Agency Hero cancels the failed bot and schedules a new one. Up to 3 retry attempts are made.
  • Terminal failures — Some failures cannot be retried (e.g. the host explicitly blocked the bot, recording permission denied). The meeting is marked missed_recording.
  • Stale bot detection — If a bot job is more than 6 hours old and still in a non-terminal state, the system treats it as expired and allows a fresh bot to be scheduled.

A background ReconciliationWorkflow runs periodically (approximately every 5 minutes) to catch any meetings that slipped through cracks — for example, meetings whose workflows never started, or bots that failed without properly signaling the main workflow.

Manual Transcript Upload

If a meeting wasn’t recorded by a bot — or if you have an external transcript from another tool — you can upload a transcript manually. This path:

  • Bypasses the bot lifecycle entirely
  • Creates a meeting record with source: manual_upload
  • Directly triggers AI processing (no bot scheduling, no waiting)
  • Produces the same intelligence extraction output as a bot-recorded meeting

You can upload to an existing meeting record or create a new meeting at the same time as uploading.

Where Intelligence Goes After Processing

Once a meeting is completed, its extracted intelligence is available across Agency Hero:

Workspace Intelligence Ledger — All items are stored in your workspace’s canonical record, searchable and filterable across all meetings.

Meeting Timeline — Every meeting becomes a node in the workspace history. You can jump to specific moments using transcript timestamps.

AI-Assisted Chat — When you ask the workspace AI a question (like “What did the client say about budget last quarter?”), it searches across meeting transcripts and intelligence items to give grounded answers with source citations.

Task Sync — Confirmed action items can be pushed to external project management tools (Linear, Asana, ClickUp) as tracked tasks with owners and deadlines.

Privacy, Access Control, and Security

  • Workspace isolation — Meeting data, transcripts, and intelligence items are scoped to the workspace. Only authorized workspace members can access them.
  • Bot announcement — When a bot joins a meeting, it appears as a named participant. Participants can see it is present in the call.
  • Recording consent — You are responsible for ensuring all meeting participants consent to being recorded in accordance with applicable laws and your organization’s policies.
  • Webhook validation — All incoming Zoom webhooks are verified using HMAC signature validation before processing.
  • Row-level security — The database layer enforces organization-scoped access on all meeting tables, preventing cross-organization data access.
  • Secure media storage — Audio and video files are served via authenticated edge functions with short-lived signed URLs. There are no publicly accessible recording URLs.

Troubleshooting Common Issues

Bot Didn’t Join the Meeting

  • Check that the meeting has a valid conference URL (Zoom/Google Meet link). Bots cannot join a meeting without a join URL.
  • If the meeting was created very recently and starts immediately, the system may still be in the scheduling phase. Check the meeting’s lifecycle_state.
  • The host may need to admit the bot from the waiting room if the meeting uses a waiting room.
  • If this is a recurring pattern, check whether your Zoom or Google Calendar integration is connected and healthy in workspace settings.

Meeting Shows no_show

  • The meeting was scheduled but never actually started (or the start signal wasn’t received within 45 minutes of the scheduled time).
  • This can happen if the meeting was cancelled last-minute without a cancellation webhook being sent, or if the Zoom integration was temporarily disconnected.

Meeting Shows missed_recording

  • The bot couldn’t join after all retry attempts, or the workflow started too late (more than 30 minutes after the meeting began).
  • If you have a recording from another source, you can use manual transcript upload to still get intelligence from the meeting.

No Intelligence Items After the Meeting

  • Intelligence extraction requires a completed transcript. Check whether lifecycle_state has reached completed.
  • Very short meetings or calls with minimal speech may produce few or no extractable items.
  • Items start in proposed state — check if they’re awaiting review in the meeting intelligence panel.

Related articles

More resources to help you go deeper.