AssemblyAI Debug Bundle
Overview
Collect all diagnostic information needed to resolve AssemblyAI issues — SDK version, transcript status, API connectivity, and configuration — packaged for support tickets.
Prerequisites
assemblyai package installed
- Access to application logs
- Failed transcript ID (if applicable)
Instructions
Step 1: Create Debug Bundle Script
#!/bin/bash
# assemblyai-debug-bundle.sh
set -euo pipefail
BUNDLE_DIR="assemblyai-debug-$(date +%Y%m%d-%H%M%S)"
mkdir -p "$BUNDLE_DIR"
echo "=== AssemblyAI Debug Bundle ===" > "$BUNDLE_DIR/summary.txt"
echo "Generated: $(date -u +%Y-%m-%dT%H:%M:%SZ)" >> "$BUNDLE_DIR/summary.txt"
echo "" >> "$BUNDLE_DIR/summary.txt"
# Environment
echo "--- Runtime ---" >> "$BUNDLE_DIR/summary.txt"
node --version >> "$BUNDLE_DIR/summary.txt" 2>&1 || echo "Node.js not found" >> "$BUNDLE_DIR/summary.txt"
echo "Platform: $(uname -s) $(uname -m)" >> "$BUNDLE_DIR/summary.txt"
echo "ASSEMBLYAI_API_KEY: ${ASSEMBLYAI_API_KEY:+[SET (${#ASSEMBLYAI_API_KEY} chars)]}" >> "$BUNDLE_DIR/summary.txt"
echo "" >> "$BUNDLE_DIR/summary.txt"
# SDK version
echo "--- SDK Version ---" >> "$BUNDLE_DIR/summary.txt"
npm list assemblyai 2>/dev/null >> "$BUNDLE_DIR/summary.txt" || echo "assemblyai not in node_modules" >> "$BUNDLE_DIR/summary.txt"
echo "" >> "$BUNDLE_DIR/summary.txt"
# API connectivity
echo "--- API Connectivity ---" >> "$BUNDLE_DIR/summary.txt"
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" \
-H "Authorization: ${ASSEMBLYAI_API_KEY:-none}" \
https://api.assemblyai.com/v2/transcript 2>/dev/null || echo "FAILED")
echo "GET /v2/transcript: HTTP $HTTP_CODE" >> "$BUNDLE_DIR/summary.txt"
STATUS_CODE=$(curl -s -o /dev/null -w "%{http_code}" \
https://api.assemblyai.com/v2 2>/dev/null || echo "FAILED")
echo "GET /v2: HTTP $STATUS_CODE" >> "$BUNDLE_DIR/summary.txt"
echo "" >> "$BUNDLE_DIR/summary.txt"
# AssemblyAI service status
echo "--- Service Status ---" >> "$BUNDLE_DIR/summary.txt"
curl -s https://status.assemblyai.com/api/v2/status.json 2>/dev/null \
| python3 -m json.tool 2>/dev/null >> "$BUNDLE_DIR/summary.txt" \
|| echo "Could not fetch status" >> "$BUNDLE_DIR/summary.txt"
# Package bundle
tar -czf "$BUNDLE_DIR.tar.gz" "$BUNDLE_DIR"
rm -rf "$BUNDLE_DIR"
echo ""
echo "Bundle created: $BUNDLE_DIR.tar.gz"
echo "Review for sensitive data before sharing with support."
Step 2: Programmatic Transcript Diagnostics
import { AssemblyAI } from 'assemblyai';
const client = new AssemblyAI({
apiKey: process.env.ASSEMBLYAI_API_KEY!,
});
async function diagnoseTranscript(transcriptId: string) {
const transcript = await client.transcripts.get(transcriptId);
const report = {
id: transcript.id,
status: transcript.status,
error: transcript.error ?? null,
audio_url: transcript.audio_url,
audio_duration: transcript.audio_duration,
language_code: transcript.language_code,
speech_model: transcript.speech_model,
created: transcript.created,
completed: transcript.completed,
// Feature flags that were enabled
features: {
speaker_labels: !!transcript.utterances?.length,
sentiment_analysis: !!transcript.sentiment_analysis_results?.length,
entity_detection: !!transcript.entities?.length,
auto_highlights: !!transcript.auto_highlights_result?.results?.length,
content_safety: !!transcript.content_safety_labels?.results?.length,
redact_pii: transcript.text?.includes('####') || transcript.text?.includes('['),
summarization: !!transcript.summary,
},
// Word count / duration sanity check
word_count: transcript.words?.length ?? 0,
words_per_minute: transcript.audio_duration
? ((transcript.words?.length ?? 0) / (transcript.audio_duration / 60)).toFixed(1)
: 'N/A',
};
console.log(JSON.stringify(report, null, 2));
return report;
}
// Usage: diagnoseTranscript('your-transcript-id');
Step 3: Check Recent Failed Transcripts
async function findFailedTranscripts(limit = 50) {
const page = await client.transcripts.list({ limit });
const failed = page.transcripts.filter(t => t.status === 'error');
console.log(`Found ${failed.length} failed transcripts out of ${page.transcripts.length}:`);
for (const t of failed) {
console.log(` ${t.id} | ${t.created} | ${t.error}`);
}
return failed;
}
What to Include in a Support Ticket
Always include:
- Transcript ID (e.g.,
6wij2z3g66-...)
- Error message (exact text)
- SDK version (
npm list assemblyai)
- Node.js version
- Timestamp of the failure (UTC)
Never include:
- Your API key
- Raw audio containing PII
- Customer data
Helpful extras:
- Audio file format and duration
- Which features were enabled (speaker_labels, etc.)
- Whether the issue is intermittent or consistent
Output
assemblyai-debug-YYYYMMDD-HHMMSS.tar.gz archive with:
summary.txt — Runtime, SDK version, API connectivity, service status
- Programmatic transcript diagnosis report
- List of recently failed transcripts
Error Handling
| Item |
Purpose |
Check |
| SDK version |
Version-specific bugs |
npm list assemblyai |
| API connectivity |
Network/firewall |
curl api.assemblyai.com |
| Service status |
Outage check |
status.assemblyai.com |
| Transcript status |
Job-specific error |
client.transcripts.get(id) |
| Audio URL |
Accessibility |
curl -I <audio_url> |
Resources
Next Steps
For rate limit issues, see assemblyai-rate-limits.
1---2name: assemblyai-debug-bundle3description: |4 Collect AssemblyAI debug evidence for support tickets and troubleshooting.5 Use when encountering persistent issues, preparing support tickets,6 or collecting diagnostic information for AssemblyAI problems.7 Trigger with phrases like "assemblyai debug", "assemblyai support bundle",8 "collect assemblyai logs", "assemblyai diagnostic".9allowed-tools: Read, Bash(grep:*), Bash(curl:*), Bash(tar:*), Grep10version: 1.0.011license: MIT12author: Jeremy Longshore <jeremy@intentsolutions.io>13tags: [saas, ai, speech-to-text, assemblyai, transcription]14compatible-with: claude-code15---1617# AssemblyAI Debug Bundle1819## Overview20Collect all diagnostic information needed to resolve AssemblyAI issues — SDK version, transcript status, API connectivity, and configuration — packaged for support tickets.2122## Prerequisites23- `assemblyai` package installed24- Access to application logs25- Failed transcript ID (if applicable)2627## Instructions2829### Step 1: Create Debug Bundle Script3031```bash32#!/bin/bash33# assemblyai-debug-bundle.sh34set -euo pipefail3536BUNDLE_DIR="assemblyai-debug-$(date +%Y%m%d-%H%M%S)"37mkdir -p "$BUNDLE_DIR"3839echo "=== AssemblyAI Debug Bundle ===" > "$BUNDLE_DIR/summary.txt"40echo "Generated: $(date -u +%Y-%m-%dT%H:%M:%SZ)" >> "$BUNDLE_DIR/summary.txt"41echo "" >> "$BUNDLE_DIR/summary.txt"4243# Environment44echo "--- Runtime ---" >> "$BUNDLE_DIR/summary.txt"45node --version >> "$BUNDLE_DIR/summary.txt" 2>&1 || echo "Node.js not found" >> "$BUNDLE_DIR/summary.txt"46echo "Platform: $(uname -s) $(uname -m)" >> "$BUNDLE_DIR/summary.txt"47echo "ASSEMBLYAI_API_KEY: ${ASSEMBLYAI_API_KEY:+[SET (${#ASSEMBLYAI_API_KEY} chars)]}" >> "$BUNDLE_DIR/summary.txt"48echo "" >> "$BUNDLE_DIR/summary.txt"4950# SDK version51echo "--- SDK Version ---" >> "$BUNDLE_DIR/summary.txt"52npm list assemblyai 2>/dev/null >> "$BUNDLE_DIR/summary.txt" || echo "assemblyai not in node_modules" >> "$BUNDLE_DIR/summary.txt"53echo "" >> "$BUNDLE_DIR/summary.txt"5455# API connectivity56echo "--- API Connectivity ---" >> "$BUNDLE_DIR/summary.txt"57HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" \58 -H "Authorization: ${ASSEMBLYAI_API_KEY:-none}" \59 https://api.assemblyai.com/v2/transcript 2>/dev/null || echo "FAILED")60echo "GET /v2/transcript: HTTP $HTTP_CODE" >> "$BUNDLE_DIR/summary.txt"6162STATUS_CODE=$(curl -s -o /dev/null -w "%{http_code}" \63 https://api.assemblyai.com/v2 2>/dev/null || echo "FAILED")64echo "GET /v2: HTTP $STATUS_CODE" >> "$BUNDLE_DIR/summary.txt"65echo "" >> "$BUNDLE_DIR/summary.txt"6667# AssemblyAI service status68echo "--- Service Status ---" >> "$BUNDLE_DIR/summary.txt"69curl -s https://status.assemblyai.com/api/v2/status.json 2>/dev/null \70 | python3 -m json.tool 2>/dev/null >> "$BUNDLE_DIR/summary.txt" \71 || echo "Could not fetch status" >> "$BUNDLE_DIR/summary.txt"7273# Package bundle74tar -czf "$BUNDLE_DIR.tar.gz" "$BUNDLE_DIR"75rm -rf "$BUNDLE_DIR"76echo ""77echo "Bundle created: $BUNDLE_DIR.tar.gz"78echo "Review for sensitive data before sharing with support."79```8081### Step 2: Programmatic Transcript Diagnostics8283```typescript84import { AssemblyAI } from 'assemblyai';8586const client = new AssemblyAI({87 apiKey: process.env.ASSEMBLYAI_API_KEY!,88});8990async function diagnoseTranscript(transcriptId: string) {91 const transcript = await client.transcripts.get(transcriptId);9293 const report = {94 id: transcript.id,95 status: transcript.status,96 error: transcript.error ?? null,97 audio_url: transcript.audio_url,98 audio_duration: transcript.audio_duration,99 language_code: transcript.language_code,100 speech_model: transcript.speech_model,101 created: transcript.created,102 completed: transcript.completed,103104 // Feature flags that were enabled105 features: {106 speaker_labels: !!transcript.utterances?.length,107 sentiment_analysis: !!transcript.sentiment_analysis_results?.length,108 entity_detection: !!transcript.entities?.length,109 auto_highlights: !!transcript.auto_highlights_result?.results?.length,110 content_safety: !!transcript.content_safety_labels?.results?.length,111 redact_pii: transcript.text?.includes('####') || transcript.text?.includes('['),112 summarization: !!transcript.summary,113 },114115 // Word count / duration sanity check116 word_count: transcript.words?.length ?? 0,117 words_per_minute: transcript.audio_duration118 ? ((transcript.words?.length ?? 0) / (transcript.audio_duration / 60)).toFixed(1)119 : 'N/A',120 };121122 console.log(JSON.stringify(report, null, 2));123 return report;124}125126// Usage: diagnoseTranscript('your-transcript-id');127```128129### Step 3: Check Recent Failed Transcripts130131```typescript132async function findFailedTranscripts(limit = 50) {133 const page = await client.transcripts.list({ limit });134 const failed = page.transcripts.filter(t => t.status === 'error');135136 console.log(`Found ${failed.length} failed transcripts out of ${page.transcripts.length}:`);137 for (const t of failed) {138 console.log(` ${t.id} | ${t.created} | ${t.error}`);139 }140141 return failed;142}143```144145## What to Include in a Support Ticket146147**Always include:**148- Transcript ID (e.g., `6wij2z3g66-...`)149- Error message (exact text)150- SDK version (`npm list assemblyai`)151- Node.js version152- Timestamp of the failure (UTC)153154**Never include:**155- Your API key156- Raw audio containing PII157- Customer data158159**Helpful extras:**160- Audio file format and duration161- Which features were enabled (speaker_labels, etc.)162- Whether the issue is intermittent or consistent163164## Output165- `assemblyai-debug-YYYYMMDD-HHMMSS.tar.gz` archive with:166 - `summary.txt` — Runtime, SDK version, API connectivity, service status167- Programmatic transcript diagnosis report168- List of recently failed transcripts169170## Error Handling171| Item | Purpose | Check |172|------|---------|-------|173| SDK version | Version-specific bugs | `npm list assemblyai` |174| API connectivity | Network/firewall | `curl api.assemblyai.com` |175| Service status | Outage check | status.assemblyai.com |176| Transcript status | Job-specific error | `client.transcripts.get(id)` |177| Audio URL | Accessibility | `curl -I <audio_url>` |178179## Resources180- [AssemblyAI Support](https://support.assemblyai.com)181- [AssemblyAI Status Page](https://status.assemblyai.com)182- [AssemblyAI Community Discord](https://www.assemblyai.com/discord)183184## Next Steps185For rate limit issues, see `assemblyai-rate-limits`.186