Skip to main content

Data Models

Data structures used throughout the Estuary SDK.

SessionInfo

Returned when a connection is successfully established.

interface SessionInfo {
sessionId: string; // Unique session ID
conversationId: string; // Persistent conversation ID
characterId: string; // Character UUID
playerId: string; // User identifier
}

Usage:

character.on('connected', (session: SessionInfo) => {
print(`Session: ${session.sessionId}`);
print(`Conversation: ${session.conversationId}`);
});

BotResponse

AI text responses, received as streaming chunks or complete messages.

interface BotResponse {
text: string; // Response text
isFinal: boolean; // Complete response?
partial: boolean; // Streaming chunk?
messageId: string; // Message ID
chunkIndex: number; // Chunk number
isInterjection: boolean; // Proactive message?
}

Usage:

character.on('botResponse', (response: BotResponse) => {
if (response.isFinal) {
print(`Complete: ${response.text}`);
} else {
// Streaming update
updateUI(response.text);
}
});

BotVoice

AI voice audio data, received as Base64-encoded PCM chunks.

interface BotVoice {
audio: string; // Base64 PCM16 audio
chunkIndex: number; // Audio chunk number
isFinal: boolean; // Last chunk?
sampleRate: number; // Sample rate (24000)
}

Usage:

character.on('voiceReceived', (voice: BotVoice) => {
const pcmBytes = Base64.decode(voice.audio);
audioOutput.addAudioFrame(pcmBytes, 1);
});

SttResponse

Speech-to-text transcription results.

interface SttResponse {
text: string; // Transcribed text
isFinal: boolean; // Final transcription?
confidence: number; // Confidence (0-1)
}

Usage:

character.on('transcript', (stt: SttResponse) => {
if (stt.isFinal) {
print(`You said: ${stt.text}`);
}
});

InterruptData

Information about conversation interrupts.

interface InterruptData {
reason: string; // Interrupt reason
}

Usage:

character.on('interrupt', (data: InterruptData) => {
audioOutput.interruptAudioOutput();
print(`Interrupted: ${data.reason}`);
});