YuppTV WebSocket Server POC · voice commands → TV app · open the app simulator · protocol reference

Bot: type a command, it is pushed to the app

Raw command (JSON) to a device

Connected devices (apps)

No app has connected yet. Connect your app to and send register, or open the simulator.

Live log

Quick start for the app developer

1. Connect (one outbound socket, bearer token):

        
2. Register once the socket is open:
{"type":"register","device_id":"tv-<android-id>","name":"Living room TV","room":"living room",
 "platform":"android-tv","app":{"package":"com.yupptv.scope.tvapp","version":"3.4.1"},
 "capabilities":["play_content_id","play_deeplink","control","open_app","now_playing"]}
3. Keep alive: send {"type":"ping"} every 25 s, expect pong.
4. You receive commands like:
{"cmd_id":"c_…","type":"play","content":{"content_id":"ch_tv9_telugu","kind":"live_channel","title":"TV9 Telugu"},
 "fallback_deeplink":"yupptvscope://…/channels/tv9-news/live?src=act","issued_at":1791700000,"expires_at":1791700030,"sig":"…"}
5. Ack every command within 1 s, with the real outcome:
{"type":"ack","cmd_id":"c_…","ok":true,"state":"playing","foreground":"com.yupptv.scope.tvapp",
 "now_playing":{"content_id":"ch_tv9_telugu","title":"TV9 Telugu","kind":"live_channel"}}
{"type":"ack","cmd_id":"c_…","ok":false,"reason":"not_logged_in"}
6. Push state on change: {"type":"state","foreground":"…","now_playing":{…},"volume":{"level":28,"muted":false},"screen":"player"}
Test from a terminal: