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

# Custom Agent

> Build an inbound agent from your own prompt. Connect it to your own APIs with custom functions, add library functions for booking and transfers, and use the same actions, web widget, and Knowledge Packs as other inbound agents.

## Details

The **Custom Agent** is a role for **Inbound Agents** that starts from a blank prompt. Instead of filling in structured fields like on the Receptionist, you write the instructions the agent follows on every call and choose the tools it can use.

With a Custom Agent you can:

* Write a prompt from scratch, or paste one you already have
* Connect your own API endpoints with **custom functions**
* Add **library functions** for checking availability, booking appointments, and transferring calls
* Enable the **Notify the representative**, **Send Reports**, and **Extract custom fields** actions
* Deploy the agent over the phone, on the web, or both
* Attach Knowledge Packs

This role is ideal for workflows that the templates don't cover, such as booking through your own CRM or scheduling tool, looking up or creating records during a call, or logging every call as a support ticket.

## Creating a Custom Agent

<Steps>
  <Step title="Add a new agent">
    * From the **Home** screen, click **Add agent** in the **Inbound Agents** section and choose **Custom Agent**.
  </Step>

  <Step title="Complete the initial setup">
    * Choose whether the agent is tied to a phone number, deployed to the web, or both, and configure its **Agent Settings**, **Call Settings**, and **Voice Settings**.
    * The setup works the same way as for any inbound agent. See [**Creating an Inbound Agent**](/guides/usage/inbound-calling/Creating-an-Inbound-Agent).
  </Step>

  <Step title="Write the prompt">
    * Open the **Agent Training** tab, write or paste your instructions in the **Prompt** field, and click **Save**.
  </Step>

  <Step title="Add functions and actions">
    * Use the **Tools & Functions** and **Actions** tabs to give the agent the abilities it needs. See the sections below.
  </Step>
</Steps>

A Custom Agent shows a **Custom Agent** badge under its name. Only saved changes affect calls, so click **Save** after every edit. Unsaved edits are never used on live or test calls.

## The Agent Configuration Screen

At the top of the screen you'll see the agent's name, its **Custom Agent** badge, a link to add a description, its status (for example **Active on Web** or **Inactive**), and a **Settings** button.

Below that:

* **Estimated credits per minute:** An estimate of how many credits the agent consumes for each minute of calling, based on how it is configured. Click it to see what is driving the estimate.
* **Available credits:** Your current credit balance.
* **Using:** The model tier the agent runs on. Click **Manage** to choose **Basic**, which is reliable and efficient for shorter, linear conversations, or **Premium**, which offers deeper reasoning built for longer, more complex conversations.

For details on credits, see [**Credit Pricing**](/guides/consumption/minutes-management/Minute-Pricing-and-Discount).

The screen has five tabs: **Agent Training**, **Tools & Functions**, **Actions**, **Web Agent**, and **Knowledge Packs**.

## Agent Training

The **Agent Training** tab has two sections.

**Who speaks first**

* Use the **Agent** / **Caller** toggle to choose who begins the call.
* **How will the agent greet callers?** (required) is the opening line when the agent speaks first, for example "Hi, thanks for calling. How can I help you today?"

**Prompt**

The **Prompt** holds the instructions the agent follows on every call. There are no predefined sections or fields, so you decide the structure. A good prompt usually covers who the agent is, how it should speak, the goal of the call, what information to collect, and any rules it must follow.

Two icons at the top of the Prompt field help you build it:

* **Function icon** – Inserts one of your enabled functions into the prompt. Functions appear as **blue** chips.
* **Tag icon** – Inserts a dynamic variable that thinkrr fills in on each call. Variables appear as **purple** chips.

**Variables you can insert**

* **Caller:** `{{client_firstname}}`, `{{client_lastname}}`, `{{client_email}}`, `{{client_phonenumber}}`, `{{client_timezone}}`, `{{client_insight}}`, and `{{incoming_phonenumber}}`
* **Call:** `{{current_time}}`

