How-to

Manage templates

Build and edit conversation templates in the merchant dashboard. Preview in-browser before connecting real phone numbers.

A template is the step-by-step description of what your agent says and does on a call. Most teams start with two or three templates (one per campaign or intent) and grow from there.

Prerequisites

  • A merchant or admin role — see Manage users.
  • A rough script for the conversation you want (greeting, questions, farewell).
  • A Daily.co-compatible browser (Chrome or Safari) for in-browser preview.

Create a template

  1. Open Templates in the dashboard and click New template.
  2. Give it a name matching the campaign intent (e.g. appointment-reminder-v1).
  3. Add your first conversation step — the initial node. Write the system prompt for what the agent should say first, and specify any variables you’ll pass in (customer name, appointment date, etc.).
  4. Add follow-up nodes and connect them with transitions. The agent uses the LLM to decide which transition to take based on what the caller says.
  5. Save and open Preview to test the flow in-browser.
What the JSON looks like

Every template is stored as JSON. The dashboard hides the JSON from you by default — you can open a “raw view” toggle if you’re curious or if your team wants to version-control templates in a Git repo.

{
  "name": "appointment-reminder",
  "flow": {
    "initial_node": "greeting",
    "nodes": [
      {
        "node_name": "greeting",
        "task_messages": [
          { "role": "system", "content": "Greet the customer and confirm their appointment on {appointment_date}." }
        ],
        "functions": [
          { "name": "confirmed", "transition_to": "farewell" },
          { "name": "rescheduled", "transition_to": "farewell" }
        ]
      },
      { "node_name": "farewell", "task_messages": [ { "role": "system", "content": "Thank and say goodbye." } ] }
    ]
  }
}

For the full schema and the API to manage templates programmatically, see Templates (developer docs).

Variables

Variables let one template handle many callers. Wrap a placeholder in braces anywhere the agent speaks — Hello {customer_name}, I'm calling about your appointment on {appointment_date}. — and the value is substituted per call from the lead payload.

Preview before using real calls

Every template has a Preview button. It launches the agent in a browser tab so you can speak to it as if it were on a phone call. No phone number, no cost. Iterate here until the conversation feels right, then wire the template to a phone number.

Warm transfer to a human

Add the built-in “transfer to live agent” step to any node. When the LLM decides the caller needs a person, Breeze Buddy bridges a human in. Set the transfer number under Call settings → Transfer number.

How transfer looks on the API side

Transfer uses the connect_to_live_agent built-in global function and the transfer_number field in configurations. See Enable warm transfer for the developer walkthrough.

Best practices

  • One template per intent. Appointment reminders, order confirmations, and cold outreach each deserve their own template.
  • Keep node prompts short. Long system prompts confuse the LLM. Break long flows into multiple nodes.
  • Test with realistic variables. Don’t test with {customer_name} = “Test” — use a real name; it catches phrasing bugs.
  • Use the playground. Every change is live on the next call. Don’t test changes on production campaigns.

Publishing vs. editing

Saving a template updates it immediately — every new call uses the new version. There is no staged publish step. Use a separate “staging” template while iterating, then copy the JSON across when ready.

Next steps

Was this helpful?