say
speaks a fixed line, generate_reply has the model write and speak one, and
add_message adds a system message to the model’s context without anyone
hearing it.
say covers the HTTP latency: the tree moves on while it plays.
Config
All text fields are templated (see templating and data)
and a blank or whitespace-only value is refused at save. None of the three
returns a result to the model.
scope: "turn" works only in a tool wired to the
on_user_turn_completed hook; anywhere else it is
refused when the agent is published.
Choosing one
saywhen the wording is fixed: a filler, a confirmation, a reference number, a disclosure. It costs only text-to-speech.generate_replywhen the phrasing depends on what came back. It costs one more model call in the turn. Writeinstructionsas a direction, not as dialogue: “Confirm the booking and read back the date” rather than “Your booking is confirmed”.add_messageto steer the rest of the conversation after a lookup: “The caller is on the Enterprise plan; offer the priority queue.” Values that later operations read belong intooldataoruserdatainstead.
http, code and frontend_rpc operations are all silent (or
that has none) is silent: the
model adds nothing after your say. To have it add a line, end with a
generate_reply.
wait_for_playback
Leave it off for fillers: the line exists to cover the next operation’s latency.
Set it when the caller must have heard the line before the next operation runs,
such as a disclosure before a side effect.
- The wait is transitive. Speech is first in, first out, so it also waits for anything the agent was already saying in the turn.
- An interrupted line counts as finished. To make sure the line is heard in
full, also set
disable_interruptionson the tool. - The wait is bounded. A line that has not finished after 60 seconds fails
the operation, and
on_errorapplies.
say immediately before an end_call or a
transfer never needs the flag: both wait for queued speech
before they act.
On a realtime (speech-to-speech) agent,
say asks the model to speak the
line, and it may reword, reorder or trim it. When the wording must be exact — a
price, a legal line, a disclosure — use a cascade model stack. See
realtime.Next
End call
Ending the call after a goodbye.
The operation tree
What the model is told after a tool runs.