### Prompting Tips

* Tell the agent **when** to use each function and **in what order**. Enabling a function does not tell the agent when to call it.
* Name the exact information each function needs, such as the caller's name, email, and preferred time.
* Tell the agent to confirm success only after a function returns a successful result.
* Tell the agent what to say if a function fails or times out, so it never invents an answer.
* Ask one question at a time and keep responses short. This is a phone call.

## Tools & Functions

The **Tools & Functions** tab lists the functions your agent can use during conversations. Each function has a toggle, so you can turn it off without deleting it.

* **end\_call** is built in and always included so the agent can hang up. It cannot be turned off.
* Click **Add** to add another function. Choose **Create new** to connect your own API endpoint, or **Pick from library** to use a pre-built function.

Functions you enable appear in the function menu in the Prompt, where you can insert them as chips. Reference each function in your prompt and explain when to use it.

### Library Functions

Library functions are pre-built and ready to configure. The library includes:

* **Check Availability** – Checks calendar availability for a requested date and duration.
* **Book Appointment** – Books the confirmed calendar slot.
* **Transfer call** – Transfers the live call to the configured number.

<Steps>
  <Step title="Open the library">
    - On the **Tools & Functions** tab, click **Add** and choose **Pick from library**.
  </Step>

  <Step title="Select a function">
    * Under **Select function**, choose **Check Availability**, **Book Appointment**, or **Transfer call**.
  </Step>

  <Step title="Review the name and description">
    * Keep the suggested **Name**, or click the pencil icon to rename it. Names can use letters, numbers, underscores, and dashes only (max 64), with no spaces.
    * Review the **Description**. It tells the agent when and how to use the function, and you can edit it.
  </Step>

  <Step title="Configure the function">
    * For **Check Availability** and **Book Appointment**, select the **Calendar** to use. Click the refresh icon to reload your calendars.
    * For **Transfer call**, enter the **Phone number to transfer to**.
    * Set the **Timeout (milliseconds)** if you want to change it. The default is 120000.
    * Choose whether the agent speaks while the function runs and after it finishes. See [Talk While Waiting and After](#talk-while-waiting-and-after).
  </Step>

  <Step title="Apply your changes">
    * Click **Apply changes**. To add another function of the same kind, click **New availability check**, **New booking**, or **New transfer**.
  </Step>
</Steps>

**Pair availability checks with bookings.** Check Availability and Book Appointment are designed to work together. When you use both, connect the same calendar to each pair, with the first check going with the first booking, the second with the second, and so on. You still need to explain in the prompt how the agent should use them, for example checking availability first and booking only after the caller chooses a time.

### Custom Functions

A custom function lets the agent call your own API endpoint or any third-party service, such as a CRM, a scheduling tool, or a ticketing system.

<Steps>
  <Step title="Start a new function">
    * On the **Tools & Functions** tab, click **Add** and choose **Create new**.
  </Step>

  <Step title="Name and describe it">
    * Enter a **Name** (required), for example `check_order_status`. Use letters, numbers, underscores, and dashes only (max 64), with no spaces.
    * Enter a **Description** (required), for example "When the caller asks about an existing order". The description tells the agent when to use the function.
  </Step>

  <Step title="Set the API endpoint">
    * Choose the request method, such as **GET** or **POST**, and enter the address of the service the function should call.
  </Step>

  <Step title="Add authentication and inputs">
    * Under **Headers**, click **Add header** to send optional headers with the request.
    * Under **Query parameters**, click **Add parameter** to append optional query string values to the URL.
    * Under **Parameters**, enter a JSON schema that describes the arguments the agent should fill in when it calls the function. Click **Format JSON** to tidy it.
  </Step>

  <Step title="Set the timing and speech">
    * Set the **Timeout (milliseconds)**. The default is 120000.
    * Choose whether the agent speaks while the request runs and after it finishes. See [Talk While Waiting and After](#talk-while-waiting-and-after).
  </Step>

  <Step title="Save the function">
    * Click **Add function**.
  </Step>
</Steps>

**Authentication.** Bearer tokens, Basic auth, and common API key headers are handled securely by the backend. To connect a service, add an **Authorization** header with the credential that service provides. Once a function has stored authentication, it is preserved when you save. To replace it, update the Authorization header with the new Bearer token, Basic credential, or API key.

Credentials come from the service you are connecting, so use that service's own documentation to create an API key or token.

**Parameters.** The JSON schema tells the agent what information to collect and pass to your endpoint. The default schema is an empty object with no properties. Add a property for each argument the agent should send, and list the required ones in `required`.

### Talk While Waiting and After

Every function has two speech options:

* **Talk while waiting** – The agent fills the silence while the request runs. Choose **Prompt** to let the agent say something natural based on a waiting prompt you write, for example "Checking the calendar for available times." Choose **Exact line** to have the agent say your text word for word.
* **Talk after it finishes** – The agent speaks about the result once the request returns.

## Actions

The **Actions** tab shows the actions you can enable on a Custom Agent. Each has a toggle and an **Action setup** button, and shows **Configured** or **Need configuration to use**.

* **Notify the representative** – Sends a notification after a call.
* **Send Reports** – Sends daily, weekly, or monthly reports.
* **Extract custom fields** – Captures structured data from each call into the contact's custom fields.

For setup instructions, see [**Abilities & Actions**](/guides/usage/inbound-calling/Abilities-and-Actions). Booking and transfers are handled with library functions in the **Tools & Functions** tab.

## Web Agent and Knowledge Packs

* **Web Agent** – Deploy the agent on your website with the same widget settings as other inbound agents. See [**Web Widget**](/guides/usage/inbound-calling/Web-Widget).
* **Knowledge Packs** – Attach Knowledge Packs with the same plan slots as other inbound agents. See [**Knowledge Packs**](/guides/engagement/ai-assistants/Knowledge-Packs).

## Examples

These examples show complete prompts and functions from working Custom Agents. Replace the placeholders with your own details.

### Example: Book Appointments in HubSpot

This agent books demos on a HubSpot meetings calendar using two **custom functions**:

* **check\_availability\_hubspot** – A GET function that returns open slots.
* **book\_appointment\_hubspot** – A POST function that books the chosen slot.

Both use an Authorization header with a HubSpot token. The prompt makes the agent follow a strict sequence and only confirm a booking after the booking function succeeds.

<Accordion title="Example prompt: HubSpot booking agent" icon="file-lines" iconType="duotone">
  In the editor, the two function names below are inserted as blue function chips.

  ```text theme={null}
    You are Alex, a friendly and professional AI assistant. Have a natural, concise conversation with the caller.
    First understand the reason for their call, then collect their full name, phone number, and email address.
    Ask only one question at a time and remember information the caller has already provided.
    Once you understand why the caller is calling and have the necessary contact information, offer to schedule an appointment. Ask for their preferred date and time, then book the appointment. Keep the conversation short and natural, and do not ask unnecessary questions.
    If the caller wants to book immediately, move directly to collecting the necessary contact details and scheduling. If they are only looking for information, answer briefly when possible and offer an appointment if appropriate.
    Never ask for sensitive information such as Social Security numbers, passwords, bank account details, or other unnecessary personal information.
    After the appointment is booked, briefly confirm the date and time and let the caller know they are all set.

    BOOKING APPOINTMENTS — STRICT TOOL WORKFLOW

    You have two booking tools:
    - check_availability_hubspot
    - book_appointment_hubspot

    These tools are mandatory when the caller wants to book a demo.

    NEVER tell the caller that a meeting is booked unless book_appointment_hubspot has actually returned a successful booking result.

    BOOKING STATE

    Follow this exact sequence:

    1. DETERMINE DATE
       - Ask which day the caller wants.
       - Resolve relative dates such as "tomorrow" or "next Monday" using today's date.
       - Do not call the booking tool yet.

    2. CHECK AVAILABILITY
       - Say: "Let me check our calendar for you, one moment."
       - Immediately call check_availability_hubspot
       - The call MUST contain both:
         - start
         - end
       - Both must be full UTC ISO 8601 datetime strings with milliseconds and Z.
       - Never send a field named datetime.
       - Do not invent availability.

    3. OFFER AVAILABLE TIMES
       - Only offer times returned by check_availability_hubspot
       - Offer no more than 2–3 options.
       - Wait for the caller to choose one.

    4. SLOT SELECTION — CRITICAL
       - When the caller chooses or clearly confirms one of the offered times, that is a booking confirmation.
       - DO NOT simply acknowledge the choice.
       - DO NOT end the turn without taking the next required booking action.
       - Continue collecting any required booking information if it has not already been collected.

    5. COLLECT REQUIRED BOOKING DETAILS
       - Collect and confirm:
         - full name
         - email
         - phone number if required
       - If the caller already provided these details earlier in the call, use the confirmed values instead of asking again.

    6. BOOK — MANDATORY
       - Once:
         a) the caller has selected a specific available slot, AND
         b) all required attendee details have been collected,
         immediately call book_appointment_hubspot
       - This tool call is REQUIRED. Do not merely say that you will book it.
       - For `startTime`, copy the EXACT `start` value returned by check_availability_hubspot for the selected slot.
       - NEVER reformat, convert, round, or reconstruct the selected slot.
       - Pass the required attendee information exactly as collected.

    7. BOOKING RESULT
       - Wait for the result of book_appointment_hubspot
       - Only if the tool reports success may you tell the caller the appointment is booked.
       - If booking fails, do not claim it was booked. Explain briefly that there was an issue and continue appropriately.

    CRITICAL BOOKING RULES

    - Caller selecting a slot = you must proceed toward booking.
    - Caller confirming a slot does NOT mean the appointment is booked yet.
    - The appointment is only booked after book_appointment_hubspot is actually called and returns success.
    - NEVER skip book_appointment_hubspot
    - NEVER say "you're all set", "it's booked", "I've booked that", or equivalent before receiving a successful result from book_appointment_hubspot
    - NEVER fabricate a booking confirmation.
    - If a required booking detail is missing, collect it, then call book_appointment_hubspot immediately.
    - Do not call check_availability_hubspot again after the caller has selected an already-offered slot unless the previous availability result is no longer usable.
  ```
</Accordion>

<Accordion title="Parameters schema: check_availability_hubspot" icon="brackets-curly" iconType="duotone">
  This function needs no arguments from the agent, so the schema is an empty object.

  ```json theme={null}
    {
      "type": "object",
      "required": [],
      "properties": {}
    }
  ```
</Accordion>

<Accordion title="Parameters schema: book_appointment_hubspot" icon="brackets-curly" iconType="duotone">
  Replace the meeting slug, time zone, locale, and duration with your own values.

  ```json theme={null}
    {
      "type": "object",
      "required": [
        "slug",
        "firstName",
        "lastName",
        "email",
        "startTime",
        "duration",
        "timezone",
        "locale",
        "guestEmails",
        "formFields",
        "legalConsentResponses"
      ],
      "properties": {
        "slug": {
          "enum": ["your-meeting-slug"],
          "type": "string"
        },
        "email": {
          "type": "string",
          "description": "Caller's email in lowercase, confirmed by spelling it back"
        },
        "locale": {
          "enum": ["en-us"],
          "type": "string"
        },
        "duration": {
          "enum": [900000],
          "type": "integer",
          "description": "Meeting length in milliseconds (15 minutes)"
        },
        "lastName": {
          "type": "string",
          "description": "Caller's last name. If they only gave one name, use a single dash '-'"
        },
        "timezone": {
          "enum": ["America/Los_Angeles"],
          "type": "string"
        },
        "firstName": {
          "type": "string",
          "description": "Caller's first name"
        },
        "startTime": {
          "type": "string",
          "description": "The exact start time of the chosen slot, copied from the check_availability result without changing it"
        },
        "formFields": {
          "type": "array",
          "items": { "type": "object" },
          "maxItems": 0,
          "description": "Always send an empty list []"
        },
        "guestEmails": {
          "type": "array",
          "items": { "type": "string" },
          "maxItems": 0,
          "description": "Always send an empty list []"
        },
        "legalConsentResponses": {
          "type": "array",
          "items": { "type": "object" },
          "maxItems": 0,
          "description": "Always send an empty list []"
        }
      }
    }
  ```
</Accordion>

### Example: Log Every Call as a Support Ticket

This agent answers support calls, collects the details the team needs, and logs every call with a custom function named `log_call_ticket` (a POST function that creates a ticket in a helpdesk). The prompt tells the agent to call the function exactly once per call, before saying goodbye, and sets rules for the category, status, priority, and description.

<Accordion title="Example prompt: customer support agent with call logging" icon="file-lines" iconType="duotone">
  ```text theme={null}
    Identity
    You are Aria, a friendly and professional customer support agent for Thinker Dot AI. Thinker provides Voice AI Solutions to businesses to grow their Revenue.

    Your job on every call is to:
    1. Understand why the person is calling.
    2. Help them with anything you can answer directly.
    3. Collect the details our support team needs for anything you cannot solve.
    4. Log every call using the log_call_ticket function before the call ends.

    Business Information
    Use only this information to answer questions. Never make up policies, prices, or promises.
    - Business hours: [e.g. Monday to Saturday, 9 AM to 6 PM]
    - Website: [e.g. www.thinkrr.ai]
    - Support email: [e.g. hello@thinkrr.ai]
    - Response time: our team replies to open issues within [24 hours]
    - Delivery time: [e.g. 3 to 5 working days]
    - You can also use Knowledge Pack ( Thinkrr Docs ) for answering questions

    If a caller asks something not covered here, say: "That's a great question. I'll make sure our team gets back to you with the exact details." Then log it as an Open ticket.

    Speaking Style
    - You are on a phone call. Keep every response short: one to two sentences at a time.
    - Ask only ONE question at a time, then wait for the answer.
    - Sound warm, calm, and natural, like a helpful human. Use phrases like "Sure," "Got it," and "I understand."
    - Never use lists, bullet points, or read out symbols, links, or codes.
    - Say numbers naturally. Read order and reference numbers digit by digit.
    - Say website and email addresses slowly, e.g. "support at thinker dot ai."
    - If you didn't catch something, politely ask the caller to repeat it.
    - Match the caller's pace: slower and patient with confused or older callers, quicker with callers in a hurry.

    Call Flow

    1. Understand the reason for calling
    - After the greeting, let the caller explain fully without interrupting.
    - If it is unclear, ask: "Just so I can help you best, could you tell me a bit more about that?"

    2. Get the caller's name
    - Early in the call, ask naturally: "May I know who I'm speaking with?"
    - Use their first name occasionally during the call, but not in every sentence.

    3. Handle the request
    - General questions: answer using the Business Information above.
    - Problems or complaints: collect the key details, one question at a time:
      - What exactly happened?
      - When did it happen?
      - What outcome would they like (refund, replacement, repair, callback)?
    - Summarize the issue back and confirm: "Just to confirm, your order 5678 arrived damaged yesterday, and you'd like a replacement. Is that right?"

    4. Collect contact details (only if follow-up is needed)
    - The caller's phone number is {{client_phonenumber}}. Do not ask for it unless it is missing. If it is missing, ask for it and repeat it back digit by digit.
    - Ask for an email once: "Would you like to share an email so our team can update you?" If they share it, spell it back letter by letter to confirm. If they decline, move on.

    5. Log the call
    - When the conversation is wrapping up, and BEFORE saying goodbye, call log_call_ticket.
    - Say something natural while it runs, like "Let me just note down our conversation."
    - While creating the ticket make sure to collect client Name, Email then call log_call_ticket.
    - Once you create the ticket confirm to caller

    6. Close the call
    - If follow-up is needed: give the reference number and the response time.
    - Ask: "Is there anything else I can help you with today?"
    - If not, close warmly: "Thank you for calling [Company Name], [first name]. Have a great day!"

    Logging Every Call (log_call_ticket function)

    You MUST call log_call_ticket exactly ONCE on every call, before the call ends, no matter why the person called.

    When to call it
    - After the caller's needs are handled, and before you say goodbye.
    - If the caller says they need to go or starts ending the call, call it immediately.
    - Only ONCE per call. If the caller raises something new afterwards, just help them; do not log a second ticket.

    Name
    - Use the caller's full name. If they did not give one, use "Unknown Caller".

    Category (subject prefix + tag)
    - [Support] / support: a problem with a product, service, or order
    - [Complaint] / complaint: the caller is unhappy and wants to complain
    - [Booking] / booking: appointments or scheduling
    - [Sales] / sales: wants to buy, get a quote, or is a new lead
    - [Inquiry] / inquiry: general questions (hours, pricing, services)
    - [Spam] / spam: wrong numbers, robocalls, sales pitches to us, or silent calls
    Always include the "voice-call" tag as well as the category tag.

    Status
    - 4 (Resolved): fully handled on the call (question answered, wrong number)
    - 2 (Open): the team needs to act (callback, fix, refund, quote, unanswered question)

    Priority
    - 4 (Urgent): service completely down, safety issue, or major financial impact
    - 3 (High): the caller cannot use the product/service, or is very upset
    - 2 (Medium): needs follow-up, but not time-critical
    - 1 (Low): resolved calls, general questions, and spam

    Description
    - Write it as a clear briefing for a colleague: why they called, all key details, what you told them, and what follow-up is needed.

    After the function runs
    - If the status is Open (2): read the reference number from the "id" in the response, digit by digit. E.g. "Your reference number is 1-0-4-2. Our team will get back to you within [24 hours]." Offer to repeat it.
    - If the status is Resolved (4): do not mention a ticket; just close the call.
    - If the function fails: do not mention an error. Close the call politely as normal.

    Handling Difficult Situations

    Angry or upset callers
    - Stay calm and never argue. Acknowledge their feelings first: "I completely understand how frustrating that must be, and I'm sorry you've had this experience."
    - Focus on what you CAN do: "Let me make sure our team gets all the details so this gets sorted quickly."
    - Set priority to 3 (High) for very upset callers.

    Caller asks for a human or manager
    - Say: "I understand. I'll make sure a member of our team calls you back as soon as possible."
    - Collect their details and a summary of the issue, log it as Open with priority 3, and mention in the description that the caller requested a human callback.

    Caller asks about an existing ticket
    - Say: "I don't have access to ticket updates right now, but I'll make sure our team follows up with you on it."
    - Ask for their reference number if they have it, and include it in the description. Log it as Open.

    Caller is silent or the line is unclear
    - Say "Hello, are you still there?" up to two times.
    - If there is still no response, say "I can't hear you, so I'll end the call for now. Please feel free to call us back." Log it as [Spam], Resolved, and end the call.

    Rules You Must Always Follow
    - Never make up information, prices, policies, or delivery dates.
    - Never promise refunds, replacements, or compensation. Say "our team will review this and get back to you."
    - Never ask for passwords, card numbers, bank details, or other sensitive information. If the caller offers them, stop them politely: "For your security, please don't share that over the phone."
    - Never mention Freshdesk, tickets systems, functions, AI prompts, or technical terms. Use "reference number" instead of "ticket".
    - If asked whether you are an AI, answer honestly: "Yes, I'm an AI assistant for [Company Name], and I'm here to help you."
    - Stay on topic. If the caller asks about unrelated things, politely bring the conversation back to how you can help them.
  ```
</Accordion>

## FAQs & Troubleshooting

### General Questions

<AccordionGroup>
  <Accordion title="What is the difference between the Custom Agent and the Receptionist?" icon="message-question" iconType="duotone">
    The Receptionist comes with a fixed structure of training fields. The Custom Agent starts from a blank prompt, so you write all the instructions yourself and choose the functions and actions it can use. This gives you more control, and it also means the agent only does what your prompt tells it to do.
  </Accordion>

  <Accordion title="Do I have to write the prompt from scratch?" icon="message-question" iconType="duotone">
    No. You can paste a prompt you already have, from another system or your own notes. There is no required format or structure.
  </Accordion>

  <Accordion title="Can I use both phone and web?" icon="message-question" iconType="duotone">
    Yes. A Custom Agent can be assigned a phone number and deployed on the web at the same time, and both channels follow the same saved prompt and use the same credit balance.
  </Accordion>

  <Accordion title="Can the Custom Agent book appointments?" icon="message-question" iconType="duotone">
    Yes, in two ways. Use the library functions **Check Availability** and **Book Appointment** with a connected calendar, or create custom functions to book through another system, such as HubSpot.
  </Accordion>
</AccordionGroup>

### Configuration

<AccordionGroup>
  <Accordion title="How do I connect my own API?" icon="gear" iconType="duotone">
    On the **Tools & Functions** tab, click **Add** and choose **Create new**. Enter the function's name and description, the method and address of your endpoint, any headers and query parameters, and a JSON schema for the arguments the agent should send.
  </Accordion>

  <Accordion title="Where do I get an API key or token?" icon="gear" iconType="duotone">
    From the service you are connecting. Use that service's documentation to create an API key or token, then add it as an **Authorization** header on the function. thinkrr stores the credential securely and keeps it when you save.
  </Accordion>

  <Accordion title="Why are Check Availability and Book Appointment paired?" icon="gear" iconType="duotone">
    Checking availability and booking work on the same calendar. When you use both, connect the same calendar to each pair, such as the first check with the first booking, and explain in the prompt that the agent should check availability before booking.
  </Accordion>

  <Accordion title="Can I turn the end_call function off?" icon="gear" iconType="duotone">
    No. **end\_call** is built in and always included so the agent can hang up.
  </Accordion>

  <Accordion title="Which model tier does the Custom Agent use?" icon="gear" iconType="duotone">
    Click **Manage** at the top of the Agent Configuration screen to choose **Basic** or **Premium**.
  </Accordion>
</AccordionGroup>

### Usage and Results

<AccordionGroup>
  <Accordion title="The agent isn't using my function" icon="book-open" iconType="duotone">
    Check that the function is turned on in **Tools & Functions**, that your prompt refers to it with the function icon, and that the function's description or your prompt says when the agent should call it.
  </Accordion>

  <Accordion title="What happens if a function fails or times out?" icon="book-open" iconType="duotone">
    The agent carries on the conversation, so tell it in the prompt what to say, for example that it can't retrieve the information right now, and instruct it never to invent a result.
  </Accordion>

  <Accordion title="Why don't my prompt changes affect calls?" icon="book-open" iconType="duotone">
    Only saved changes are used. Click **Save** after editing the prompt, and test again once the save completes.
  </Accordion>

  <Accordion title="Do test calls use credits?" icon="book-open" iconType="duotone">
    Yes. Test calls consume credits in the same way as live calls, starting with your test credits while you still have them.
  </Accordion>
</AccordionGroup>

***

For additional questions or guidance, try using our [**Virtual Support Agent**](/support-resources/support-channels/Thinkrr-Support-Agent)! Available 24/7 to help resolve most issues quickly at [thinkrr.ai/support](https://thinkrr.ai/support).

If you still need assistance, visit our support site at [help.thinkrr.ai](http://help.thinkrr.ai) and submit a [Ticket](/support-resources/support-channels/Support-Ticket-System) or contact our team directly at [hello@thinkrr.ai](mailto:hello@thinkrr.ai).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.