#5840·pipecat

TelnyxFrameSerializer silently drops OutputTransportMessageFrame — every other telephony serializer passes it through

Author: wankhede04Created Sep 18, 2026Updated Sep 18, 2026

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

  1. Build a TelnyxFrameSerializer and call serialize() with an OutputTransportMessageFrame.
  2. Compare against the identical call on TwilioFrameSerializer (or any other telephony serializer).
  3. Telnyx returns None; every other one returns the JSON string.

Minimal reproducible example

python
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

bash

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.