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
| Service | RPC | Kind | Purpose |
|---|---|---|---|
| CallingService | Signal | Unary | Exchange an SDP offer for the voice agent’s SDP answer |
| CallingService | EndCall | Unary | Acknowledge a hang-up |
| SupportService | RecordSupportEvent | Unary | Append one transcript line or event to a call’s log |
| SupportService | ListSupportLog | Unary | Read one call’s log, or all recent entries |
| SupportService | ClearSupportLog | Unary | Delete 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_ARGUMENTifsdpis empty.UNAVAILABLEif this instance has no voice agent configured, or if the voice agent cannot be reached or refuses the offer.INTERNALif 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
| Field | Type | Description |
|---|---|---|
session_id | string | Client-generated call id, for example call-<epoch-ms>. The server does not read it. |
source | string | Originating app, for example face. The server does not read it. |
sdp_type | string | SDP type, offer. Empty is treated as offer. |
sdp | string | Required. The SDP offer. |
Response: SignalResponse
| Field | Type | Description |
|---|---|---|
sdp_type | string | SDP type of the reply, normally answer. |
sdp | string | The 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
| Field | Type | Description |
|---|---|---|
session_id | string | The call being hung up. The server does not read it. |
Response: EndCallResponse
| Field | Type | Description |
|---|---|---|
ok | bool | The request was accepted. This does not mean anything was torn down. |
server_session_ended | bool | true only when the server actually ended a session. Currently always false, because the control plane holds no call session. |
detail | string | The 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, returnsok: 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
| Field | Type | Description |
|---|---|---|
entry | SupportLogEntry | The entry to append. call_id is required. |
Response: RecordSupportEventResponse
| Field | Type | Description |
|---|---|---|
ok | bool | true 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
| Field | Type | Description |
|---|---|---|
call_id | string | The call to read. Empty returns every recent entry across calls. |
Response: ListSupportLogResponse
| Field | Type | Description |
|---|---|---|
entries | repeated SupportLogEntry | The entries, oldest first. |
ClearSupportLog
rpc ClearSupportLog(ClearSupportLogRequest) returns (ClearSupportLogResponse);- Kind: Unary.
- Auth: Bearer session.
- Errors:
INVALID_ARGUMENTifcall_idis empty. There is no “clear everything”.INTERNALif the call was cleared in memory but its stored transcript could not be deleted.
Removes every entry for one call.
Request: ClearSupportLogRequest
| Field | Type | Description |
|---|---|---|
call_id | string | Required. The call whose log to delete. |
Response: ClearSupportLogResponse
| Field | Type | Description |
|---|---|---|
ok | bool | true once the log is deleted. |
Messages
SupportLogEntry
| Field | Type | Description |
|---|---|---|
call_id | string | The call this entry belongs to. |
source | string | Originating app, for example face. |
speaker | string | Who spoke: CALLER, AGENT or SYSTEM. |
text | string | The transcript line or event text. |
timestamp_unix_ms | int64 | Wall-clock time of the interaction, in Unix milliseconds. Set by the client. |
kind | string | TRANSCRIPT or EVENT. |