Modeling WebSocket with webrtc=true: Auth + commands succeed, but no SDP Offer received – connection closes with 1006 after ~35s

Hi Zoo team and community,

I’m building a Node.js sidecar proxy to connect a browser frontend to the Zoo Modeling WebSocket for a live WebRTC modeling session (webrtc=true).

What works perfectly:

  • WebSocket handshake with Authorization: Bearer header in the initial request (same pattern as the official PHP examples )

  • Authentication is accepted (:white_check_mark:AUTH accepted by Zo o)

  • All modeling commands are accepted without errors (after fixing import_files and reconfigure_stream field requiremen ts)

  • We receive modeling_session_data, ice_server_info, and modeling respo nses

The problem:After sending multiple triggers (scene_clear_all, zoom_to_fit, view_isometric, default_camera_look_at, take_snapshot), Zoo never sends an SDP Offer. The connection remains open for ~35 seconds and then closes with code 1006 (idle time out).

Commands we’ve tested (all accept ed):

  • scene_clear_all

  • zoom_to_fit

  • view_isometric

  • default_camera_look_at

  • take_snapshot (format: png)

  • reconfigure_stream (failed with “missing field width”)

Key log excerpt (v9.5):

text

:white_check_mark:AUTH accepte d by Zoo

Trigger 1: scene_clear_ all (…)

Trigger 2: zoom_to _fit (…)

Trigger 3: view_isom etric (…)

Trigger 4: default_camera_l ook_at (…)

Trigger 5: take_s napshot (…)

→ Zoo resp: modeling

→ Zoo resp: metrics_req uest (repeated)

Connection closed (1006)

Environment:

  • Node.js 20 + ws library

  • Query params: webrtc=true&video_res_width=1280&video_res_height=720&fps=30& post_effect=ssao

  • Token is valid (confirmed vi a /user endpoint)

  • No KCL execution (removed after i mport_files error)

Question:Is there a specific command or initialization sequence required to trigger the SDP Offer in WebRTC mode? Or is there a different approach recommended for external clients wanting live video streams?

Any guidance or example code would be greatly appreciated. Happy to provide more logs or tes t specific commands.

Thanks! Jørn Watvedt at cadify.no

Hi! Sorry for the late approval of the post. Discourse flagged this somehow. Passing it along to the team now and taking a look!

Hi! My guess it that the conneciton times out. We have WebSocket “application-level” pings that clients need to send. Just like scene_clear, we got a message type that is “ping”.

You may send a ping every 10 seconds.