Implement callback URL handling for asynchronous Deepgram transcription workflows. Covers callback server setup, signature verification, result processing, retry mechanisms, and client SDK for async operations.
callback URL parameterSet up an Express endpoint at /webhooks/deepgram using raw body parsing for signature verification.
Verify callbacks using HMAC-SHA256 with timing-safe comparison against x-deepgram-signature header.
Extract transcript, confidence, words, and metadata from the callback payload. Store in database and Redis.
Push results via WebSocket to connected clients and/or send email notifications.
Implement CallbackRetryHandler with exponential backoff (max 3 retries, 5s-60s delay).
| Issue | Cause | Resolution |
|---|---|---|
| Invalid signature | Wrong webhook secret | Verify DEEPGRAM_WEBHOOK_SECRET matches |
| Callback not received | Endpoint not reachable | Check HTTPS, firewall rules, use ngrok for local |
| Processing timeout | Slow downstream services | Increase timeout, add async processing queue |
| Duplicate callbacks | Network retry | Implement idempotency using request_id |
set -euo pipefail
# Expose local server
ngrok http 3000 # 3000: 3 seconds in ms
# Submit async transcription
curl -X POST 'https://api.deepgram.com/v1/listen?callback=https://your-ngrok.ngrok.io/webhooks/deepgram&model=nova-2' \
-H "Authorization: Token $DEEPGRAM_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://static.deepgram.com/examples/nasa-podcast.wav"}'
See detailed implementation for advanced patterns.