Build your agent
Values and state
How steps share information during a call, which values do something on their own, and what reaches your webhook.
Each call has its own state: a set of named values. Steps read from it and write to it. Declare every value in the workflow's variables with a type and, if it needs one, a starting value:
"variables": { "user_input": { "type": "str" }, "conversation_history": { "type": "list", "default": [] }, "hangup": { "type": "bool", "default": false }, "outcome": { "type": "str" }}Types are str, int, float, bool, list and dict.
Who writes what
| Step | Writes | Reads |
|---|---|---|
| Listen | What the caller said, under each name in its input_variables | — |
| AI decision | Every field it returns (its llm_return_type), and its memory under history_key | Its input_variables, and its memory |
| AI reply | Only its memory under history_key. The reply itself is spoken, not saved. | Its input_variables, and its memory |
| Say | — | The names in its variables |
| Branch | — | The first name in its input_variables |
Values that do something
When a Say step sends these, or an AI reply returns them, the pipeline acts on them:
| Value | What happens |
|---|---|
speak | Spoken reply: What the caller hears. |
hangup | End the call: Hangs up when this is yes. |
actions | Website actions: Moves the caller’s web page. |
interruption_type | Sets how this one message can be interrupted. See Interruptions. |
Every other value a Say step sends is passed on with the turn: it shows as a data line in the Test panel and session replays, and reaches your webhook.
Next steps
- Patterns: put values to work.
- AI decision: decide fields with an AI.