> 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-notetaker/assistants.md).

# Assistants

AI Notetaker assistants pull the information you choose out of every recorded meeting and send it to Slack, Google Sheets, HubSpot, a webhook or a Dapta flow. How to set one up in a minute from the Pa

An **assistant** reads each recorded meeting, extracts the information you care about, and sends it where your team already works: a Slack channel, a Google Sheet, a HubSpot contact or deal, your own webhook or a Dapta flow. Nobody has to copy notes by hand.

|                 |                                                                                                                                                                                                 |
| --------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Instruction** | The fields to extract from the transcript, each with its own rule. *BANT qualification*, for example, extracts Budget, Authority, Need and Timeline. One instruction can power many assistants. |
| **Assistant**   | An instruction, the meetings it runs on and where it sends the result. It runs on its own after each meeting.                                                                                   |

Open **AI Notetaker** and go to the **Assistants** tab. It has three views: **My assistants**, **Instruction library** and **Activity**. Click **How it works** for a four-step guided tour.

{% hint style="info" %}
The **Assistants** tab needs access to assistants, which admins have. If you don't see it, ask an admin of your workspace.
{% endhint %}

***

## Set one up from the Panel

The quickest way to start is on the **Panel**, under **Automate your meetings**. Each tile sends every meeting to one tool:

| Tile              | What arrives                                 |
| ----------------- | -------------------------------------------- |
| **Slack**         | A message in your channel after each meeting |
| **HubSpot**       | A note on the contact or deal                |
| **Google Sheets** | A new row for every meeting                  |

**Step 1:** Click a tile. Dapta asks **What do you want to pull out of your meetings?**

***

**Step 2:** Write it in your own words, for example *budget, who decides, objections and close date*, or tap one of the **Ideas to start**. Click **Generate fields**.

***

**Step 3:** Dapta turns your words into a list of fields, each with a **Field name** and a **What to look for in the meeting (optional)**. Rename, **Add field** or **Remove field** until the list is right. **Edit text** takes you back to your words.

***

**Step 4:** Click **Continue with Slack** (or HubSpot, or Google Sheets). Your fields are saved as a new instruction under **My instructions**, and the assistant wizard opens with that instruction and the tool already chosen, on the first step left to complete: connecting the account if it isn't connected yet, then choosing the channel, sheet or record. Click **Save**.

Prefer Dapta's ready-made instruction for that tool? Click **Use the recommended template** instead of writing your own.

A tile shows **Active** once an assistant sends to that tool, and the whole strip goes away when all three are active. You see it if you can create assistants. On a phone, only the Slack tile shows.

***

## Start from a template

Under **Quick start templates**, click **Activate** on a template. The wizard opens with the instruction and the destination already chosen.

| Template               | Instruction        | Sends to                    |
| ---------------------- | ------------------ | --------------------------- |
| **Retention watchdog** | Churn risk alerts  | A Slack channel             |
| **BANT qualifier**     | BANT qualification | HubSpot, as a note          |
| **Task manager**       | Next steps         | Google Sheets, as a new row |

***

## Create an assistant

Click **Create assistant**. The wizard has three steps.

**Step 1: Basics**

