> 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 conversation. Add the Schedule appointments action, pick the meeting, and the agent handles availability and booking

**Schedule appointments** connects your Text Agent to **Dapta Calendars**, Dapta's own scheduling product. During a conversation the agent reads your real availability, offers the times that are actually free, and books the appointment — without leaving the chat and without sending the customer a booking link.

You add it as a single action. There is no credential to paste and no ID to copy: Dapta sets up your Calendars account the first time you open the action.

{% hint style="info" %}
You need to be an **admin** or **owner** of your workspace's Dapta Calendars account to set this action up. If you are not, the action will tell you and you can ask a teammate who is.
{% endhint %}

***

**📘 What you'll learn in this document:**

* **Step 1:** Add the **Schedule appointments** action to your Text Agent.
* **Step 2:** Create or choose the **meeting** the agent will book.
* **Step 3:** Optionally tell the agent **when** it is allowed to offer times and book.
* **Step 4:** Test the whole conversation in the **Playground**.
* **How it works:** what the agent does at runtime, and what lives in Dapta Calendars.

***

#### ➕ Step 1: Add the action

1. Open your **Text Agent** and go to the **Settings** tab.
2. Scroll to the **Agent Actions** section and click **+ Add New Action**.
3. 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-a7a1ecf4f4010c4e629e717628a21c6798736a7c%2Fcalendars-action-picker.png?alt=media" alt="The Add New Action menu with Schedule appointments (Dapta Calendars) at the bottom"><figcaption></figcaption></figure>

{% hint style="info" %}
An agent can have this action **once**. Once it is added, the option disappears from the **+ Add New Action** menu — to change the meeting or the instructions, click the **pencil icon** on the existing action instead.
{% endhint %}

***

#### 🗓️ Step 2: Create or choose the meeting

A **meeting** is what the agent books: a name and a duration — for example *Discovery call · 30 min*. It lives in your Dapta Calendars account, so every agent and every channel books against the same availability.

{% tabs %}
{% tab title="First time" %}
If your account has no meetings yet, the action walks you through creating one before showing the form:

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

Dapta creates the meeting, plus default **working hours** of Monday to Friday, 9:00 to 17:00, in your time zone. You only do this once — from then on the action opens straight on the form.

{% hint style="info" %}
You can create more meetings and change your working hours later in **Dapta Calendars**. The action creates the first one so you can finish setting up your agent in one sitting.
{% endhint %}
{% endtab %}

{% tab title="Already set up" %}
If your account already has meetings, the action opens directly on the form. Pick one from the **Meeting** dropdown — the list is read live from your Dapta Calendars account.

<figure><img src="https://3835013762-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCy5rSNtQmtqYCGzJlNEB%2Fuploads%2Fgit-blob-f1d66ca6d61f1394ee775afa1e5a144602cf136f%2Fcalendars-meeting-dropdown.png?alt=media" alt="The Meeting dropdown open, showing Discovery call · 30 min"><figcaption></figcaption></figure>
{% endtab %}
{% endtabs %}

Under the dropdown you'll see the time zone the agent will offer times in, and a link to **Dapta Calendars** where you manage calendar sync, meetings and time zones.

***

#### ✍️ Step 3: Add instructions (optional)

The agent already knows **how** to schedule: check the calendar first, never invent a time, only book a time the customer confirmed. You don't need to write any of that.

**Additional instructions** are for the **when** — the business rule that has to be true before this particular agent offers times or books:

> Only offer times once the lead is qualified: 10+ employees and a use case they confirmed. Ask for the company 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-74c4e37da9402d9ac364ee48fb7fbaad29747521%2Fcalendars-action-modal.png?alt=media" alt="The Schedule appointments form with a meeting selected and additional instructions filled in"><figcaption></figcaption></figure>

{% hint style="success" %}
What you write here is **added** to the agent's built-in scheduling rules, never replaces them. Even with instructions, the agent can only offer times it actually found in your calendar.
{% endhint %}

Click **Save**. The action appears in the **Agent Actions** list. Click **Save Agent** to save the draft, then **Publish** to make it live.

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

***

#### 🛝 Step 4: Test it in the Playground

Open the **Test Agent** tab and ask for an appointment the way a customer would. The agent reads 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-2fc84289789a3768e8f8fa45f5dbddd70e0707bd%2Fcalendars-conversation-times.png?alt=media" alt="The agent offering three open times for a specific date in the customer&#x27;s time zone"><figcaption></figcaption></figure>

Pick one of the offered times and give it the details it asks for. The agent books the appointment and confirms it with a booking reference.

<figure><img src="https://3835013762-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCy5rSNtQmtqYCGzJlNEB%2Fuploads%2Fgit-blob-decf8991f333ee66ca65b3747f85783339224f04%2Fcalendars-conversation-booked.png?alt=media" alt="The agent confirming the appointment with date, time, location and booking reference"><figcaption></figcaption></figure>

{% hint style="info" %}
The Playground books **real appointments** in your Dapta Calendars account. Cancel your test bookings in Dapta Calendars when you're done.
{% endhint %}

***

## How it works at runtime

One 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 for your chosen meeting from Dapta Calendars and offers them in your time zone. It does this before naming any time — it never invents or promises a slot it hasn't seen. |
| **Books the appointment** | Once the customer confirms a specific time, it books exactly that slot and answers with the confirmation details.                                                                              |

A normal conversation uses both, in that order: the customer asks, the agent checks and offers, the customer picks, the agent books. If the customer asks again for a different day, the agent checks again.

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

***

## The parts involved

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

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

The action is the bridge: it reads your meetings when you configure it, and reads your availability and writes bookings while a conversation is running. Authorization is handled for you — you never paste or manage a credential.

{% hint style="info" %}
Voice Agents schedule through **Cal.com** instead. The two are independent: an availability change in Dapta Calendars does not affect a Voice Agent, and vice versa.
{% endhint %}

***

## Requirements and limitations

| Requirement                     | Detail                                                                                                                                             |
| ------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Agent version**               | V2 Text Agents only.                                                                                                                               |
| **Permission**                  | Only an admin or owner of your workspace's Dapta Calendars account can set the action up.                                                          |
| **Actions per agent**           | One **Schedule appointments** action per agent, bound to one meeting. To book different meetings, use different agents.                            |
| **Working hours**               | Availability comes from the working hours on your Dapta Calendars account — Monday to Friday, 9:00 to 17:00 by default.                            |
| **Time zone**                   | Set the first time you open the action, from your browser. Change it in Dapta Calendars.                                                           |
| **Minimum notice**              | A new meeting requires **2 hours** notice by default, so the agent won't offer a slot sooner than that. Adjustable per meeting in Dapta Calendars. |
| **Rescheduling and cancelling** | Done from the confirmation email or in Dapta Calendars, not by the agent.                                                                          |

***

## Troubleshooting

<details>

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

Check in Dapta Calendars that the meeting has working hours covering the days the customer is asking about, and remember the 2-hour minimum notice — on a same-day request, the next couple of hours are filtered out by design.

</details>

<details>

<summary>The agent offered times, but the customer wanted a later one it didn't mention</summary>

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

</details>

<details>

<summary>The meeting dropdown 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 the selection and asks you to pick again — so an agent is never left pointing at a meeting that no longer exists. Pick another meeting, or create one in Dapta Calendars, then **Save Agent** and **Publish**.

</details>

<details>

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

Your user is a member, not an admin or owner, of your workspace's Dapta Calendars account. Ask an admin or owner to add the action to the agent — 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 %}


---

# 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 dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

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

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
