The wire / Events
Events
How an event is shaped, and the four families it can belong to.
Every event the gateway writes, one line each, with the page that holds its data shape. The envelope around an event is in README.md.
| type | scope | ephemeral | page | what it says |
|---|---|---|---|---|
agent.configured |
agent | no | Control events | The gateway applied an agent.configure. |
agent.detached |
agent | no | Control events | A socket that held the agent is gone — the process exited, the connection dropped — and the agent's endpoints are whoever is left holding it. |
agent.draining |
agent | no | Control events | The answer to agent.drain, written to the agent's own log once the socket's live calls have moved: it takes no new call, and each call it held went to another socket holding the agent or waits, parked, for the next one that registers. |
agent.registered |
agent | no | Control events | The gateway accepted an agent.register: this socket now speaks for the agent and answers its routes. |
agent.state |
call | no | Call events | The agent's state changed, in the session's own words. |
agent.transcript |
call | yes | Call events | One delta of the reply the agent is giving, never the reply so far: in a voice call one word, as the voice plays it, with the seconds it was aligned to; in a written call one model token. |
attention.answered |
call | no | Control events | An ask for a person settled: a supervisor took the line, or the wait ran out and the agent has the caller back. |
attention.requested |
call | no | Control events | The agent asked for a person: the caller is on hold and waits for a supervisor to take the line. |
call.attached |
call | no | Call events | A live call is now served by this socket, mid-conversation: the socket that held it drained, or died, or the gateway restarted. |
call.claimed |
call | no | Call events | This call is the one a page was waiting for: the caller keyed the code the page shows, or the agent claimed it from what they said. |
call.dialing |
call | no | Call events | The platform is placing an outbound call and the far end has not answered yet. |
call.ended |
call | no | Call events | The call is over. |
call.line |
call | no | Call events | The line's hold and mute flags after one of them changed. |
call.ringing |
call | no | Call events | An inbound call is offered to this agent and has not been answered yet. |
call.score |
call | no | Call events | The last entry of a call: what the judges said about it at hang-up, one row per judge. |
call.started |
call | no | Call events | Media is up: the caller and the agent can hear each other, or the text session is open. |
call.summary |
call | no | Call events | What the call was about, how it went, what it consumed and what that cost. |
call.transferred |
call | no | Call events | A transfer asked for by the agent or a supervisor finished, one way or the other. |
callback.requested |
agent | no | Control events | Somebody asked to be called back: a phone caller the overflow agent answered, a web visitor who left a number at the widget, or a caller who asked the agent for one (call.callback). |
code.claimed |
agent | no | Control events | A code is off the table: a call claimed it, or it expired with none. |
code.issued |
agent | no | Control events | A page asked for a code to show beside the agent's phone number (POST /v1/codes): the four digits a caller keys to bind their call to that page. |
confirm.declined |
call | no | App events | The caller did not say yes, or the request lapsed. |
confirm.granted |
call | no | App events | The caller said yes. |
confirm.request |
call | no | App events | A tool with confirm set is about to run and the platform is asking the caller. |
credits.exhausted |
agent | no | Control events | The gateway refused a call, a written turn or a register because one of the org's quotas ran out. |
custom |
call | no | App events | A line the app wrote into the log with call.log. |
evals.spent |
agent | no | Control events | The harness asked a model outside a call's score: a judge tried, personas, a diagnosis. |
monitor.fired |
agent | no | Control events | A number the org watches crossed its line over its window: said once a day per monitor. |
spend.unusual |
agent | no | Control events | The org's calls cost more today than its own days usually do: said once a day. |
dev.request |
agent | yes | Control events | The gateway asks the app process holding the agent to do something only that process can — read a file of the agent's directory, mount its class, run its goldens — on a console's behalf. |
docs.sources |
call | no | App events | What retrieval put in front of the model for this turn. |
dtmf.received |
call | no | Call events | A touch tone the caller keyed. |
error |
agent | no | Control events | Something went wrong. |
event.received |
call | no | Room events | A fact arrived from outside the conversation: the tenant's backend sent call.event, or a participant's browser sent pinecall.event. |
fleet.full |
agent | no | Control events | The gateway refused to open a call because every worker of the fleet was full. |
log.caught_up |
call | yes | Control events | The replay is done: everything up to seq has been sent and what follows is live. |
log.gap |
call | yes | Control events | This reader missed a stretch: it reconnected too late for the store, or fell behind and the fanout dropped ephemeral entries. |
memory.ops |
call | no | App events | What memory did for this turn or at hangup: a recall before the reply, a remember after the call, a forget on request. |
message.taken |
agent | no | Control events | A message that was waiting (message.waiting) was answered, on this call — or will never be: call is null when it outlived WhatsApp's customer-service window and nothing may be said to it any more. |
message.waiting |
agent | no | Control events | A message reached one of the org's numbers while no app held the agent it routes to — the process between two deploys, a gateway just restarted. |
metrics.avatar |
call | no | Call events | One avatar timing report: livekit's AvatarMetrics, every field. |
metrics.eot |
call | no | Call events | One end-of-turn prediction: livekit's EOTInferenceMetrics, every field. |
metrics.eou |
call | no | Call events | How long closing the caller's turn took: livekit's EOUMetrics, every field. |
metrics.interruption |
call | no | Call events | The interruption detector's latest inference and running counts: livekit's InterruptionMetrics, every field. |
metrics.llm |
call | no | Call events | One LLM request as the session measured it: livekit's LLMMetrics, every field. |
metrics.realtime |
call | no | Call events | One speech-to-speech response: livekit's RealtimeModelMetrics, every field, its token details nested as the library nests them. |
metrics.stt |
call | no | Call events | One STT request or stream segment as the session measured it: livekit's STTMetrics, every field. |
metrics.tts |
call | no | Call events | One TTS request as the session measured it: livekit's TTSMetrics, every field. |
metrics.vad |
call | yes | Call events | The VAD's health for the last second or so: livekit's VADMetrics, every field. |
participant.joined |
call | no | Room events | Somebody joined the room: the caller over SIP or the widget, the agent, a supervisor, a listener, or a second SIP leg. |
participant.left |
call | no | Room events | Somebody left the room. |
participant.speaking |
call | yes | Room events | The room's own voice activity for one participant flipped. |
pong |
agent | yes | Control events | The answer to ping. |
prompt.changed |
call | no | App events | A block of the prompt was rewritten. |
room.opened |
call | no | Room events | The LiveKit room exists and the call lives in it. |
room.sent |
call | yes | Room events | The agent pushed a payload to a browser in the room, on the tenant's room.send. |
state.changed |
call | no | App events | The app's declared state changed. |
supervisor.ended |
call | no | Control events | A supervisor hung up the call. |
supervisor.released |
call | no | Control events | The supervisor gave the line back; the agent resumes with the history intact. |
supervisor.said |
call | no | Control events | A supervisor made the agent say this to the caller. |
supervisor.took_over |
call | no | Control events | A supervisor took the line; the agent is quiet until supervisor.released. |
supervisor.transferred |
call | no | Control events | A supervisor asked for a transfer. |
supervisor.whispered |
call | no | Control events | A supervisor told the agent something the caller never heard. |
tool.call |
call | no | App events | The model called a tool. |
tool.result |
call | no | App events | The app answered a tool.call. |
tools.changed |
call | no | App events | The tools the model can see changed. |
track.published |
call | no | Room events | A participant put a track on the room: their microphone, their camera, a screen. |
track.unpublished |
call | no | Room events | A participant's track left the room: they stopped sharing, or a participant.mute took their audio away. |
turn.agent |
call | no | Call events | The agent's reply is over and this is what was said. |
turn.user |
call | no | Call events | The caller's turn is over and this is what they said. |
user.state |
call | no | Call events | The caller's state changed, in the session's own words. |
user.transcript |
call | yes | Call events | Words from the caller as the recognizer hears them. |
vendor.switched |
call | no | Call events | A stage's vendor failed or came back, and the vendor that serves the stage now. |