MeetStream Guide: Live Transcription (Streaming) via Webhook
This guide explains how to enable live (real‑time) transcription for a MeetStream bot using:
deepgram_streamingassemblyai_streaming
You will receive streaming transcription updates on your webhook URL while the bot is in the meeting.
1) What you need
To use live transcription you must provide:
- A webhook endpoint that can receive POST requests (public URL).
live_transcription_required.webhook_urlin your create bot payload.- A streaming provider config under
recording_config.transcript.provider.
Tip: For local testing, use ngrok or cloudflared to expose your local webhook to the internet.
2) Add live_transcription_required to your bot payload
In your Create Bot / Create Agent request body:
This is the endpoint where MeetStream will POST live transcription events.
3) Choose a streaming provider (payload examples)
A) AssemblyAI Streaming (assemblyai_streaming)
B) Deepgram Streaming (deepgram_streaming)
Use exactly one provider in
recording_config.transcript.provider.
4) What your webhook will receive (example payload)
MeetStream will POST live transcription updates to:
{{webhook_url}}/webhook
Example payload:
Field notes (practical)
bot_id— use this to map to your session/meeting.speakerName/speaker— speaker label (if available).new_text— incremental update (useful for streaming UI).transcript— current transcript buffer (can be partial).words[]— word-level timings + confidence.word_is_final— iffalse, treat as interim (may change).end_of_turn— can be used to “commit” a phrase/segment.custom_attributes— echoed from your Create Bot payload (useful for correlation).
5) Recommended implementation pattern
A) Always ACK fast
Your webhook should respond 2xx quickly (e.g., 200 OK) to avoid timeouts.
B) Store and stream
Common approaches:
- Live UI captions: append
new_textwhenword_is_final=true, or only commit whenend_of_turn=true. - Analytics / downstream triggers: run actions when
end_of_turn=true(less noisy). - Persist to DB: store word chunks with timestamps, or store turn-level segments.
C) De-dup / idempotency
Webhooks can occasionally arrive close together. Consider de-duping with:
{bot_id, timestamp, new_text}or- a rolling hash of the payload body.
6) Troubleshooting
-
No live transcription arriving?
- Confirm
live_transcription_required.webhook_urlis reachable publicly (trycurl). - Ensure your webhook endpoint path is correct (
/webhook). - Confirm your webhook server accepts POST and returns 2xx.
- Confirm
-
Getting payloads but UI looks “jumpy”?
- Treat
word_is_final=falseas interim. - Only commit text when
end_of_turn=trueorword_is_final=true.
- Treat
If you tell me your stack (Node / Bun / Python), I’ll add a copy‑paste webhook handler that:
- validates requests,
- logs payloads safely,
- and streams updates to your frontend via WebSocket/SSE.
