Fixed replies
Return a ready-made message — text and optional buttons, with variables — in the API response for a given result, instantly and without calling any model.
A fixed reply is the simplest destination: a message you write once, returned in the response whenever its trigger matches. Dcision fills in the variables and returns it — no model call, no extra latency, nothing to pay.
Use it for confirmations, links and next steps that don't need to be generated: "Thanks! Someone from our sales team will contact you today.", with quick-reply buttons for a chat widget, WhatsApp or an e-mail template.
Configure it
{
"key": "sales_reply",
"type": "reply",
"when": { "conditions": [{ "field": "route", "on": "output", "operator": "eq", "value": "sales" }] },
"params": { "seats": { "from": "state.company_size" } },
"reply": {
"text": "Thanks! Our sales team will contact you today about {{params.seats}} seats.",
"buttons": ["Book a demo", "See pricing"]
}
}| Field | Type | Default | Description |
|---|---|---|---|
reply.text | string | — | The message, 1 to 4,000 characters. Variables allowed; line breaks are kept. |
reply.buttons | array of strings | [] | Up to 10 labels of up to 80 characters each — quick replies or list items for your UI. Variables allowed. |
Texts use the text encoding: values are inserted as text, and a missing value becomes an empty string. Secrets can't be used in a reply — it is returned to whoever called the API.
In the response
{
"key": "sales_reply",
"type": "reply",
"text": "Thanks! Our sales team will contact you today about 500 seats.",
"buttons": ["Book a demo", "See pricing"]
}A reply entry has no status: it is always rendered. Show text to your user and buttons as quick replies; when a button is pressed, send its label back as the next state of your conversation.
Good to know
- Replies count toward the 10 destinations that can fire per execution, but not toward the 3 that make the caller wait.
- A decision can return several replies — for example one per question — in schema order.
- In the Playground, a reply is rendered as a chat bubble with its buttons, in previews too.
- Need a different answer for every message? Use an LLM answer or your own agent on that route instead.
Params and templates
Map values into a destination — params from a field or a fixed value, required params, {{…}} variables in URLs, headers, bodies and texts, and how each place encodes them for you.
LLM answers
Let a model answer for a route — Dcision calls OpenRouter or Vercel AI Gateway with your workspace's own key, the route's prompt as the system message and the state as input.