Skip to main content
Many nodes in a flow always say the same thing: greetings, hold messages, confirmations, goodbyes. A static node pre-renders the audio for that message when the agent is saved and plays it back from cache at runtime. No LLM call. No TTS call. No latency. repeat_after_silence_seconds is a related setting that auto-replays a node after N seconds of user silence and exposes a _silence_repeats counter so expression edges can escalate after a few silent rounds (offer help, transfer, hang up).

Latency and cost


Configuring a static node

Set node_type to "static" and provide static_message:
That’s it. The audio is pre-generated using the agent’s configured TTS voice when the agent is saved, then served from cache on every call.

Field reference

All three fields are optional with safe defaults. Existing graph agents that don’t use any of them behave exactly as before.

Multilingual static messages

For a multilingual agent, static_message can be a per-language map instead of a single string. At runtime the node speaks the variant that matches the caller’s active language, and the platform pre-generates a separate cached clip for each language using that language’s voice.
Use the same two-letter language codes as your agent’s multilingual configuration. When the caller’s language switches mid-call (auto-switch), the next static node automatically plays the matching-language clip. This is the same { "language_code": "text" } format used by system messages like call_hangup_message and check_user_online_message.
A plain-string static_message keeps working unchanged, so add a map only when you want per-language audio.

How the multilingual audio is built

When you save the agent, the platform pre-generates one cached clip per language variant, each rendered with that language’s configured voice. At call time the clip for the active language streams from cache with the same instant playback and zero cost as a single-language static node. If a language has no dedicated voice in your multilingual settings, its clip falls back to the agent’s primary voice.

Silence repeat

When repeat_after_silence_seconds is set and the user goes quiet:
  1. The silence timer fires after the configured seconds.
  2. _silence_repeats increments by 1.
  3. Expression edges are evaluated. If one matches _silence_repeats, the agent transitions.
  4. Otherwise the node replays. A static node plays the same cached audio (zero cost). An LLM node regenerates with [silence] in the conversation history and rephrases naturally.
  5. _silence_repeats resets to 0 on any transition out of the node.

Example: greeting with silence fallback

Play a greeting. If the user is silent, repeat up to 3 times, then hang up.
What happens:
  • Cached audio plays instantly.
  • User silent for 8s, audio replays (_silence_repeats = 1).
  • Still silent, replays (_silence_repeats = 2).
  • Still silent, replays (_silence_repeats = 3), expression matches, transitions to goodbye.

Example: LLM node with silence nudge

The same pattern works on LLM nodes. The LLM sees [silence] in conversation history and rephrases without any extra prompt engineering on your part.
The LLM might say “Could you share your email?” first, then “Sorry, I didn’t catch that, could you tell me your email?” on the next silence, then transition to goodbye after the third.

When the cache is built

Audio for every static node is generated when you save the agent, using the agent’s configured TTS voice. At call time the cached audio is streamed directly, no LLM or TTS call. If you change static_message later, re-save the agent so the cache regenerates with the new text.