Orchestrator
Overview
The xRx WebSocket API allows clients to connect to a server for real-time communication. The server handles both text and binary messages, providing functionalities such as speech-to-text (STT), text-to-speech (TTS), and interaction with an agent.
Endpoint
- URL:
/api/v1/ws - Method:
GET - Protocol: WebSocket
Authentication
Connection
Upon connecting to the WebSocket endpoint, the server will log the connection and store the session.
Messages
The server handles two types of messages: text and binary.
Text Messages
Example:
{
"type": "text",
"content": "Hello, how can I help you?"
}
Binary Messages
- Format: Binary data (e.g., audio data)
Events
message
- Description: Triggered when a message is received from the client.
- Parameters:
message: The message data (text or binary)isBinary: Boolean indicating if the message is binary
Handling Text Messages:
- If
typeis"text", the server will append the text to the session's chat history and send it to the agent. - If
typeis"action", the server will send the action to the agent.
Handling Binary Messages:
- The server will append the binary data (audio) to the session's speech buffer and process it using VAD (Voice Activity Detection).
close
- Description: Triggered when the client closes the connection.
- Parameters:
code: The close codereason: The reason for closing
Server Responses
Text Responses
- Format: JSON
- Fields:
user: The user who sent the messagecontent: The message contenttype: The type of message ("text","audio","widget")
Example:
{
"user": "agent",
"content": "One moment please...",
"type": "text"
}
Binary Responses
- Format: Binary data (e.g., audio data)
Error Handling
- If the session is not found, the server logs an error and does not process the message.
- If the STT or TTS WebSocket is not open, the server attempts to reopen the connection and logs any errors.
Environment Variables
API_KEY: API key for authenticationAGENT_HOST,AGENT_PORT: Configuration for the agentGUARDRAILS_AGENT_HOST,GUARDRAILS_AGENT_PORT: Configuration for the guardrails agentAGENT_WAIT_MS,SAMPLE_RATE,STT_WAIT_MS: Timing and sample rate configurations for the STTSTT_HOST,STT_PORT,STT_PATH: Configuration for the STT WebSocketTTS_HOST,TTS_PORT,TTS_PATH: Configuration for the TTS WebSocketINITIAL_RESPONSE: Initial response messageSTT_PROVIDER: STT provider (e.g.,deepgram)REDIS_HOST: Configuration for Redis
Example Usage
Connecting to the WebSocket:
const socket = new WebSocket('ws://localhost:8000/api/v1/ws');
socket.onopen = () => {
console.log('Connection opened');
};
socket.onmessage = (event) => {
if (typeof event.data === 'string') {
const message = JSON.parse(event.data);
console.log('Received message:', message);
} else {
console.log('Received binary data');
}
};
socket.onclose = (event) => {
console.log(`Connection closed: ${event.code} ${event.reason}`);
};
socket.onerror = (error) => {
console.error('WebSocket error:', error);
};
Sending a Text Message:
const message = {
type: 'text',
content: 'Hello, how can I help you?'
};
socket.send(JSON.stringify(message));
Sending a Binary Message:
const audioData = new Uint8Array([/* audio data */]);
socket.send(audioData);
This documentation provides an overview of the WebSocket API, including connection details, message formats, events, and example usage.