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}`);
});