## Voice Relay Stream Control

Commands that can be executed on an ongoing stream.

### Connection Flow Diagram

```mermaid
sequenceDiagram
    participant SP as Sinch Platform
    participant CS as Customer WebSocket Server

    Note over SP,CS: WebSocket Connection
    SP->>CS: WS connect request
    alt WS accepted
        CS-->>SP: Accept connection
    else WS rejected
        CS--xSP: Non-success response
        rect rgb(255, 204, 204)
        Note over SP,CS: Stream ended
        end
    end

    Note over SP,CS: Session Start
    SP->>CS: ConnectRequest<br/>{command: connect}
    Note right of CS: First protocol message.<br/>Server decides to accept or decline.

    alt Accepted
        CS->>SP: AnswerResponse<br/>{command: answer}
    else Declined
        CS->>SP: Close WebSocket (no answer)
        rect rgb(255, 204, 204)
        Note over SP,CS: Stream ended
        end
    end

    Note over SP,CS: Live Relay Loop
    loop While call is active
        rect rgb(240, 240, 240)
        Note over SP,CS: STT (Platform to Server)
        SP->>CS: TextMessage<br/>{command: text}
        end

        rect rgb(240, 240, 240)
        Note over SP,CS: TTS (Server to Platform)
        CS->>SP: TextResponseMessage<br/>{command: text}
        Note left of SP: Multiple chunks allowed.<br/>A batch ends when isLast=true.
        end

        rect rgb(240, 240, 240)
        Note over SP,CS: Playback Status (Platform to Server)
        SP->>CS: PlaybackEvent<br/>{command: textPlaybackStart|textPlaybackStop|textPlaybackCancel}
        end

        rect rgb(240, 240, 240)
        Note over SP,CS: DTMF (Bidirectional)
        SP->>CS: DtmfReceive<br/>{command: dtmf}
        CS->>SP: DtmfSend<br/>{command: dtmf}
        end

        rect rgb(240, 240, 240)
        Note over SP,CS: Interrupt Handling
        alt Speech detected during TTS
            SP->>CS: InterruptDetect<br/>{command: interrupt}
            alt Manual stop requested
                CS->>SP: Interrupt<br/>{command: interrupt}
            end
        else No speech interruption
            Note over SP,CS: Playback continues normally.
        end
        end
    end

    Note over SP,CS: Call End
    alt Customer closes connection
        CS->>SP: WebSocket close
        rect rgb(255, 204, 204)
        Note over SP,CS: Stream ended
        end
    else Sinch ends call
        SP->>CS: WebSocket close
        rect rgb(255, 204, 204)
        Note over SP,CS: Stream ended
        end
    end
```