Prompt
call recording transcription webhook
Latest observation
Oct 14, 2026
OpenAI APIWeb search: off
Here’s a simple, practical call recording transcription webhook pattern you can use.
What it does
When a call recording is ready, your telephony provider sends a webhook to your server. Your server then:
- receives the recording URL / ID,
- downloads the audio,
- sends it to a transcription service,
- stores or returns the transcript.
Example webhook flow
1) Provider sends webhook
Typical payload might look like:
{
"event": "call.recording.completed",
"call_id": "abc123",
"recording_id": "rec_789",
"recording_url": "https://provider.com/recordings/rec_789.mp3",
"duration": 245,
"created_at": "2026-10-14T12:34:56Z"
}
2) Example webhook endpoint
Node.js / Express
import express from "express";
import bodyParser from "body-parser";
const app = express();
app.use(bodyParser.json());
app.post("/webhooks/call-recording", async (req, res) => {
try {
const { event, recording_url, recording_id, call_id } = req.body;
if (event !== "call.recording.completed") {
return res.status(200).json({ ok: true, ignored: true });
}
// TODO: verify signature from provider
// TODO: download recording_url
// TODO: send audio to transcription API
// TODO: save transcript in DB
console.log("Processing recording:", { call_id, recording_id, recording_url });
res.status(200).json({ ok: true });
} catch (err) {
console.error(err);
res.status(500).json({ ok: false, error: "Internal error" });
}
});
app.listen(3000, () => console.log("Server listening on 3000"));
3) Python / FastAPI example
from fastapi import FastAPI, Request
app = FastAPI()
@app.post("/webhooks/call-recording")
async def call_recording_webhook(request: Request):
data = await request.json()
if data.get("event") != "call.recording.completed":
return {"ok": True, "ignored": True}
recording_url = data.get("recording_url")
recording_id = data.get("recording_id")
call_id = data.get("call_id")
# TODO: verify signature
# TODO: download recording
# TODO: transcribe audio
# TODO: save transcript
return {"ok": True}
Important production considerations
- Verify webhook signatures to prevent spoofing.
- Respond quickly (usually within a few seconds). Offload transcription to a background job queue.
- Make processing idempotent so duplicate webhook deliveries don’t create duplicate transcripts.
- Handle retries gracefully.
- Secure audio URLs if they require auth.
- Store raw event payloads for debugging/auditing.
If you want a transcription step
You can send the downloaded audio to services like:
- OpenAI Speech-to-Text
- Deepgram
- AssemblyAI
- AWS Transcribe
- Google Speech-to-Text
Example background job concept
- Webhook receives event
- Save job to queue (e.g. BullMQ, Celery, SQS)
- Worker downloads audio
- Worker transcribes it
- Worker saves transcript
- Optionally notify your app/customer
If you want, I can generate a ready-to-use webhook endpoint for a specific stack like:
- Node.js + Express
- Python + FastAPI
- PHP / Laravel
- Next.js
- AWS Lambda
- Twilio / Vonage / Plivo / Zoom Phone