From assemblyai-pack
Executes AssemblyAI production deployment checklist for transcription services, verifying API setup, error handling, performance, and providing TypeScript health checks.
npx claudepluginhub jeremylongshore/claude-code-plugins-plus-skills --plugin assemblyai-packThis skill is limited to using the following tools:
Complete checklist for deploying AssemblyAI-powered transcription services to production with health checks, monitoring, and rollback procedures.
Deploys AssemblyAI transcription services to Vercel, Cloud Run, and Fly.io with secrets management and webhook setup for production.
Executes Deepgram production checklist verifying auth, resilience, performance, monitoring, and security for integrations. Includes TypeScript singleton client and Express health check examples.
Executes Fireflies.ai production checklist for integrations: API keys, webhooks with signature verification, GraphQL health checks, monitoring, rollback.
Share bugs, ideas, or general feedback.
Complete checklist for deploying AssemblyAI-powered transcription services to production with health checks, monitoring, and rollback procedures.
transcript.status === 'error' cases handledtranscript.status === 'error' logged with transcript ID and error messagewebhook_url instead of pollingimport { AssemblyAI } from 'assemblyai';
const client = new AssemblyAI({
apiKey: process.env.ASSEMBLYAI_API_KEY!,
});
export async function healthCheck(): Promise<{
status: 'healthy' | 'degraded' | 'down';
assemblyai: { connected: boolean; latencyMs: number };
}> {
const start = Date.now();
try {
// List transcripts as a lightweight connectivity check
await client.transcripts.list({ limit: 1 });
return {
status: 'healthy',
assemblyai: { connected: true, latencyMs: Date.now() - start },
};
} catch (error) {
return {
status: 'degraded',
assemblyai: { connected: false, latencyMs: Date.now() - start },
};
}
}
// Instead of polling, use webhooks for transcription completion
const transcript = await client.transcripts.submit({
audio: audioUrl,
webhook_url: 'https://your-app.com/webhooks/assemblyai',
webhook_auth_header_name: 'X-Webhook-Secret',
webhook_auth_header_value: process.env.ASSEMBLYAI_WEBHOOK_SECRET!,
speaker_labels: true,
sentiment_analysis: true,
});
console.log('Submitted:', transcript.id, '(webhook will fire on completion)');
// Webhook handler
import express from 'express';
app.post('/webhooks/assemblyai', express.json(), async (req, res) => {
// Verify auth header
const secret = req.headers['x-webhook-secret'];
if (secret !== process.env.ASSEMBLYAI_WEBHOOK_SECRET) {
return res.status(401).json({ error: 'Unauthorized' });
}
const { transcript_id, status } = req.body;
if (status === 'completed') {
// Fetch full transcript
const transcript = await client.transcripts.get(transcript_id);
await processCompletedTranscript(transcript);
} else if (status === 'error') {
console.error(`Transcript ${transcript_id} failed:`, req.body.error);
await handleFailedTranscript(transcript_id, req.body.error);
}
res.status(200).json({ received: true });
});
| Alert | Condition | Severity |
|---|---|---|
| API unreachable | Health check fails 3x consecutive | P1 |
| High error rate | >5% of transcriptions fail | P2 |
| Rate limited | 429 errors > 5/min | P2 |
| Auth failure | Any 401 response | P1 |
| Slow transcription | Queue wait > 5 min | P3 |
| Webhook delivery failure | Webhook retries exhausted | P2 |
# 1. Pre-flight: verify AssemblyAI API is healthy
curl -s https://status.assemblyai.com/api/v2/status.json | jq '.status.description'
# 2. Deploy to canary (10% traffic)
# 3. Monitor error rate and latency for 10 minutes
# 4. If healthy, roll to 50%, then 100%
# 5. Keep previous version ready for instant rollback
| Issue | Detection | Response |
|---|---|---|
| API key invalid in prod | 401 on first call | Rotate key immediately |
| Transcription backlog | Queue size growing | Scale workers, check rate limits |
| Webhook endpoint down | Missed completion events | Poll for stuck transcripts |
| Audio upload timeout | Large file failures | Increase timeout, validate file size |
For version upgrades, see assemblyai-upgrade-migration.