| Field                               | What to enter                                                                                                                                                                               |
| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Assistant name**                  | A name your team will recognise                                                                                                                                                             |
| **Instruction**                     | A Dapta instruction or one of yours. **Create new instruction** builds one without leaving the wizard.                                                                                      |
| **Meeting scope**                   | **Only meetings on my calendar**, or **All workspace meetings** to run on every recorded meeting in the workspace                                                                           |
| **Meeting title filter (optional)** | Keywords separated by commas. The assistant runs only when the meeting title contains at least one of them, ignoring capitals and accents. Leave it empty to run on every meeting in scope. |
| **Notify me if the meeting fails**  | Off by default. When it's on, the assistant also sends an alert to its destinations when a meeting in its scope couldn't be recorded. See [Failure alerts](#failure-alerts).                |
| **Assistant avatar**                | One of the Dapti images, or **Upload custom image** (up to 512 KB)                                                                                                                          |

For example, the filter `demo, discovery` runs on *Acme Corp demo* and *Discovery call with Jane Doe*, and skips *Weekly team sync*.

***

**Step 2: Integration**

Tap the tools this assistant should send to. You can pick more than one, and the same extraction goes to each.

| Tool                                      | What you set here                                                                                                                                                         |
| ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Slack**, **Google Sheets**, **HubSpot** | The **Connected account** (or **Connect new account**) and the **Destination action**: **Post in channel**, **Append to sheet**, **Create note** or **Update properties** |
| **Webhook**                               | The **Webhook URL** and, if your endpoint needs them, **Headers (optional)**                                                                                              |
| **Dapta Flow**                            | The flow to run, under **Dapta flow**                                                                                                                                     |

***

**Step 3: Destination setup**

| Destination         | What you set here                                                                                                                                                                                                                |
| ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Slack               | The **Slack channel** and the message. See [The Slack message](#the-slack-message).                                                                                                                                              |
| Google Sheets       | **Choose spreadsheet**, the **Sheet tab**, then **Map instruction fields to columns**                                                                                                                                            |
| HubSpot             | The **HubSpot record type**: **Contact** or **Deal**. Dapta finds the record by the email of the meeting's attendees, leaving out the calendar owner. With **Update properties**, also **Map instruction fields to properties**. |
| Webhook, Dapta Flow | **What to send**: tick the instruction fields that go in the payload, and add meeting details with **Add extra field**                                                                                                           |

Click **Save**. The assistant appears under **My assistants**, switched on, with its instruction, scope and creator, and a **Failure alerts** badge if you turned them on. Use its switch to pause it. Only the person who created an assistant can **Edit** or **Delete** it.

### Try it right away

When you save a new assistant and your workspace has a recent meeting that already ended, Dapta asks **Try your assistant now?** Click **Try it** to run the assistant on that meeting and send the result to its destination, for real. Then check the channel, record or sheet to see what your team will get after every meeting. **Not now** skips the test; the assistant still runs on your next meetings.

***

## The Slack message

Under **Message content**, the **Message template** decides what the assistant posts. Click a variable under **Insert placeholder** to add it to the message:

* **Meeting info**: meeting title, start, duration, recording link, video call link, host email and name, participants, summary, tasks, decisions, key topics, stakeholders, sales tips, call insights, meeting status, disconnect reason, assistant name and instruction name.
* **Extracted data**: the fields of the instruction.

**Use suggested layout** writes one block per field for you, which you can then edit. If you leave the template empty, the post uses the default layout, also one block per field. **Message preview** shows how the post will look in the channel.

***

## Send to a webhook or a Dapta flow

After each meeting, the assistant sends a `POST` request with a JSON body to your URL.

* The **Webhook URL** must start with `https://` and be reachable from the internet. Any `2xx` response counts as delivered, redirects are not followed, and a request that takes longer than 30 seconds fails.
* Use **Headers (optional)** for authentication, for example `Authorization` with `Bearer …`. API keys and header values are hidden after you save. Leave them as they are to keep them, or type a new value to replace them.
* **Dapta Flow** lists only Flow Studio flows that start with a POST trigger. If you have none yet, create one first: see [Setting Up Triggers in Flow Studio](/flow-studio/setting-up-triggers-in-flow-studio.md). The flow receives the same body, plus a `flow` object.
* If your server only accepts known IP addresses, allowlist Dapta's: see [Webhook Set Up](/integrations/webhook-set-up.md).

### Example body

A shortened example for an assistant using *BANT qualification*. The values are placeholders.

```json
{
  "event": "assistant.run",
  "agent": { "id": "a1b2c3", "name": "BANT qualifier" },
  "instruction": { "id": "d4e5f6", "key": "bant", "name": "BANT qualification" },
  "meeting": {
    "id": "g7h8i9",
    "call_id": "g7h8i9",
    "title": "Discovery call with Acme Corp",
    "started_at": "2026-10-06T15:00:00.000Z",
    "url": "https://app.dapta.ai/…",
    "date": "2026-10-06T15:00:00.000Z",
    "duration_minutes": "32",
    "recording_url": "https://…",
    "meeting_url": "https://meet.google.com/abc-defg-hij",
    "host_email": "you@company.com",
    "host_name": "John Doe",
    "participants_text": "lead@acme.io, you@company.com",
    "summary": "Acme Corp wants every inbound lead called back within five minutes."
  },
  "data": {
    "budget": "About US$2,000 a month",
    "authority": "Jane Doe, Head of Sales, signs off",
    "need": "Call back every inbound lead within five minutes",
    "timeline": "Pilot in November"
  }
}
```

| Field         | What it holds                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `event`       | Always `assistant.run`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| `agent`       | The assistant's `id` and `name`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| `instruction` | The instruction's `id`, `key` and `name`. `key` names a Dapta instruction, such as `bant`, and is `null` for your own instructions.                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| `meeting`     | `id` and `call_id` identify the meeting. Also its `title`, start (`started_at`, `date`), `duration_minutes`, the link to the meeting in Dapta (`url`, `dapta_url`), the `recording_url`, the video call link (`meeting_url`), the host (`host_email`, `host_name`), and the participants: `participants` as the call captured them, whose format varies, and `participants_text` as a comma-separated list. Details you add with **Add extra field** appear here under their own name, such as `summary`, `tasks` or `key_topics`. A value Dapta doesn't have can be missing or empty. |
| `data`        | The instruction fields you ticked under **What to send**, keyed by field                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| `flow`        | Dapta Flow only: the flow's `id` and `name`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |

***

## Failure alerts

With **Notify me if the meeting fails** on, the assistant tells you when a meeting it would have run on, in its scope and matching its title filter, ends with nothing to extract:

| What happened                                                                   | The alert says                              |
| ------------------------------------------------------------------------------- | ------------------------------------------- |
| Nobody let the bot in from the waiting room                                     | *The bot was not admitted to the meeting*   |
| The meeting wasn't recorded, for example because nobody joined or everyone left | *The meeting was not recorded*              |
| The meeting was recorded but nobody spoke                                       | *The meeting was recorded but nobody spoke* |

Technical errors of the bot itself don't send an alert. The assistant sends one alert per meeting at most, to its own destinations, not by email:

* **Slack** posts a short message with what happened, why and when, instead of the extracted fields.
* **Webhook** and **Dapta Flow** receive a `POST` with `event` set to `assistant.meeting_failed`. See the example below.
* **HubSpot** adds a note to the matching record, if Dapta finds one. An **Update properties** destination gets no alert.
* **Google Sheets** adds a row only when the sheet maps meeting details, such as the meeting title, to its columns.

### Example alert body

A shortened example. The values are placeholders.

```json
{
  "event": "assistant.meeting_failed",
  "agent": { "id": "a1b2c3", "name": "BANT qualifier" },
  "meeting": {
    "id": "g7h8i9",
    "call_id": "g7h8i9",
    "title": "Discovery call with Acme Corp",
    "started_at": "2026-10-06T15:00:00.000Z",
    "url": "https://app.dapta.ai/…",
    "status": "…",
    "meeting_url": "https://meet.google.com/abc-defg-hij",
    "host_email": "you@company.com",
    "host_name": "John Doe",
    "participants_text": "lead@acme.io, you@company.com"
  },
  "failure": {
    "kind": "not_admitted",
    "reason": "not_admitted",
    "message": "The bot was never admitted from the waiting room, so the meeting was not recorded."
  }
}
```

| Field             | What it holds                                                                              |
| ----------------- | ------------------------------------------------------------------------------------------ |
| `failure.kind`    | `not_admitted`, `no_recording` or `silent`                                                 |
| `failure.reason`  | A short code for the cause. When nothing more specific is known, the same value as `kind`. |
| `failure.message` | A sentence that explains what happened, ready to show to a person. Always in English.      |

There's no `instruction` or `data` in an alert, because nothing was extracted. A Dapta Flow also receives the `flow` object.

***

## Instructions

Instructions live in the **Instruction library**:

* **Dapta instructions** are ready-made: *BANT qualification*, *Churn risk alerts*, *Buying objections*, *Next steps*, *Budget summary* and *Candidate profile*. They're shared templates. To change one, click **Duplicate and edit**.
* **My instructions** are yours. Click **Create custom instruction**: in **Basics**, give it a name and a short description; in **Fields**, add each field with a **Field label** and an **Extraction instruction**, then **Add another field** for the next one.

For example, a field labelled *Software name* with the extraction instruction *Identify the exact platform name (e.g. QuickBooks, Xero, SAP).*

***

## Activity

**Activity** lists the last 100 assistant runs in your workspace, with **When**, **Assistant**, **Instruction**, **Status** and **Meeting call**. A failed run says why, for example when a Slack or HubSpot connection needs to be reconnected.

A failure alert shows in the **Instruction** column as **Alert: the bot was not admitted**, **Alert: the meeting was not recorded** or **Alert: silent meeting**.

***

## Next steps

{% content-ref url="/pages/hj4OdtQSW9BNWwiUouo9" %}
[Meetings](/ai-notetaker/meetings.md)
{% endcontent-ref %}

{% content-ref url="/pages/Rs2yZalxPGbk85GDTlyt" %}
[Meeting bot settings](/ai-notetaker/meeting-bot-settings.md)
{% endcontent-ref %}

{% content-ref url="/pages/AAvv9wLuzQ2ZGvTY9w6W" %}
[Sales Meetings](/dapti/capabilities/sales-meetings.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-notetaker/assistants.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.
