From 31e2c135b045a4ea7a31c7dd1d585086fa4b0c95 Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Wed, 6 May 2026 19:51:13 +0530 Subject: [PATCH] fix: add missing call_id in gathered_context for telnyx --- api/services/telephony/providers/telnyx/provider.py | 12 ++++++++++++ api/services/telephony/providers/vonage/provider.py | 3 ++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/api/services/telephony/providers/telnyx/provider.py b/api/services/telephony/providers/telnyx/provider.py index e466bc5..72e87d7 100644 --- a/api/services/telephony/providers/telnyx/provider.py +++ b/api/services/telephony/providers/telnyx/provider.py @@ -22,6 +22,8 @@ from api.services.telephony.base import ( from api.utils.common import get_backend_endpoints from api.utils.telephony_address import normalize_telephony_address +from fastapi import WebSocketDisconnect + if TYPE_CHECKING: from fastapi import WebSocket @@ -139,6 +141,7 @@ class TelnyxProvider(TelephonyProvider): status="initiated", caller_number=from_number, provider_metadata={ + "call_id": call_control_id, "call_control_id": call_control_id, "call_leg_id": call_leg_id, "call_session_id": call_session_id, @@ -321,6 +324,15 @@ class TelnyxProvider(TelephonyProvider): }, ) + except WebSocketDisconnect as e: + # Telnyx opens the WebSocket during `bridging` (pre-answer) but only + # sends the `start` event on `call.answered`. If the call ends before + # answer (no-answer timeout, busy, declined), Telnyx closes the + # socket abruptly — surface this as an expected end-of-call. + logger.info( + f"[run {workflow_run_id}] Telnyx WebSocket closed before stream start " + f"(call ended pre-answer): code={e.code}, reason={e.reason!r}" + ) except Exception as e: logger.error(f"Error in Telnyx WebSocket handler: {e}") raise diff --git a/api/services/telephony/providers/vonage/provider.py b/api/services/telephony/providers/vonage/provider.py index 36226b7..880da20 100644 --- a/api/services/telephony/providers/vonage/provider.py +++ b/api/services/telephony/providers/vonage/provider.py @@ -140,7 +140,8 @@ class VonageProvider(TelephonyProvider): status=response_data.get("status", "started"), caller_number=from_number, provider_metadata={ - "call_uuid": response_data["uuid"] + "call_id": response_data["uuid"], + "call_uuid": response_data["uuid"], }, # Vonage needs UUID persisted for WebSocket raw_response=response_data, )