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

# Messaging

> Send and receive messages from the inbox

## When you can send messages

You can send messages when:

* The conversation is **active** (not ended)
* No workflow is running, or the workflow is in **handoff** or **failed** state

If a workflow is running, the input is disabled. Click **Handoff** to take control. See [Automation and handoff](/docs/platform/inbox/automation).

## Message types

| Type          | Max size | Notes                                    |
| ------------- | -------- | ---------------------------------------- |
| Text          | —        | Enter to send, Shift+Enter for newlines  |
| Image         | 5 MB     | Via file picker, drag-and-drop, or paste |
| Video         | 16 MB    |                                          |
| Audio         | 16 MB    |                                          |
| Document      | 100 MB   |                                          |
| Voice message | —        | Record from browser mic                  |

You can also reply to specific messages (quoted replies). Reactions from contacts are shown as emoji badges on the target message.

## Interactive messages

Send interactive WhatsApp messages via the `+` attachment menu:

| Type          | Details                                                                                                   |
| ------------- | --------------------------------------------------------------------------------------------------------- |
| Buttons       | Body + up to 3 reply buttons (max 20 chars each). Optional header (text/image/video/document) and footer. |
| List          | Body + sections with up to 10 total rows. Each row has a title and optional description.                  |
| CTA URL       | Body + button with text and URL. Optional header and footer.                                              |
| WhatsApp Flow | Select a published Flow, set body, header, footer, and CTA button text.                                   |

## Quick replies

Saved message templates you insert into the composer with a `/` shortcut.

Type `/` followed by the shortcut in the message input. The picker filters as you type — shortcut prefix matches rank first, then name prefix, then any substring. Select one and its body replaces the `/shortcut` token.

Manage quick replies from **Quick replies** in the sidebar. Each one has:

* **Name** — up to 120 characters
* **Shortcut** — up to 40 characters, lowercase letters, numbers, hyphens, and underscores only
* **Body** — up to 10,000 characters
* **Visibility** — `personal` (only you) or `shared` (everyone in the project)

Shortcuts are unique per project.

### Variables

Bodies can include variables that resolve against the conversation's contact when inserted. Type `{{` in the body editor to pick one.

| Variable                   | Resolves to                              |
| -------------------------- | ---------------------------------------- |
| `{{contact.first_name}}`   | First word of the contact's display name |
| `{{contact.name}}`         | Contact's display name                   |
| `{{contact.phone_number}}` | Contact's phone number                   |

If the contact has no display name, `contact.first_name` and `contact.name` fall back to the phone number. Any other variable is rejected when saving.

### AI prompts

Bodies can also include prompts that an AI fills in when the reply is inserted. Type `{{` in the body editor and pick **AI prompt**, or write the syntax directly:

```text theme={null}
Your refund ID is {{prompt: "Find the refund ID in this conversation"}}.
```

The prompt text is a JSON string — use `\"` for a literal quote.

When you insert the reply, each prompt section shows a generating placeholder in the composer and is replaced with the generated text. Sending and voice recording are blocked while generation is running.

What the AI can use:

* The recent messages of the current conversation
* Read-only inbox lookups (listing conversations, reading conversation messages)
* Public web search, for current or public facts only — never for customer-specific data such as orders, refunds, or account details

Generated text is written to fit the surrounding sentence: it matches the capitalization, spacing, and punctuation around the slot, and the text outside the slot is never changed. If essential context is missing, the AI returns a short clarification request instead of inventing a value.

Limits:

* Up to 10 prompts per reply
* Up to 2,000 characters per prompt
* Prompt text cannot be empty
* Malformed prompt syntax is rejected when saving

Resolution consumes AI credits from the project. In the embedded inbox, resolution is limited to 10 requests per minute per inbox token.

### Permissions

| Action                                 | Who                       |
| -------------------------------------- | ------------------------- |
| Create, edit, archive a personal reply | Its author                |
| Create, edit, archive a shared reply   | Project owners and admins |
| Change visibility                      | Project owners and admins |
| Duplicate any visible reply            | Any project member        |

Duplicating creates a personal copy owned by you, named `<name> copy` with a `-copy` shortcut suffix.

Archiving hides a reply from the picker without deleting it. Use the **Archived** filter on the management page to restore it.

In the [embedded inbox](/docs/platform/inbox/embedded), the `/` picker works but quick replies cannot be managed.

## Starting a new conversation

Click the compose button in the conversation list header to start a new conversation:

1. Select a WhatsApp number (production numbers only)
2. Enter the recipient's phone number with country code
3. Pick an approved template
4. Fill in template parameters
5. Send

## Delivery errors

Failed messages show a red warning icon with the error from WhatsApp.

Common causes:

* 24-hour customer service window expired
* Template not approved
* Invalid phone number

## Assignments

Assign conversations to team members from the Info tab in the detail sidebar.

* One active assignment per conversation
* Creating a new assignment automatically deactivates the previous one
* Not available in the [embedded inbox](/docs/platform/inbox/embedded)

## Contact info

The Info tab in the detail sidebar shows:

* **Display name** — Editable inline
* **Phone number**
* **Metadata** — Read-only, set via API or workflows
* **Notes** — Add and edit notes on a contact (session auth only, not available in embedded inbox)

## Conversation history

The Info tab shows previous conversations with the same phone number: date range, message count, and a link to view the full thread.
