Add custom data handling for Twilio

This commit is contained in:
Mark Backman
2025-09-11 09:54:19 -04:00
parent 8e8e42717b
commit d595676436

View File

@@ -99,7 +99,11 @@ async def parse_telephony_websocket(websocket: WebSocket):
tuple: (transport_type: str, call_data: dict) tuple: (transport_type: str, call_data: dict)
call_data contains provider-specific fields: call_data contains provider-specific fields:
- Twilio: {"stream_id": str, "call_id": str, "from": str, "to": str} - Twilio: {
"stream_id": str,
"call_id": str,
"body": dict
}
- Telnyx: {"stream_id": str, "call_control_id": str, "outbound_encoding": str, "from": str, "to": str} - Telnyx: {"stream_id": str, "call_control_id": str, "outbound_encoding": str, "from": str, "to": str}
- Plivo: {"stream_id": str, "call_id": str, "from": str, "to": str} - Plivo: {"stream_id": str, "call_id": str, "from": str, "to": str}
- Exotel: {"stream_id": str, "call_id": str, "account_sid": str, "from": str, "to": str} - Exotel: {"stream_id": str, "call_id": str, "account_sid": str, "from": str, "to": str}
@@ -107,14 +111,8 @@ async def parse_telephony_websocket(websocket: WebSocket):
Example usage:: Example usage::
transport_type, call_data = await parse_telephony_websocket(websocket) transport_type, call_data = await parse_telephony_websocket(websocket)
if transport_type == "twilio":
# Access call information (works for all providers when available) user_id = call_data["body"]["user_id"]
from_number = call_data.get("from", "")
to_number = call_data.get("to", "")
# Access provider-specific fields
if transport_type == "telnyx":
outbound_encoding = call_data["outbound_encoding"]
""" """
# Read first two messages # Read first two messages
start_data = websocket.iter_text() start_data = websocket.iter_text()
@@ -157,13 +155,13 @@ async def parse_telephony_websocket(websocket: WebSocket):
# Extract provider-specific data # Extract provider-specific data
if transport_type == "twilio": if transport_type == "twilio":
start_data = call_data_raw.get("start", {}) start_data = call_data_raw.get("start", {})
custom_params = start_data.get("customParameters", {}) body_data = start_data.get("customParameters", {})
call_data = { call_data = {
"stream_id": start_data.get("streamSid"), "stream_id": start_data.get("streamSid"),
"call_id": start_data.get("callSid"), "call_id": start_data.get("callSid"),
"from": custom_params.get("from", ""), # All custom parameters
"to": custom_params.get("to", ""), "body": body_data,
} }
elif transport_type == "telnyx": elif transport_type == "telnyx":