2.5 KiB
2.5 KiB
Dora IOBridge Node
Generic WebSocket bridge between web clients and Dora dataflow.
Dora Outputs (WebSocket → Dora)
| Output | Type | Description |
|---|---|---|
text_out |
string | Text from clients |
audio_out |
bytes | WAV audio from clients |
data_out |
JSON | Generic data from clients |
Dora Inputs (Dora → WebSocket)
| Input | Type | Description |
|---|---|---|
text_in |
string | Text to broadcast |
audio_in |
bytes | WAV audio to broadcast |
data_in |
JSON | Generic data to broadcast |
Environment Variables
| Variable | Default | Description |
|---|---|---|
WS_HOST |
0.0.0.0 |
Bind address |
WS_PORT |
8765 |
Listen port |
WebSocket Endpoint
ws://{WS_HOST}:{WS_PORT}
Default: ws://0.0.0.0:8765
WebSocket Protocol
Client → Server
| Type | Field | Description |
|---|---|---|
text |
content |
Text string |
audio |
content |
Base64-encoded WAV |
data |
payload |
Any JSON object |
ping |
- | Health check |
Examples:
{"type": "text", "content": "hello world"}
{"type": "audio", "content": "UklGRi4AAABXQVZFZm10..."}
{"type": "data", "payload": {"key": "value"}}
{"type": "ping"}
Server → Client
| Type | Field | Description |
|---|---|---|
text |
content |
Text string |
audio |
content |
Base64-encoded WAV |
data |
payload |
Any JSON object |
pong |
- | Response to ping |
error |
message |
Error description |
Examples:
{"type": "text", "content": "response text"}
{"type": "audio", "content": "UklGRi4A...", "format": "wav"}
{"type": "data", "payload": {"objects": [...]}}
{"type": "pong"}
{"type": "error", "message": "Invalid JSON"}
Dataflow Example
- id: iobridge
build: uv pip install -e dora_iobridge
path: dora_iobridge/dora_iobridge/main.py
env:
WS_HOST: "0.0.0.0"
WS_PORT: "8765"
inputs:
text_in: voice/voice_out
data_in: voice/scene_update
outputs:
- text_out
Testing
# Install websocat
sudo apt install websocat
# Connect
websocat ws://localhost:8765
# Send text
{"type": "text", "content": "hello"}
# Ping
{"type": "ping"}