fix: Telnyx, catch error when user has hung up the call first

This commit is contained in:
Mark Backman
2025-06-24 11:33:31 -04:00
parent 3eed316049
commit d6f7ecc0a3
2 changed files with 31 additions and 5 deletions

View File

@@ -9,7 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Added ### Added
- Added logging and improved error handling to help diagnose and prevent potential - Added logging and improved error handling to help diagnose and prevent potential
Pipeline freezes. Pipeline freezes.
- Introduce task watchdog timers. Watchdog timers are used to detect if a - Introduce task watchdog timers. Watchdog timers are used to detect if a
@@ -52,7 +52,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
`LLMAssistantContextAggregator` that exposes whether a function call is in `LLMAssistantContextAggregator` that exposes whether a function call is in
progress. progress.
- Added `SambaNovaLLMService` which provides llm api integration with an - Added `SambaNovaLLMService` which provides llm api integration with an
OpenAI-compatible interface. OpenAI-compatible interface.
- Added `SambaNovaTTSService` which provides speech-to-text functionality using - Added `SambaNovaTTSService` which provides speech-to-text functionality using
@@ -84,15 +84,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Fixed ### Fixed
- Fixed an issue in `FastAPIWebsocketClient` to ensure proper disconnection - Fixed an issue in `FastAPIWebsocketClient` to ensure proper disconnection
when the websocket is already closed. when the websocket is already closed.
- Fixed an issue where the `UserStoppedSpeakingFrame` was not received if the - Fixed an issue where the `UserStoppedSpeakingFrame` was not received if the
transport was not receiving new audio frames. transport was not receiving new audio frames.
- Fixed an edge case where if the user interrupted the bot but no new aggregation - Fixed an edge case where if the user interrupted the bot but no new aggregation
was received, the bot would not resume speaking. was received, the bot would not resume speaking.
- Fixed an issue with `TelnyxFrameSerializer` where it would throw an exception
when the user hung up the call.
- Fixed an issue with `ElevenLabsTTSService` where the context was not being - Fixed an issue with `ElevenLabsTTSService` where the context was not being
closed. closed.

View File

@@ -196,8 +196,31 @@ class TelnyxFrameSerializer(FrameSerializer):
async with session.post(endpoint, headers=headers) as response: async with session.post(endpoint, headers=headers) as response:
if response.status == 200: if response.status == 200:
logger.info(f"Successfully terminated Telnyx call {call_control_id}") logger.info(f"Successfully terminated Telnyx call {call_control_id}")
elif response.status == 422:
# Handle the case where the call has already ended
# Error code 90018: "Call has already ended"
# Source: https://developers.telnyx.com/api/errors/90018
try:
error_data = await response.json()
if any(
error.get("code") == "90018"
for error in error_data.get("errors", [])
):
logger.debug(
f"Telnyx call {call_control_id} was already terminated"
)
return
except:
pass # Fall through to log the raw error
# Log other 422 errors
error_text = await response.text()
logger.error(
f"Failed to terminate Telnyx call {call_control_id}: "
f"Status {response.status}, Response: {error_text}"
)
else: else:
# Get the error details for better debugging # Log other errors
error_text = await response.text() error_text = await response.text()
logger.error( logger.error(
f"Failed to terminate Telnyx call {call_control_id}: " f"Failed to terminate Telnyx call {call_control_id}: "