Skip to content

Remote client recipes

Establish addresses and schema

Set the actual service addresses from the deployment's network map. All examples use placeholders and require access to the intended robot network/proxy. The documentation domain does not proxy these APIs.

export CONSOLE_URL='http://ROBOT_HOST:CONSOLE_PORT'
export ROBOT_UI_URL='http://ROBOT_HOST:WEBUI_PORT'
curl --fail-with-body "$CONSOLE_URL/api/health"
curl --fail-with-body "$ROBOT_UI_URL/api/health"
curl --fail-with-body "$ROBOT_UI_URL/api/openapi.json" --output robot-openapi.json

Inspect adapter/backend state after liveness. Read /api/teleops/catalog and /api/teleops/state before choosing provider voices, animations, scenes or behavior values.

Speak supplied text

This produces actual speech and associated animation through the configured pipeline:

curl --fail-with-body "$ROBOT_UI_URL/api/teleops/command" \
  -H 'Content-Type: application/json' \
  --data '{"type":"teleops.speech.say","requestId":"speech-example-1","text":"Hello.","language":"en-US","voice":"CONFIGURED_VOICE"}'

Check application ok, then speech/audio events. An accepted command can still fail downstream because a provider, voice, audio device or animation sink is unavailable. A direct TTS synthesis request returns encoded audio/metadata and does not itself mean the robot spoke.

Submit a conversation turn

curl --fail-with-body "$ROBOT_UI_URL/api/teleops/command" \
  -H 'Content-Type: application/json' \
  --data '{"type":"teleops.chat.send","requestId":"chat-example-1","text":"Hello.","language":"en-US","source":"remote-client"}'

Observe suggestion/utterance events according to the selected hybrid/provider mode. Do not submit metadata updates or interim transcripts again as separate turns. Repeating a timed-out request can duplicate input.

Read perception remotely

Use matching ROS interfaces, domain and compatible network/QoS:

ros2 topic info -v /hr/perception/people
ros2 topic echo /hr/perception/people --once --qos-reliability best_effort
ros2 interface show hr_msgs/msg/People2

For browser clients, fetch the current image from /api/video/fov.jpg. The after sequence and timeout support waiting for a newer frame; HTTP 204 means no new frame in that wait. Keep headers/status handling separate from image decoding.

Browser monitor without microphone ownership

Connect the Robot WebUI audio socket, send hello with outputChannel: monitor, then subscribe:

{"type":"audio.hello","version":2,"clientId":"remote-monitor","outputChannel":"monitor"}
{"type":"output.subscribe","enabled":true}

Read output.start format before consuming binary PCM. Monitoring does not require acquiring microphone ownership and does not release robot speech gates. Full audio contract.

Follow a performance without replaying it

Connect /ws, consume performance.runtime, then matching performance.tick messages. Fetch /api/performances/current on content revision changes. Ignore ticks from other runtime revisions. Reconnect by reading snapshots; do not automatically resend Run.

To operate a selected performance, use the performance command protocol and ID/payload from current storage/catalog. Playback can trigger speech and motion, so the client must deliberately select the intended robot/content.

Read host diagnostics

curl --fail-with-body "$CONSOLE_URL/api/system/summary"
curl --fail-with-body "$CONSOLE_URL/api/system/services"
curl --fail-with-body "$CONSOLE_URL/api/network/routes"
curl --fail-with-body "$CONSOLE_URL/api/audio/routing/container-check"

Cached status can include stale/refresh/error metadata. Health polling marks the console active for automatic refresh; individual reads are not necessarily synchronous probes. Use task IDs and task.updated events for long-running operations.

Controlled motor operation

Read motor definitions, current state and control/torque status first. The motor API guide defines named posture and torque semantics. Values in this API are not raw servo register positions. Use the selected calibration/units and an operator-approved narrow target; no universal motor value is safe for every assembly.

After issuing a command, inspect application result and actual feedback. Publication acknowledgement is not physical completion. The generic WebUI command.stop is unsupported; implement recovery around the appropriate subsystem and the robot's prescribed physical procedure.