By default, a Captain assistant answers every conversation that arrives in the inboxes it is connected to, at any hour. **Audience** and **Schedule** helps you narrow that down: Audience decides *who* Captain replies to, and Schedule decides *when*.

Anything Captain does not pick up isn't dropped, the conversation is marked as open for your team to review, exactly like a conversation in an inbox with no assistant connected.

## Where to find these settings

1. Go to **Captain → Assistants** and open the assistant you want to configure.

2. Open **Settings**.

3. Use the **Audience** and **Schedule** tabs in the left column.

Audience and Schedule are set per assistant, and they apply to every inbox that assistant is connected to.

---

## Audience: who Captain replies to


![](https://app.chatwoot.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBCSFl2SGdZPSIsImV4cCI6bnVsbCwicHVyIjoiYmxvYl9pZCJ9fQ==--5371a3d552c666b997939fa75a4437d9149a5a16/Screenshot%202026-08-07%20at%209.13.44%E2%80%AFAM.png)

The Audience tab has two options.

### Everyone

Captain responds to every conversation in the connected inboxes. This is the default.

### Specific audience

Captain responds only to customers who match the conditions you define. Everyone else goes straight to your team. Each condition is made of three parts: an **attribute**, an **operator**, and a **value** — for example `Country · Equal to · Germany`. At the top of the condition builder you choose how conditions combine:

* **Match all of the following** — every condition must be true (AND)

* **Match any of the following** — at least one condition must be true (OR)

#### Grouping conditions

Click **Add condition group** to build mixed logic — for example "customer is on the Pro plan **and** (they are in the US **or** Canada)". A group has its own match all / match any setting. Groups can be nested one level deep.

### Attributes you can use

**Contact attributes**

| Attribute     | Typical use                                                   |
| ------------- | ------------------------------------------------------------- |
| Name          | Match specific accounts by name                               |
| Email         | Target or exclude a domain, e.g. email *contains* `@acme.com` |
| Phone number  | Target specific numbers                                       |
| Identifier    | The ID you pass from your app when identifying users          |
| Country       | Route by region                                               |
| City          | Route by location                                             |
| Company       | Target a company                                              |
| Created at    | New vs. long-standing contacts                                |
| Last activity | Recently active vs. dormant contacts                          |
| Blocked       | Blocked or not blocked                                        |
| Labels        | Match contacts carrying one or more labels                    |

**Conversation attributes**

| Attribute        | Typical use                                                                                                                                   |
| ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| Logged-in user   | Whether the visitor was verified with identity validation (HMAC) in the website widget. Great for letting Captain serve signed-in users only. |
| Browser language | The language the visitor's browser is set to                                                                                                  |

**Custom attributes**

Every contact custom attribute you have defined in **Settings → Custom attributes** is available too — plan, MRR, signup date, trial flag, and so on. The operators offered depend on the attribute type (text, number, currency, percent, link, date, list, checkbox).

A few behaviors worth knowing:

* **Labels** matches when the contact carries the label you selected.

* **Text matching is not case-sensitive**, so `Acme` and `acme` behave the same.

* **Phone numbers** are compared ignoring the `+` prefix, so `+14155550100` and `14155550100` match.

* **Checkbox custom attributes** that were never set count as *false*.

---

## Schedule: when Captain replies


![](https://app.chatwoot.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBCS1V3SGdZPSIsImV4cCI6bnVsbCwicHVyIjoiYmxvYl9pZCJ9fQ==--ced7d6f1598c7a10ee226aae9b3a3fb8a6f287aa/Screenshot%202026-08-07%20at%209.13.21%E2%80%AFAM.png)

The Schedule tab controls Captain's response window, based on the **business hours configured on each inbox** (Inbox → Settings → Business Hours).

| Option                     | What happens                                                                                                               |
| -------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| **Anytime**                | Captain responds to every conversation regardless of time. This is the default.                                            |
| **During business hours**  | Captain responds only while the inbox is open. Outside those hours, the conversation goes to your team.                    |
| **Outside business hours** | Captain responds only while the inbox is closed — useful for covering nights and weekends while your team handles the day. |

**Inboxes without business hours configured are always covered.** If an inbox has business hours turned off, Captain treats it as always available and replies no matter which option you pick. So if "During business hours" doesn't seem to be limiting anything, check that business hours are actually enabled on that inbox.

Because business hours live on the inbox, one assistant connected to inboxes in different time zones follows each inbox's own schedule.

---

## How Audience and Schedule work together

Both rules must pass. Captain replies only when the customer matches the audience **and** the current time falls inside the response window. If either check fails, the conversation is marked as open for your team.

### When the rules are checked

The checks run at the moment Captain would otherwise take a conversation:

* when a **new conversation** is created, and

* when a **resolved conversation is reopened** by the customer.

Once Captain has taken a conversation, it keeps handling it until it resolves or hands off. It does not re-check the rules on every incoming message. So a conversation that starts five minutes before your business hours end won't be abandoned mid-answer. The next new conversation from that customer is evaluated fresh.

Changing Audience or Schedule only affects new and reopened conversations. Conversations Captain is already handling continue as they are.

---

## Troubleshooting

**Captain is still replying to people I excluded.**

Audience is evaluated against the contact record when the conversation starts. If the attribute is set on the contact *after* the conversation begins (for example your app identifies the user a moment later), that first conversation is already routed. Check the contact's attributes in the sidebar to confirm the value Captain saw.

**"During business hours" isn't limiting anything.**

Business hours are probably not enabled on that inbox. Turn them on in **Inbox → Settings → Business Hours**.

**My custom attribute isn't in the list.**

Only *contact* custom attributes are available. Conversation custom attributes are not supported in audience conditions. Define the attribute under **Settings → Custom attributes** with the Contact model.

**I can't save my audience.**

Every condition needs a value (except "Is present" / "Is not present" on date custom attributes), and a specific audience needs at least one condition. Conditions highlighted in red are incomplete.