> For the complete documentation index, see [llms.txt](https://docs.dapta.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.dapta.ai/ai-text-agents/setting-up-your-text-agent/schedule-appointments-with-dapta-calendars.md).

# Schedule Appointments with Dapta Calendars

Let your Text Agent offer your real open times and book the appointment inside the chat. Add the Schedule appointments action, pick the meeting, and every booking lands in your Dapta Calendars account

Your Text Agent can book meetings for you while it chats. It reads your real availability in **Dapta Calendars**, offers the times that are actually free, and books the one your customer picks. The customer never leaves the conversation and never gets a booking link.

{% embed url="<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCy5rSNtQmtqYCGzJlNEB%2Fuploads%2Fgit-blob-b25c560bd5a92d776120cb78f6737cab715991dc%2Ftext-agents-calendars.mp4?alt=media>" %}

{% file src="/files/9t5h9Y5SnNfYNIe9Ycnv" %}

It takes one action, **Schedule appointments (Dapta Calendars)**. There is no API key to paste and no ID to copy: Dapta connects the agent to your workspace's Calendars account for you.

***

## Before you start

| You need                                                                  | Why                                                                                                                                                            |
| ------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| A **V2 Text Agent**                                                       | The action is part of the current Text Agents.                                                                                                                 |
| **Admin** or **owner** access to your workspace's Dapta Calendars account | Only they can connect an agent to it. If you are a member, the action tells you so, and a teammate who is an admin can add it for you.                         |
| A **meeting** in Dapta Calendars                                          | A meeting is what the agent books: a name and a duration, like *Discovery call · 30 min*. If you don't have one yet, the action creates it with you in Step 2. |

***

## Set it up

**Step 1:** Open your Text Agent and go to **Settings**. Open **Agent Actions**, click **+ Add New Action** and choose **Schedule appointments (Dapta Calendars)**.

<figure><img src="https://3835013762-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCy5rSNtQmtqYCGzJlNEB%2Fuploads%2Fgit-blob-b2f235f4994baebb357ece3cf97779c922a35ecb%2Ftext-agents-calendars-01-add-action.png?alt=media" alt="The Add New Action menu of a Text Agent, with Schedule appointments (Dapta Calendars) at the end of the list"><figcaption></figcaption></figure>

***

**Step 2:** Choose the **Meeting** the agent will book.

{% tabs %}
{% tab title="You already have meetings" %}
Pick one from the **Meeting** list. The list is read live from your Dapta Calendars account, so every agent and every channel books against the same availability.
{% endtab %}

{% tab title="Your first meeting" %}
If your Calendars account has no meetings yet, the action creates the first one with you before it shows the form:

1. Type a **Meeting name**, for example `Discovery call`.
2. Pick a **Duration**.
3. Click **Next**.

Dapta creates the meeting, plus working hours of Monday to Friday, 9:00 to 17:00, in your time zone. You only do this once. Later you can add more meetings and change your hours in Dapta Calendars.
{% endtab %}
{% endtabs %}

***

**Step 3:** Check the **Default time zone**. It is the zone the agent offers and confirms times in, filled from your browser the first time you open the action.

If it is different from your calendar's time zone, your working hours stay as they are and the agent converts them for the customer. A 9:00 slot on a Bogotá calendar is offered as 8:00 to an agent set to Mexico City.

{% hint style="success" %}
**Want times in each customer's own time zone?** Add to the agent's **Important Instructions** that it must ask where the customer is before offering times. When the customer says where they are, the agent uses that zone for the times it offers and for the confirmation.
{% endhint %}

***

**Step 4 (optional):** In **Additional instructions**, write *when* the agent may offer times and book. It already knows *how*: check the calendar first, never invent a time, and only book a time the customer confirmed. What it can't know is your business rule:

> Offer times only after the customer says which service they need. Ask for their full name before booking.

<figure><img src="https://3835013762-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCy5rSNtQmtqYCGzJlNEB%2Fuploads%2Fgit-blob-9c1039bb7f2afa14efdf437b5bdbd213f3146d10%2Ftext-agents-calendars-02-action-form.png?alt=media" alt="The Schedule appointments form with a meeting selected, the default time zone and additional instructions filled in"><figcaption></figcaption></figure>

What you write here is **added** to the agent's built-in scheduling rules and never replaces them. Even with instructions, the agent only offers times it found in your calendar.

***

**Step 5:** Click **Save**. The action appears in **Agent Actions** as **Schedule appointments (Dapta Calendars)**. Use the **pencil icon** to change the meeting, the time zone or the instructions, and the **bin icon** to remove scheduling from the agent.

Then click **Save Agent** and **Publish**. Scheduling runs on the published agent, so publish before you test it.

<figure><img src="https://3835013762-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCy5rSNtQmtqYCGzJlNEB%2Fuploads%2Fgit-blob-efac196ac6e52f9e8de419af5c3dfe7a0b2b73d0%2Ftext-agents-calendars-03-action-saved.png?alt=media" alt="The Agent Actions list with end_conversation and Schedule appointments (Dapta Calendars)"><figcaption></figcaption></figure>

{% hint style="info" %}
An agent books **one** meeting, so it has one scheduling action. Once it is added, **Schedule appointments (Dapta Calendars)** no longer appears in **+ Add New Action**: change it with the pencil icon instead.
{% endhint %}

***

## Test it in the Playground

{% hint style="info" %}
**Publish first.** In a draft (**Playground (Draft)**), the agent can't see your calendar yet and answers without real times.
{% endhint %}

**Step 1:** Open the **Test Agent** tab and ask for an appointment the way a customer would, for example *"Hi! Can I book a cleaning next Tuesday morning?"* The agent checks your calendar and answers with real open times.

<figure><img src="https://3835013762-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCy5rSNtQmtqYCGzJlNEB%2Fuploads%2Fgit-blob-35a8bd1b3e96239c180c60f4aa1e19ee82a94330%2Ftext-agents-calendars-04-times-offered.png?alt=media" alt="The agent offering open times for the day the customer asked about"><figcaption></figcaption></figure>

**Step 2:** Pick one of the times and give the agent your name and email. It books the appointment and confirms it.

<figure><img src="https://3835013762-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCy5rSNtQmtqYCGzJlNEB%2Fuploads%2Fgit-blob-4ad8c52572d69c454bff31d806da2ef22229f5eb%2Ftext-agents-calendars-05-booked.png?alt=media" alt="The agent confirming the appointment with its date, time and the email the confirmation goes to"><figcaption></figcaption></figure>

{% hint style="warning" %}
The Playground books **real appointments** in your Dapta Calendars account, and the confirmation goes to the email you type. Cancel your test bookings in Dapta Calendars when you're done.
{% endhint %}

***

## What the agent does in a conversation

The action gives your agent two abilities, and it decides which one to use from the conversation:

| The agent…                | What happens                                                                                                                                                                                          |
| ------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Checks availability**   | Reads the free slots of your meeting in Dapta Calendars and offers them in the default time zone, or in the customer's own zone when they said where they are. It always checks before naming a time. |
| **Books the appointment** | Once the customer confirms a time, it books exactly that slot and answers with the confirmation.                                                                                                      |

A normal conversation goes: the customer asks, the agent checks and offers, the customer picks, the agent books. If the customer asks about another day, the agent checks again.

To book, the agent needs the customer's **full name** and **email address**, and asks for whichever it doesn't have. A phone number is optional.

When the booking is created, Dapta Calendars sends a **confirmation email with a calendar invite** to the customer and to you, and the appointment shows up in your Calendars account.

{% hint style="info" %}
**If someone takes the slot first**, the agent tells the customer, checks again and offers fresh times. It never offers the slot that was just taken.
{% endhint %}

***

## What lives where

Scheduling spans two products. Knowing which one owns what tells you where to change something.

| Product                                   | Owns                                                                                                                                          |
| ----------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| **Dapta Calendars** (`calendar.dapta.ai`) | Your scheduling account: meetings, working hours, calendar sync and every booking made. One account per workspace, shared by all your agents. |
| **Your Text Agent**                       | Which meeting this agent books, the time zone it offers times in, and your rule for when it may offer times or book.                          |

The action connects the two: it reads your meetings while you set it up, and reads your availability and creates bookings while a conversation runs. You never paste or manage a credential.

{% hint style="info" %}
**Voice Agents** schedule the same way, with the same account, meetings and availability. See [Schedule Appointments with Dapta Calendars](/ai-voice-agents/agent-actions/schedule-appointments-with-dapta-calendars.md) for Voice Agents.
{% endhint %}

***

## Requirements and limits

|                                 | Detail                                                                                                                           |
| ------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| **Agent version**               | V2 Text Agents.                                                                                                                  |
| **Permission**                  | An admin or owner of your workspace's Dapta Calendars account sets the action up. Once it's saved, the agent works for everyone. |
| **Actions per agent**           | One, bound to one meeting. To book different meetings, use different agents.                                                     |
| **Working hours**               | Come from your Dapta Calendars account: Monday to Friday, 9:00 to 17:00 unless you change them.                                  |
| **Minimum notice**              | **2 hours** by default, so the agent won't offer a slot sooner than that. You can change it per meeting in Dapta Calendars.      |
| **How far ahead**               | The agent checks the dates the customer asks about, up to two months ahead in one look.                                          |
| **To book**                     | The customer's full name and email. Phone is optional.                                                                           |
| **Rescheduling and cancelling** | From the confirmation email or in Dapta Calendars, not through the agent.                                                        |

***

## Troubleshooting

<details>

<summary>Schedule appointments isn't in the + Add New Action menu</summary>

The agent already has a scheduling action: find it in **Agent Actions** and use the **pencil icon** to change it. If the agent has none, check that it is a V2 Text Agent.

</details>

<details>

<summary>In the Playground, the agent says it can't check availability</summary>

The agent is still a draft: the Playground header reads **Playground (Draft)**. Click **Save Agent** and **Publish**, then test again.

</details>

<details>

<summary>The agent says it has no times available</summary>

Check in Dapta Calendars that the meeting has working hours on the days the customer is asking about. Remember the 2-hour minimum notice too: on a same-day request, the next two hours are left out on purpose.

</details>

<details>

<summary>The agent offered a few times, but the customer wanted a later one</summary>

When a day has many open slots, the agent offers a selection rather than all of them. Ask it for a later time and it checks that part of the day again.

</details>

<details>

<summary>The agent offered times in the wrong time zone</summary>

Times use the action's **Default time zone** unless the customer says where they are in the conversation. A city written in the agent's prompt or in your company description is not used. To always work in the customer's zone, add to the **Important Instructions** that the agent must ask where the customer is before offering times.

</details>

<details>

<summary>The meeting list is empty, or the meeting I picked disappeared</summary>

The list is read live from Dapta Calendars. If the meeting was deleted there, the action clears it and asks you to pick again, so the agent never points at a meeting that no longer exists. Pick another one, or create one in Dapta Calendars, then click **Save Agent** and **Publish**.

</details>

<details>

<summary>"Admin access required"</summary>

You are a member, not an admin or owner, of your workspace's Dapta Calendars account. Ask an admin or owner to add the action. Once it's saved, the agent works for everyone.

</details>

***

## Related pages

{% content-ref url="/pages/iaRYjowYKymtLt0oWM53" %}
[Text Agent Actions](/ai-text-agents/setting-up-your-text-agent/text-agent-actions.md)
{% endcontent-ref %}

{% content-ref url="/pages/6oDVCzyHD3gYg9lsWKDJ" %}
[Playground: Testing your Text AI Agents](/ai-text-agents/setting-up-your-text-agent/playground-testing-your-text-ai-agents.md)
{% endcontent-ref %}

{% content-ref url="/pages/YpahcN0m9n2lVoeGmx0T" %}
[Schedule Appointments with Dapta Calendars](/ai-voice-agents/agent-actions/schedule-appointments-with-dapta-calendars.md)
{% endcontent-ref %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.dapta.ai/ai-text-agents/setting-up-your-text-agent/schedule-appointments-with-dapta-calendars.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
