@pouchy_ai/companion-sdk - v0.78.1
    Preparing search index...

    Interface CompanionCallOptions

    interface CompanionCallOptions {
        audioElement?: HTMLAudioElement;
        bargeIn?: boolean;
        muted?: boolean;
        onEnd?: (end: CallEnd) => void;
        onError?: (err: Error) => void;
        onSpeakingChange?: (speaking: boolean) => void;
        onTranscript?: (
            e: { audioTags?: string[]; role: "user" | "assistant"; text: string },
        ) => void;
    }
    Index
    audioElement?: HTMLAudioElement

    Element to route remote audio to. One is created if omitted.

    bargeIn?: boolean

    OPT-IN full duplex: keep the mic OPEN while the companion speaks so the user can interrupt mid-utterance (both providers' native VAD interruption then works). Default false = half-duplex — the mic is muted during agent speech, because on phone SPEAKERS browser echo cancellation does not fully remove the companion's own voice and it barges in on itself (the SDK-voice "说一句就断了" field report). Enable only where AEC actually holds: headphones, desktop, or devices you have verified.

    muted?: boolean

    Open the call with the reader's microphone MUTED (0.69.0); see CompanionCall.setMuted. On openai-realtime the track is disabled before it is attached, so nothing is ever sent. On elevenlabs-convai the mute is applied the moment the session is up; the provider client has no start-muted option, so the connect handshake itself (before the agent's first line) can carry audio.

    onEnd?: (end: CallEnd) => void

    The call ended, and why (0.71.0). Fires exactly once per call, on every path including your own close(). Passing it moves a clean remote end (agent / remote) out of onError, so a hang-up is no longer reported as a fault. See CallEnd.

    onError?: (err: Error) => void

    A failure that ended the call. Every onError is terminal: the call is already torn down. Without onEnd, a clean remote end (the companion or the provider hanging up) also arrives here as call disconnected.

    onSpeakingChange?: (speaking: boolean) => void
    onTranscript?: (
        e: { audioTags?: string[]; role: "user" | "assistant"; text: string },
    ) => void

    One finished line. text never carries performed cues. On a call where audioTags was GRANTED (0.70.0), every companion line also carries audioTags: the cues it performed, in order ([] when it performed none). Absent on user lines and on calls without the grant, so absence means "not applicable", never "zero".