> ## Documentation Index
> Fetch the complete documentation index at: https://docs.telli.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Working with Variables

> Personalize every call with contact info, dates, and details that change per contact

Variables are placeholders in your agent's prompt that get filled with real values during a call. They let your agent reference the right context, like the contact's first name, the current date, or a custom field, without you having to write a different prompt for every call.

Every [contact property](/platform/contact-properties) you set up in telli automatically appears here as a variable you can use in the prompt.

## Types of variables

telli organizes variables into three categories. You can browse all of them in the **Variables panel** in the agent builder sidebar.

| Category               | What it contains                                                                                                          | Example                                     |
| ---------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------- |
| **Contact Properties** | Information attached to the contact the agent is calling, including built-in fields and any custom properties you create. | *The first name of the person being called* |
| **Agent Variables**    | Placeholders defined within the agent itself for values specific to that agent's use case.                                | *A campaign name configured on the agent*   |
| **System Variables**   | Runtime values telli provides automatically, like the current date or time.                                               | *Today's date when the call happens*        |

## Creating and Working with Variables

<Tabs>
  <Tab title="Create a custom contact property">
    If the built-in contact fields don't cover what you need, you can create your own contact properties and use them like any other variable.

    <Steps>
      <Step title="Add a new contact property in Settings">
        Go to **Contacts → Contact Properties** and create a new property. Give it a clear name and choose the right type (text, number, yes/no, date, etc.).

        <video loop muted playsinline style={{ width: '100%', cursor: 'pointer' }} onMouseEnter={(e) => e.currentTarget.play()} onMouseLeave={(e) => { e.currentTarget.pause(); e.currentTarget.currentTime = 0; }}>
          <source src="https://mintcdn.com/telli/oSe6yooA3Hku5xB9/onboarding-media/working_with_variables/Variables_03_CreateCustomVar.mp4?fit=max&auto=format&n=oSe6yooA3Hku5xB9&q=85&s=ed534701ec90f283e1a369c9836db0a1" type="video/mp4" data-path="onboarding-media/working_with_variables/Variables_03_CreateCustomVar.mp4" />
        </video>
      </Step>

      <Step title="Use the new property in your prompt">
        Back in the agent builder, open the Variables panel and find your new property under **Contact Properties**. Insert it into the prompt wherever it's needed.

        <video loop muted playsinline style={{ width: '100%', cursor: 'pointer' }} onMouseEnter={(e) => e.currentTarget.play()} onMouseLeave={(e) => { e.currentTarget.pause(); e.currentTarget.currentTime = 0; }}>
          <source src="https://mintcdn.com/telli/oSe6yooA3Hku5xB9/onboarding-media/working_with_variables/Variables_04_InsertCustom.mp4?fit=max&auto=format&n=oSe6yooA3Hku5xB9&q=85&s=92a1111aec79786d08169bb56f0f8de5" type="video/mp4" data-path="onboarding-media/working_with_variables/Variables_04_InsertCustom.mp4" />
        </video>
      </Step>
    </Steps>
  </Tab>

  <Tab title="Insert a variable in your prompt">
    <Steps>
      <Step title="Open the Variables panel">
        In the agent builder, switch to the **Variables** tab in the right-hand sidebar to see every variable available to your agent, grouped by category.

        <Note>
          The custom contact properties you defined are now available here as variables you can use in your prompt.
        </Note>

        <video loop muted playsinline style={{ width: '100%', cursor: 'pointer' }} onMouseEnter={(e) => e.currentTarget.play()} onMouseLeave={(e) => { e.currentTarget.pause(); e.currentTarget.currentTime = 0; }}>
          <source src="https://mintcdn.com/telli/oSe6yooA3Hku5xB9/onboarding-media/working_with_variables/Variables_01_Menu.mp4?fit=max&auto=format&n=oSe6yooA3Hku5xB9&q=85&s=790f9b81a8f5f520236af371bd9e4a15" type="video/mp4" data-path="onboarding-media/working_with_variables/Variables_01_Menu.mp4" />
        </video>
      </Step>

      <Step title="Insert a variable where you need it">
        Place your cursor in the prompt where the value should appear, then click a variable in the panel. It will be inserted as a clearly styled pill so it's easy to spot. A green dot next to the variable in the variables menu means that it is implemented somewhere in the prompt.

        <Note>
          Insert a variable by selecting it from the **Variables panel**, or type `{{` in the prompt and choose the variable from the dropdown.
        </Note>

        <video loop muted playsinline style={{ width: '100%', cursor: 'pointer' }} onMouseEnter={(e) => e.currentTarget.play()} onMouseLeave={(e) => { e.currentTarget.pause(); e.currentTarget.currentTime = 0; }}>
          <source src="https://mintcdn.com/telli/oSe6yooA3Hku5xB9/onboarding-media/working_with_variables/Variables_02_InsertVar.mp4?fit=max&auto=format&n=oSe6yooA3Hku5xB9&q=85&s=3d0d55a6f630768f6712e171b0029eee" type="video/mp4" data-path="onboarding-media/working_with_variables/Variables_02_InsertVar.mp4" />
        </video>
      </Step>

      <Step title="Alternatively: Insert the variable directly via Charlie">
        Ask [Charlie](/en/get-started/agent-editor-charlie) to insert the variable for you. Describe in plain language where you'd like it to appear, and Charlie adds it to the prompt.

        <video loop muted playsinline style={{ width: '100%', cursor: 'pointer' }} onMouseEnter={(e) => e.currentTarget.play()} onMouseLeave={(e) => { e.currentTarget.pause(); e.currentTarget.currentTime = 0; }}>
          <source src="https://mintcdn.com/telli/oSe6yooA3Hku5xB9/onboarding-media/working_with_variables/Variables_05_InsertWithCharlie.mp4?fit=max&auto=format&n=oSe6yooA3Hku5xB9&q=85&s=25dce49a5609e636f33359633a2de7c5" type="video/mp4" data-path="onboarding-media/working_with_variables/Variables_05_InsertWithCharlie.mp4" />
        </video>
      </Step>
    </Steps>
  </Tab>
</Tabs>

## Tips

* Use clear, descriptive names for custom contact properties so they're easy to find later.
* Test with a real contact to make sure values get filled in as expected.
* Contact properties can be imported in bulk via CSV upload.
* Read through our Cookbook on **Variables** below

<Card title="Variables" icon="brackets-curly" href="/cookbooks/variables/overview">
  Learn how to use Variables to personalize your agent's prompts dynamically
</Card>

## Next Steps

<Card title="Test your Agent" icon="phone" href="/en/get-started/test-your-agent">
  Make a test call to see how your agent uses the variables you've set up.
</Card>
