TelnyxFrameSerializer silently drops OutputTransportMessageFrame — every other telephony serializer passes it through
pipecat version
main (dev build post-v1.11.0)
Python version
3.12.14
Operating System
macOS 15 (not OS-specific — this is a pure serialization gap, no live call needed to observe it)
Issue description
OutputTransportMessageFrame/OutputTransportMessageUrgentFrame is the generic mechanism for
sending a raw JSON message to the client — used by RTVI (processors/frameworks/rtvi/processor.py)
and directly by app code. Twilio, Plivo, Exotel, Genesys, and Vonage's serializers all handle it
identically:
elif isinstance(frame, (OutputTransportMessageFrame, OutputTransportMessageUrgentFrame)):
if self.should_ignore_frame(frame):
return None
return json.dumps(frame.message)TelnyxFrameSerializer.serialize() has no such case. It never imports either frame type, and
falls through to its final "Return None for unhandled frames" branch, so the message is silently
dropped instead of reaching the wire.
I did not find a comment or commit explaining this as deliberate — git log -S on
OutputTransportMessageFrame/its predecessor name against telnyx.py's full history returns
nothing, meaning the capability was simply never added, not removed.
Reproduction steps
- Build a
TelnyxFrameSerializerand callserialize()with anOutputTransportMessageFrame. - Compare against the identical call on
TwilioFrameSerializer(or any other telephony serializer). - Telnyx returns
None; every other one returns the JSON string.
Minimal reproducible example
import asyncio
from pipecat.frames.frames import OutputTransportMessageFrame
from pipecat.serializers.telnyx import TelnyxFrameSerializer
serializer = TelnyxFrameSerializer(
stream_id="s1", outbound_encoding="PCMU", inbound_encoding="PCMU",
params=TelnyxFrameSerializer.InputParams(auto_hang_up=False),
)
result = asyncio.run(serializer.serialize(OutputTransportMessageFrame(message={"foo": "bar"})))
print(result) # None -- every other telephony serializer returns '{"foo": "bar"}'Eval scenario or recordings (optional)
No response
Expected behavior
TelnyxFrameSerializer.serialize() should return the JSON-encoded message, matching every other telephony serializer's behavior for this frame type.
Actual behavior
Returns None — the message never reaches the client.
Logs
Before you submit
- I have personally reproduced this issue on the latest Pipecat release (or
main). - I have searched existing issues for this bug.
- If AI tools helped write this report, I have verified the behavior myself and will personally answer follow-up questions.
Source: pipecat-ai/pipecat