- Add receive-only transceivers for bots with no local media tracks
- Resolves ICE gathering timeout issues for whisper bot
- Enables proper SDP negotiation for audio/video reception
- Whisper bot can now establish WebRTC connections successfully
The whisper bot is receive-only (transcribes audio, doesn't send media)
but WebRTC negotiation failed without proper transceivers. This fix
automatically adds recvonly audio/video transceivers when a bot has
no local tracks, allowing proper connection establishment.
- Updated server to send status_ok messages with data field instead of direct timestamp
- Modified voicebot _send_message to always include data field (empty dict if no data)
- Fixed all error message formats in server to use proper {type, data: {error}} structure
- Updated client join message to include empty data field for consistency
- All WebSocket messages now comply with WebSocketMessageModel requiring data field
- Resolved Pydantic validation errors for status_ok and error messages