Skip to content
TriedDocs
Get started

Quickstart

Build a phone agent from a template, test it in the browser, publish it and put it on a phone number.

This guide takes you from an empty workspace to an agent that answers a phone number. It uses the dashboard. Each step also names the API endpoint that does the same thing, so you can script it later.

You need a Tried workspace. On a local install, start the dashboard and sign in as dev@tried.local.

Build and test the agent#

Open the agents list#

After you sign in you land on Home, where Build a new agent has Conductor build one for you from a short conversation (see Build and refine agents). This guide builds one by hand: select Agents in the sidebar. The list shows every agent with its Agent Type, Voice and Phone.

The agents list with the agent table

Create the agent#

Click Create an Agent. In the Create agent dialog:

  1. Under Type, pick Single prompt.
  2. Leave Engine on New from a template.
  3. Pick the Front-desk Receptionist template, or Build from scratch for an empty prompt.
  4. Click Create agent.
The Create agent dialog with the four agent types and the template gallery

The dashboard creates a Retell LLM (the prompt engine) and an agent that points at it, then opens the agent editor. The API equivalent is Create Retell LLM followed by Create agent.

Write the prompt#

The large editor in the middle holds the prompt. Describe who the agent is, what it must do and how it should speak. Type {{ to insert a dynamic variable such as {{current_time}}. The footer shows the character count and an estimated token count.

Below the prompt, Welcome Message sets the opening. Keep AI speaks first, choose Static message and type the greeting, for example Hi, thanks for calling {{business_name}}. How can I help?.

Changes save automatically. The header shows Saving… and then Saved.

Pick the model, voice and language#

The toolbar above the prompt has three pickers:

  • The model picker, which defaults to GPT 5.6 Terra.
  • The voice picker, which opens Select Voice. Preview voices with the play button and click Use voice.
  • The language picker, for example English (AU).

The Agent Details strip under the header updates the estimated Cost, Latency and Tokens as you change them.

Add functions#

Open Functions in the right column and click Add. Start with End Call so the agent can hang up when the caller is done, and add Call Transfer if callers need a person. See Functions and tools.

Test in the browser#

The test panel on the far right has two main tabs:

  • Test LLM is a text chat with the current draft. Type as the caller and read the replies. Tool calls and their results appear in the chat.
  • Test Audio starts a web call with your microphone. Click Run Test. Transfers do not work in web calls.
Test LLM: a text conversation with the draft agent

Edit the prompt, test again, and repeat until the agent behaves the way you want.

Publish#

The header badge shows Draft · V0 while you edit. Click Publish and confirm. Publishing freezes the draft as a version. Phone numbers that follow the latest published version start using it right away, and your next edit opens a new draft. See Versions and environments.

API: Publish agent version.

Put the agent on a phone number#

Add a number#

Open Phone Numbers and click the + button. Connect via SIP trunking connects a number you own on Twilio or any SIP trunk. The API can also buy a number from Telnyx or Twilio with Create phone number. See Telephony.

Assign the agent#

Select the number. Under Inbound Call Agent, choose your agent in Call Agent. To place calls from the number, also set Outbound Call Agent.

A phone number with its inbound and outbound call agents

Call it#

Dial the number from your phone. The agent answers with the welcome message. To have the agent call you instead, click Make an outbound call on the number page, or use Create phone call.

Review the call#

Open Call History and click the call. The detail drawer has the recording, transcript, post-call analysis, latency and cost. See Monitor.

The call detail drawer with the transcript and analysis

Do the same with the API#

Every dashboard action above has an endpoint. This script creates a prompt engine and an agent, then places an outbound call from a number that already has the agent assigned as its outbound agent.

LLM=$(curl -s https://api.tried.com.au/create-retell-llm \
  -H "Authorization: Bearer $TRIED_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"general_prompt":"You are a friendly receptionist for {{business_name}}.","begin_message":"Hi, thanks for calling. How can I help?"}' \
  | jq -r .llm_id)

curl -s https://api.tried.com.au/create-agent \
  -H "Authorization: Bearer $TRIED_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"agent_name\":\"Receptionist\",\"response_engine\":{\"type\":\"retell-llm\",\"llm_id\":\"$LLM\"},\"voice_id\":\"11labs-Rachel\",\"language\":\"en-AU\"}"
const headers = {
  Authorization: `Bearer ${process.env.TRIED_API_KEY}`,
  "Content-Type": "application/json",
};
const llm = await fetch("https://api.tried.com.au/create-retell-llm", {
  method: "POST",
  headers,
  body: JSON.stringify({
    general_prompt: "You are a friendly receptionist for {{business_name}}.",
    begin_message: "Hi, thanks for calling. How can I help?",
  }),
}).then((r) => r.json());

const agent = await fetch("https://api.tried.com.au/create-agent", {
  method: "POST",
  headers,
  body: JSON.stringify({
    agent_name: "Receptionist",
    response_engine: { type: "retell-llm", llm_id: llm.llm_id },
    voice_id: "11labs-Rachel",
    language: "en-AU",
  }),
}).then((r) => r.json());
import os, requests

base = "https://api.tried.com.au"
headers = {"Authorization": f"Bearer {os.environ['TRIED_API_KEY']}"}

llm = requests.post(f"{base}/create-retell-llm", headers=headers, json={
    "general_prompt": "You are a friendly receptionist for {{business_name}}.",
    "begin_message": "Hi, thanks for calling. How can I help?",
}).json()

agent = requests.post(f"{base}/create-agent", headers=headers, json={
    "agent_name": "Receptionist",
    "response_engine": {"type": "retell-llm", "llm_id": llm["llm_id"]},
    "voice_id": "11labs-Rachel",
    "language": "en-AU",
}).json()

Then place a call:

curl https://api.tried.com.au/v2/create-phone-call \
  -H "Authorization: Bearer $TRIED_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"from_number":"+61355505030","to_number":"+61412555019","retell_llm_dynamic_variables":{"business_name":"Harbourside Dental"}}'
Tip

Values in retell_llm_dynamic_variables fill the {{business_name}} placeholders for that call. See Dynamic variables.

Next steps#