Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Meetings and the WebRTC worker

Two ways into a meeting

  • A conference dial-in. The flow originates a call to the conference number, sends the meeting PIN as DTMF, announces recording, and from then on listens (a listen-only call). The meeting arrives as one mixed stream from the PBX.
  • A video meeting. The WebRTC worker joins a LiveKit room as a participant and streams each participant separately, audio and sampled frames, over one tagged socket per meeting.

The meeting session flow

sequenceDiagram
    participant R as LiveKit room
    participant W as WebRTC worker
    participant T as voip transport
    participant F as Process instance
    participant O as Object store
    participant M as llm channels
    W->>R: join as labelled bot
    W->>T: open session (media stream)
    T->>F: call-start (meeting)
    R-->>W: participant audio and camera
    W->>T: tagged audio and frames per participant
    T->>O: record each participant (sealed)
    T->>M: transcribe each participant live
    T->>F: call-participant (join / leave)
    T->>F: call-transcript, call-keyword
    loop each segment
        T->>O: write the segment's audio and frames (sealed)
        T->>F: call-segment (media references)
        F->>F: policy (DMN): analysed?
        F->>M: analyse, media as {ref, sha256}
        M->>O: read, check digest, open
        F->>F: fuse (FEEL), store the row
    end
    R-->>W: room empty
    W->>T: end session
    T->>F: call-hangup (transcript, recordings)
    F->>F: digest, report

Only sparse events and references reach the flow, never media: a participant joining, a phrase being heard, a segment’s references, the end of the meeting. The transport handles media and generic measurements only; everything that interprets them is in the flow.

Where the analysis lives

ConcernWhere
Cutting each participant’s media into segments, writing them sealed, generic acoustic featuresthe transport (call-segment)
Who is analysed, and why notthe flow: a decision table (rules/analysis-policy.dmn)
The prompt, the model and its fallbackthe flow (FEEL) and an llm channel with a media-store
Which signals support an emotion, what to keep of the answer, disagreementthe flow (FEEL)
The per-participant digest and the reportthe flow (FEEL, a template)

So a prompt or a policy changes with a package version, not an engine upgrade, and every decision is a step in the instance’s audit trail.

Memory

Per participant the transport holds a bounded window of audio and only the frames, transcript lines and flagged moments of segments not yet written, so its memory does not grow with the length of the meeting. Recordings stream to the store.

Who is analysed

The role of each participant is declared by whoever issues the room token, never inferred. The call-segment channel cuts only the roles it lists, and the flow’s policy decides who of those is analysed; a participant who is not analysed never has media sent to a model. See Emotion analytics and compliance.