Skip to content

Calling & support

Voice calls with the FACE agent, and the support log that keeps their transcripts. CallingService carries WebRTC signalling (the SDP offer and answer exchange) over the authenticated API. SupportService stores call transcripts and events on the server, so a transcript survives a client restart and can be reviewed from another device.

Summary

ServiceRPCKindPurpose
CallingServiceSignalUnaryExchange an SDP offer for the voice agent’s SDP answer
CallingServiceEndCallUnaryAcknowledge a hang-up
SupportServiceRecordSupportEventUnaryAppend one transcript line or event to a call’s log
SupportServiceListSupportLogUnaryRead one call’s log, or all recent entries
SupportServiceClearSupportLogUnaryDelete one call’s log

CallingService

Full name semantics.v1.CallingService.

The media is peer-to-peer between the client and the platform’s voice agent. The control plane relays only the signalling and holds no call session.

Signal

rpc Signal(SignalRequest) returns (SignalResponse);
  • Kind: Unary.
  • Auth: Bearer session.
  • Errors: INVALID_ARGUMENT if sdp is empty. UNAVAILABLE if this instance has no voice agent configured, or if the voice agent cannot be reached or refuses the offer. INTERNAL if the voice agent returns an answer with no SDP.

Relays the SDP offer to the platform’s voice agent and returns its SDP answer. The relay times out after 15 seconds. An empty sdp_type is sent as offer.

Request: SignalRequest

FieldTypeDescription
session_idstringClient-generated call id, for example call-<epoch-ms>. The server does not read it.
sourcestringOriginating app, for example face. The server does not read it.
sdp_typestringSDP type, offer. Empty is treated as offer.
sdpstringRequired. The SDP offer.

Response: SignalResponse

FieldTypeDescription
sdp_typestringSDP type of the reply, normally answer.
sdpstringThe SDP answer.

EndCall

rpc EndCall(EndCallRequest) returns (EndCallResponse);
  • Kind: Unary.
  • Auth: Bearer session.
  • Errors: None beyond authentication.

Acknowledges a hang-up. The server tears nothing down: the media session ends when the client closes its peer connection. The response always has ok: true and server_session_ended: false.

Request: EndCallRequest

FieldTypeDescription
session_idstringThe call being hung up. The server does not read it.

Response: EndCallResponse

FieldTypeDescription
okboolThe request was accepted. This does not mean anything was torn down.
server_session_endedbooltrue only when the server actually ended a session. Currently always false, because the control plane holds no call session.
detailstringThe server’s own sentence about what it did, for display.

SupportService

Full name semantics.v1.SupportService.

A per-call log of transcript lines and events. Each call keeps its most recent 2,000 entries, and older entries are dropped. The log is stored durably when the deployment has a store configured. Without one, it lives in memory and does not survive a restart. The log belongs to the deployment and is not partitioned by user.

RecordSupportEvent

rpc RecordSupportEvent(RecordSupportEventRequest) returns (RecordSupportEventResponse);
  • Kind: Unary.
  • Auth: Bearer session.
  • Errors: None beyond authentication. A missing entry, or an entry with no call_id, returns ok: false.

Appends entry to the log of entry.call_id. If the durable write fails, the entry is still kept in memory and the call still returns ok: true.

Request: RecordSupportEventRequest

FieldTypeDescription
entrySupportLogEntryThe entry to append. call_id is required.

Response: RecordSupportEventResponse

FieldTypeDescription
okbooltrue if the entry was appended.

ListSupportLog

rpc ListSupportLog(ListSupportLogRequest) returns (ListSupportLogResponse);
  • Kind: Unary.
  • Auth: Bearer session.
  • Errors: None beyond authentication.

With a call_id, returns that call’s entries in the order they were recorded. With an empty call_id, returns every stored entry across all calls, sorted by timestamp_unix_ms, oldest first. An unknown call_id returns an empty list.

Request: ListSupportLogRequest

FieldTypeDescription
call_idstringThe call to read. Empty returns every recent entry across calls.

Response: ListSupportLogResponse

FieldTypeDescription
entriesrepeated SupportLogEntryThe entries, oldest first.

ClearSupportLog

rpc ClearSupportLog(ClearSupportLogRequest) returns (ClearSupportLogResponse);
  • Kind: Unary.
  • Auth: Bearer session.
  • Errors: INVALID_ARGUMENT if call_id is empty. There is no “clear everything”. INTERNAL if the call was cleared in memory but its stored transcript could not be deleted.

Removes every entry for one call.

Request: ClearSupportLogRequest

FieldTypeDescription
call_idstringRequired. The call whose log to delete.

Response: ClearSupportLogResponse

FieldTypeDescription
okbooltrue once the log is deleted.

Messages

SupportLogEntry

FieldTypeDescription
call_idstringThe call this entry belongs to.
sourcestringOriginating app, for example face.
speakerstringWho spoke: CALLER, AGENT or SYSTEM.
textstringThe transcript line or event text.
timestamp_unix_msint64Wall-clock time of the interaction, in Unix milliseconds. Set by the client.
kindstringTRANSCRIPT or EVENT.