fix(voice-call): log TTS errors instead of swallowing silently

Fixes #2820

The `speak()` method returns `{ success: false, error }` instead of throwing
on failure. Two call sites were not checking this return value, causing TTS
errors to be silently swallowed:

1. `handleInboundResponse()` in webhook.ts - callers never received AI response audio
2. `continueCall()` in manager.ts - continued to "listening" state even when TTS failed

Changes:
- webhook.ts: Check `speak()` return value and log errors
- manager.ts: Check `speak()` return value in `continueCall()` and return early on failure

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
chenglun.hu 2026-01-29 09:46:24 +08:00
parent a109b7f1a9
commit 3ce5ac922e
No known key found for this signature in database
GPG Key ID: 11ECC6E33B83267C
2 changed files with 8 additions and 2 deletions

View File

@ -386,7 +386,10 @@ export class CallManager {
} }
try { try {
await this.speak(callId, prompt); const speakResult = await this.speak(callId, prompt);
if (!speakResult.success) {
return { success: false, error: speakResult.error || "Failed to speak prompt" };
}
call.state = "listening"; call.state = "listening";
this.persistCallRecord(call); this.persistCallRecord(call);

View File

@ -352,7 +352,10 @@ export class VoiceCallWebhookServer {
if (result.text) { if (result.text) {
console.log(`[voice-call] AI response: "${result.text}"`); console.log(`[voice-call] AI response: "${result.text}"`);
await this.manager.speak(callId, result.text); const speakResult = await this.manager.speak(callId, result.text);
if (!speakResult.success) {
console.error(`[voice-call] Failed to speak: ${speakResult.error}`);
}
} }
} catch (err) { } catch (err) {
console.error(`[voice-call] Auto-response error:`, err); console.error(`[voice-call] Auto-response error:`, err);