# recallai/meeting-bot architecture

> Architecture diagram of the GitHub repository recallai/meeting-bot, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/recallai/meeting-bot
- Repository: https://github.com/recallai/meeting-bot

## Overview

This is a small FastAPI meeting-bot sample: a client starts a Recall.ai bot, the service sends webhook and optional realtime media events to the app, and the client can later retrieve artifacts or submit a transcript for analysis. Analysis normalizes transcript segments into paragraphs, produces structured notes through a replaceable generation hook, and can optionally post a Slack digest. The README also describes helper capabilities for artifact links and media analysis. Evidence is limited to the supplied excerpts; notably, server.py imports a module name that does not match the listed source tree.

Main entry points: [`app/analyze.py`](https://github.com/recallai/meeting-bot/blob/main/app/analyze.py) (Analyze Endpoint), [`app/pythonHowToBuildABot.py`](https://github.com/recallai/meeting-bot/blob/main/app/pythonHowToBuildABot.py) (Bot API), [`server.py`](https://github.com/recallai/meeting-bot/blob/main/server.py) (Server Entrypoint), [`app/step4.py`](https://github.com/recallai/meeting-bot/blob/main/app/step4.py) (Transcript Loader)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_control["Bot API"]
  node_server["Server Entrypoint<br/>[server.py]"]
  node_bot_api["Bot API"]
end

subgraph group_realtime["Realtime Intake"]
  node_webhook["Webhook Events"]
  node_websocket["Realtime Streams"]
end

subgraph group_analysis["Transcript Analysis"]
  node_analyze_api["Analyze Endpoint<br/>[analyze.py]"]
  node_transcript_load["Transcript Loader<br/>[step4.py]"]
  node_transcript_shape["Segment And Paragraph<br/>[step4.py]"]
  node_notes["Summary And Actions<br/>[step4.py]"]
  node_llm_hook["Generation Hook<br/>[analyze.py]"]
end

subgraph group_artifacts["Artifact Helpers"]
  node_artifact_helpers["Artifact And Media Helpers<br/>[mediahelpers.py]"]
  node_step4_tools["Search And Media Tools<br/>[step4.py]"]
end

node_client(("API Client"))
node_recall["Recall.ai"]
node_meeting["Meeting Platform"]
node_transcript_url["Transcript Artifact"]
node_slack["Slack Webhook"]

node_client -->|"sends requests"| node_server
node_server -->|"mounts router"| node_analyze_api
node_client -->|"starts or retrieves"| node_bot_api
node_bot_api -->|"creates bot"| node_recall
node_recall -->|"joins meeting"| node_meeting
node_recall -->|"posts events"| node_webhook
node_recall -->|"streams media"| node_websocket
node_client -->|"submits transcript URL"| node_analyze_api
node_analyze_api -->|"loads transcript"| node_transcript_load
node_transcript_load -->|"fetches JSON"| node_transcript_url
node_analyze_api -->|"normalizes transcript"| node_transcript_shape
node_analyze_api -->|"builds notes"| node_notes
node_notes -->|"requests generation"| node_llm_hook
node_analyze_api -.->|"posts optional digest"| node_slack
node_client -->|"requests artifacts"| node_bot_api
node_bot_api -->|"fetches bot data"| node_recall
node_artifact_helpers -->|"fetches audio URL"| node_recall

click node_server "https://github.com/recallai/meeting-bot/blob/main/server.py"
click node_bot_api "https://github.com/recallai/meeting-bot/blob/main/app/pythonHowToBuildABot.py"
click node_webhook "https://github.com/recallai/meeting-bot/blob/main/app/pythonHowToBuildABot.py"
click node_websocket "https://github.com/recallai/meeting-bot/blob/main/app/pythonHowToBuildABot.py"
click node_analyze_api "https://github.com/recallai/meeting-bot/blob/main/app/analyze.py"
click node_transcript_load "https://github.com/recallai/meeting-bot/blob/main/app/step4.py"
click node_transcript_shape "https://github.com/recallai/meeting-bot/blob/main/app/step4.py"
click node_notes "https://github.com/recallai/meeting-bot/blob/main/app/step4.py"
click node_llm_hook "https://github.com/recallai/meeting-bot/blob/main/app/analyze.py"
click node_artifact_helpers "https://github.com/recallai/meeting-bot/blob/main/app/mediahelpers.py"
click node_step4_tools "https://github.com/recallai/meeting-bot/blob/main/app/step4.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_server,node_bot_api,node_client toneBlue
class node_webhook,node_websocket toneAmber
class node_analyze_api,node_transcript_load,node_transcript_shape,node_notes,node_llm_hook,node_slack toneMint
class node_artifact_helpers,node_step4_tools toneRose
class node_recall,node_meeting,node_transcript_url toneIndigo
```

## Components

### Bot API

- [Server Entrypoint](https://github.com/recallai/meeting-bot/blob/main/server.py): `server.py`
- [Bot API](https://github.com/recallai/meeting-bot/blob/main/app/pythonHowToBuildABot.py): `app/pythonHowToBuildABot.py`

### Realtime Intake

- [Webhook Events](https://github.com/recallai/meeting-bot/blob/main/app/pythonHowToBuildABot.py): `app/pythonHowToBuildABot.py`
- [Realtime Streams](https://github.com/recallai/meeting-bot/blob/main/app/pythonHowToBuildABot.py): `app/pythonHowToBuildABot.py`

### Transcript Analysis

- [Analyze Endpoint](https://github.com/recallai/meeting-bot/blob/main/app/analyze.py): `app/analyze.py`
- [Transcript Loader](https://github.com/recallai/meeting-bot/blob/main/app/step4.py): `app/step4.py`
- [Segment And Paragraph](https://github.com/recallai/meeting-bot/blob/main/app/step4.py): `app/step4.py`
- [Summary And Actions](https://github.com/recallai/meeting-bot/blob/main/app/step4.py): `app/step4.py`
- [Generation Hook](https://github.com/recallai/meeting-bot/blob/main/app/analyze.py): `app/analyze.py`

### Artifact Helpers

- [Artifact And Media Helpers](https://github.com/recallai/meeting-bot/blob/main/app/mediahelpers.py): `app/mediahelpers.py`
- [Search And Media Tools](https://github.com/recallai/meeting-bot/blob/main/app/step4.py): `app/step4.py`

### Other components

- **API Client**
- **Recall.ai**
- **Meeting Platform**
- **Transcript Artifact**
- **Slack Webhook**

## Connections

- API Client → Server Entrypoint: sends requests
- Server Entrypoint → Analyze Endpoint: mounts router
- API Client → Bot API: starts or retrieves
- Bot API → Recall.ai: creates bot
- Recall.ai → Meeting Platform: joins meeting
- Recall.ai → Webhook Events: posts events
- Recall.ai → Realtime Streams: streams media
- API Client → Analyze Endpoint: submits transcript URL
- Analyze Endpoint → Transcript Loader: loads transcript
- Transcript Loader → Transcript Artifact: fetches JSON
- Analyze Endpoint → Segment And Paragraph: normalizes transcript
- Analyze Endpoint → Summary And Actions: builds notes
- Summary And Actions → Generation Hook: requests generation
- Analyze Endpoint → Slack Webhook: posts optional digest
- API Client → Bot API: requests artifacts
- Bot API → Recall.ai: fetches bot data
- Artifact And Media Helpers → Recall.ai: fetches audio URL
