Skip to content
Bot Engine

Meeting infrastructure

A bot joins the meeting. Your application gets everything that happened.

Bot Engine sends an automated participant into Zoom, Microsoft Teams and Google Meet, captures the audio, transcribes it, and reports every step of the lifecycle back to you over a versioned API and signed webhooks. You build the product; the part that has to survive a meeting is ours.

Already set up? Sign in to your dashboard.

Schedule a bot
curl -X POST https://api.botengine.dev/v1/bots \
  -H "Authorization: Bearer $BOT_ENGINE_KEY" \
  -d '{
    "meeting_url": "https://zoom.us/j/123456789",
    "display_name": "Acme Notetaker",
    "transcription": true
  }'

# → { "id": "bot_7f3a…", "status": "scheduled" }
Receive the result
POST /your/webhook            X-BotEngine-Signature: v1=…

{
  "type": "recording.ready",
  "sequence": 4,
  "data": {
    "bot_id": "bot_7f3a…",
    "duration_seconds": 2714
  }
}

The problem

Joining a meeting reliably is a full-time engineering project

Every provider ships UI changes on their own schedule, and each one breaks a headless browser in a way that looks identical to a network error. Building this once is a sprint; keeping it working is a team.

The pages keep moving

A join button moves, a consent dialog is added, a lobby appears. Bot Engine tracks per-provider join success as its headline metric, so drift is visible as a falling number rather than as a support ticket.

Meetings fail in specific ways

Nobody admits the bot. The host removes it. The meeting had already ended. Each is a distinct, documented failure code — not a generic timeout you have to guess at.

Media is the easy part to lose

Audio is captured in short segments and assembled server-side, so a process that dies at minute fifty does not take the first forty-nine with it.

How it works

Three calls, and the rest is reported to you

  1. 01

    Create a bot

    One POST with a meeting link. Schedule it for later or send it in now.

  2. 02

    It joins and records

    The bot appears as a named participant, captures audio, and tracks who came and went.

  3. 03

    You get the artefacts

    Recording and transcript, plus a signed webhook at every lifecycle change.

Built for developers

An API you can reason about at 3am

The details that decide whether an integration is pleasant or painful, decided in your favour.

  • Keyset pagination, so a list being written to never skips or repeats a row
  • Every error carries a request id you can quote — no guessing which log line was yours
  • Per-bot monotonic sequence numbers, so out-of-order webhook deliveries are trivially discarded
  • Signed webhooks with dual-secret rotation: the old secret keeps verifying until you switch over
  • Replay any event after your endpoint comes back up
  • A mock server you can run in your own CI instead of booking a real meeting

What a lifecycle looks like

  • bot.scheduledqueued for a meeting at 14:00
  • bot.status_changedjoining
  • bot.status_changedrecording
  • recording.ready45m 14s of audio, assembled
  • transcript.ready412 segments, speaker-labelled

Operate it

A control plane, not just an API

Every bot, recording, transcript and webhook delivery is visible to your team without anyone opening a terminal.

Live status

Watch bots join and record as it happens, over a resumable event stream.

Delivery log

Every webhook attempt with the response your server actually returned.

Roles and audit

Four roles, and a log of every change your team makes with secrets redacted before they are written.

Retention controls

Set how long media is kept. Deletion runs in two phases with a recovery window.

Put your product in the meeting without putting a browser team on it