Function Call Request
Voice Agent
The Voice Agent server sends FunctionCallRequest to request a function call. The client_side flag determines whether the server executes the function or expects the client to.
Purpose
Section titled “Purpose”This message is used to trigger either a built-in server-side function or a custom function defined by the client.
- When
client_sideisfalse, the server will handle the function using built-in logic. - When
client_sideistrue, the client must handle the function and respond with aFunctionCallResponse. - The optional
thought_signaturefield may be present when using certain Gemini models that require an additional function call identifier. See Gemini Docs for details.
A request can arrive before the user’s turn is confirmed. See Turn confirmation below.
Handling the message
Section titled “Handling the message”When your client receives a FunctionCallRequest:
- Check the
client_sidefield. - If it’s
true, call the appropriate client-defined function. - Return a
FunctionCallResponsemessage with the function result. - If it’s
false, no client action is needed; the server will handle it internally.
Turn confirmation
Section titled “Turn confirmation”The agent begins building a reply before speech-to-text confirms the user has finished speaking, so a FunctionCallRequest can reach you inside that speculative window. If the user keeps speaking, the turn resumes and the call is cancelled.
- By default, a call is dispatched as soon as the LLM emits it. You may receive a
FunctionCallCancelledfor it, in which case you should stop work on thatidand send no response. - To stop a function from being requested speculatively at all, set
defer_until_eottotrueon its definition inSettings. The request is then only sent once the turn is confirmed.
defer_until_eot is a Settings property, not a field on this message. Requests carry only the fields listed below.
For the behavior in full, see Speculative Replies & Turn Confirmation.
Example payloads
Section titled “Example payloads”Client-side function
Section titled “Client-side function”The server asks the client to execute get_weather and reply with a FunctionCallResponse.
{
"type": "FunctionCallRequest",
"functions": [
{
"id": "fc_12345678-90ab-cdef-1234-567890abcdef",
"name": "get_weather",
"arguments": "{\"location\": \"Fremont, CA 94539\"}",
"client_side": true,
"thought_signature": "abc123"
}
]
}The thought_signature field is optional. Certain Gemini models include it as an additional function call identifier. See Gemini Docs.
Server-side function
Section titled “Server-side function”The server executes the function internally and notifies the client. The client takes no action.
{
"type": "FunctionCallRequest",
"functions": [
{
"id": "fc_aabbccdd-eeff-0011-2233-445566778899",
"name": "end_call",
"arguments": "{\"reason\": \"completed\"}",
"client_side": false
}
]
}Fields
Section titled “Fields”| Field | Type | Description |
|---|---|---|
type |
string | Always "FunctionCallRequest". |
functions[].id |
string | Unique identifier for this function call. Echo back in the FunctionCallResponse. |
functions[].name |
string | Function name as defined in your agent configuration. |
functions[].arguments |
string | JSON-encoded arguments. Parse before passing to the function. |
functions[].client_side |
boolean | true if the client must execute and respond. false if the server handles it. |
functions[].thought_signature |
string | Optional. Used by some Gemini models. Pass back unchanged in the response when present. |
Related messages
Section titled “Related messages”FunctionCallResponse: The expected response from the client whenclient_sideistrue.FunctionCallCancelled: Sent when a request you already received is cancelled because the user started speaking again, either inside the speculative window or after the turn was confirmed.