Zoom Memo Automation エラーコード体系 - Transcript API統合版
| エラーコード | カテゴリ | 重要度 | 説明 | 対処法 | 実装箇所 |
|---|---|---|---|---|---|
| ZM-401 | Transcript | 高 | Transcript API認証失敗 | 1. OAuth権限確認 2. API設定確認 3. 音声処理フォールバック |
transcriptService.js |
| ZM-402 | Transcript | 高 | VTTファイル取得失敗 | 1. 3回リトライ 2. 録画設定確認 3. 音声処理フォールバック |
transcriptService.js |
| ZM-403 | Transcript | 中 | VTTフォーマット不正 | 1. パーサー切替 2. 手動修正試行 3. 音声処理フォールバック |
vttParser.js |
| TS-501 | Transcript | 高 | TranscriptService解析エラー | 1. 詳細ログ確認 2. VTT構造検証 3. 音声処理フォールバック |
transcriptService.js |
| TS-502 | Transcript | 低 | 話者識別失敗 | 1. デフォルト話者使用 2. タイムスタンプ基準処理 3. 警告ログ記録 |
transcriptService.js |
| エラーコード | カテゴリ | 重要度 | 説明 | 対処法 | 実装箇所 |
|---|---|---|---|---|---|
| ZM-001 | Zoom | クリティカル | Zoom API認証失敗 | 1. API認証情報確認 2. トークン再生成 3. OAuth再設定 |
zoomService.js:45 |
| ZM-002 | Zoom | 高 | 録画リスト取得失敗 | 1. API権限確認 2. リトライ実行 3. 手動確認 |
zoomService.js:120 |
| ZM-003 | Zoom | 高 | 録画ダウンロードURL取得失敗 | 1. 録画ステータス確認 2. 権限確認 3. リトライ |
zoomService.js:180 |
| ZM-004 | Zoom | 中 | 録画ファイルダウンロード失敗 | 1. ネットワーク確認 2. タイムアウト延長 3. 分割ダウンロード |
zoomService.js:250 |
| ZM-005 | Zoom | 低 | 録画メタデータ不完全 | 1. デフォルト値使用 2. 部分的処理継続 |
zoomService.js:300 |
| ZM-101 | Zoom | クリティカル | OAuth認証エラー | 1. Client ID/Secret確認 2. リダイレクトURI確認 3. アプリ再登録 |
zoomAuth.js:25 |
| ZM-102 | Zoom | 高 | アクセストークン期限切れ | 1. リフレッシュトークン使用 2. 再認証実行 |
zoomAuth.js:80 |
| ZM-103 | Zoom | 中 | API レート制限超過 | 1. リトライ待機 2. リクエスト間隔調整 |
zoomService.js:400 |
| エラーコード | カテゴリ | 重要度 | 説明 | 対処法 | 実装箇所 |
|---|---|---|---|---|---|
| GD-001 | Google Drive | クリティカル | Google Drive認証失敗 | 1. サービスアカウント確認 2. JSON認証ファイル確認 3. API有効化確認 |
googleDriveService.js:30 |
| GD-002 | Google Drive | 高 | ファイルアップロード失敗 | 1. 容量確認 2. 権限確認 3. リトライ実行 |
googleDriveService.js:150 |
| GD-003 | Google Drive | 中 | フォルダ作成失敗 | 1. 親フォルダ確認 2. 名前重複確認 3. 権限確認 |
googleDriveService.js:200 |
| GD-004 | Google Drive | 低 | 共有リンク生成失敗 | 1. ファイルID確認 2. 共有設定確認 |
googleDriveService.js:280 |
| GD-005 | Google Drive | 中 | 容量制限超過 | 1. 不要ファイル削除 2. 容量追加購入 |
googleDriveService.js:320 |
| エラーコード | カテゴリ | 重要度 | 説明 | 対処法 | 実装箇所 |
|---|---|---|---|---|---|
| SL-001 | Slack | 高 | Slack Bot認証失敗 | 1. Bot Token確認 2. OAuth Scope確認 3. ワークスペース確認 |
slackService.js:20 |
| SL-002 | Slack | 中 | メッセージ送信失敗 | 1. チャンネルID確認 2. Bot権限確認 3. リトライ実行 |
slackService.js:80 |
| SL-003 | Slack | 低 | ファイルアップロード失敗 | 1. ファイルサイズ確認 2. ファイル形式確認 |
slackService.js:150 |
| SL-004 | Slack | 低 | チャンネル不明 | 1. チャンネルID再確認 2. Bot招待確認 |
slackService.js:200 |
| SL-005 | Slack | 中 | レート制限超過 | 1. リトライ待機 2. 送信間隔調整 |
slackService.js:250 |
| エラーコード | カテゴリ | 重要度 | 説明 | 対処法 | 実装箇所 |
|---|---|---|---|---|---|
| AI-001 | Gemini AI | クリティカル | Gemini API認証失敗 | 1. APIキー確認 2. プロジェクト設定確認 |
aiService.js:25 |
| AI-002 | Gemini AI | 高 | 文字起こし処理失敗(v1.0のみ) | 1. 音声ファイル確認 2. フォーマット確認 3. v2.0移行検討 |
aiService.js:100 |
| AI-003 | Gemini AI | 中 | 要約生成失敗 | 1. 入力テキスト確認 2. プロンプト調整 3. リトライ実行 |
aiService.js:200 |
| AI-004 | Gemini AI | 高 | タイムアウト(v1.0: 17分制限) | 1. v2.0 Transcript使用 2. チャンク分割処理 3. 処理時間最適化 |
aiService.js:300 |
| AI-005 | Gemini AI | 中 | レート制限超過 | 1. リトライ待機 2. リクエスト間隔調整 |
aiService.js:400 |
| エラーコード | カテゴリ | 重要度 | 説明 | 対処法 | 実装箇所 |
|---|---|---|---|---|---|
| SY-001 | System | クリティカル | 環境変数未設定 | 1. .env確認 2. Vercel設定確認 |
config/index.js:10 |
| SY-002 | System | 高 | メモリ不足 | 1. メモリ使用量確認 2. バッファサイズ調整 |
system.js:50 |
| SY-003 | System | 中 | ネットワークエラー | 1. 接続確認 2. タイムアウト延長 |
network.js:30 |
| SY-004 | System | 低 | ログ出力失敗 | 1. ログディレクトリ確認 2. 権限確認 |
logger.js:20 |
| SY-005 | System | クリティカル | Vercelタイムアウト | 1. 処理時間最適化 2. v2.0 Transcript使用 3. 非同期処理検討 |
vercel.js:100 |
// TranscriptService エラー処理例
try {
const vttFile = await zoomApi.getTranscript(recordingId);
if (!vttFile) {
throw new Error('ZM-402: VTTファイル取得失敗');
}
const transcript = await parseVTT(vttFile);
if (!transcript.isValid) {
throw new Error('ZM-403: VTTフォーマット不正');
}
return transcript;
} catch (error) {
logger.error(error.message, {
recordingId,
fallback: 'audio-processing'
});
// フォールバック処理
if (error.message.includes('ZM-40')) {
return await fallbackToAudioProcessing(recordingId);
}
throw error;
}
// ハイブリッド処理(v2.0優先、v1.0フォールバック)
async function processRecording(recordingId) {
try {
// v2.0: Transcript API優先
return await processWithTranscript(recordingId);
} catch (error) {
if (error.code?.startsWith('ZM-40') ||
error.code?.startsWith('TS-')) {
logger.warn('v2.0処理失敗、v1.0フォールバック', error);
// v1.0: 音声処理フォールバック
return await processWithAudio(recordingId);
}
throw error;
}
}