# Team Inbox

## Overview

The Team Inbox is the shared workspace where your whole team handles incoming WhatsApp conversations from one screen. Open it from the top navigation Team Inbox item. Every chat that arrives on a connected number becomes a conversation that any teammate can pick up, assign, answer, note, tag, snooze, or resolve — without stepping on each other.

It works the same no matter which engine the workspace runs on (Unofficial API, WhatsApp Cloud API, or Twilio): the queue, assignment, notes, SLA timers, and collaboration tools all behave identically. The inbox shows only conversations on the workspace's active engine, so switching engines never leaves old chats cluttering the list — and never tries to reply to an old conversation through a channel that can no longer reach it.

The first time you open the inbox in a session, that moment becomes your "last seen" mark, so the global "new messages" widget only counts conversations that arrive after it.

> Two views, one queue. The same conversations can be worked as a scrolling list or as a drag-and-drop Kanban board with Open / Pending / Snoozed / Resolved columns — dragging a card between columns changes its status. Use whichever fits how your team works; both share the exact same data and counts.

## The Inbox Layout

The screen is divided into three panes:

- Left — the queue. A scrolling list of conversations with filters and tabs across the top. Each row shows the contact, a message preview, unread count, who it's assigned to (person, team color, or AI-agent badge), priority, an SLA-breach flag, and a connection dot for the number it arrived on (green when connected, grey/red when offline; Cloud API rows show as "cloud").
- Center — the conversation. The selected thread with the full message history (loaded 80 messages at a time, scroll up for older ones), the reply box, and per-message hover actions.
- Right — context. The customer profile (name, email, mobile, country code, address, language, and custom fields from the matching contact), the customer's recent orders, past conversations with the same contact, internal notes, tags, and the activity timeline (every status change, assignment, tag, note, SLA event, and routing-rule action is recorded here).

The list, customer profile, and order history load together when you open a conversation; older messages load as you scroll, so even threads with thousands of messages stay fast.

## Queue Tabs & Filters

The tabs at the top of the queue let each operator focus on the right slice of work. The badge count next to each tab always matches the rows you see.

Tab | What it shows
--- | ---
Mine | Conversations assigned to you. This is the default tab.
Unassigned | Open conversations nobody has picked up yet — the team's shared to-do list.
Mentions | Conversations where a teammate @mentioned you in an internal note.
SLA breach | Conversations that missed their first-response or resolution target.
All | Everything you're allowed to see. Owners, admins, and managers see the whole workspace; agents see only their own conversations plus those routed to their teams.

Alongside the tab you can stack these filters:

Filter | Options
--- | ---
Status | Open (default), Snoozed, Resolved, Closed, Spam, or All.
Team | Narrow to a single department's queue.
Number | When the workspace has more than one connected number, show only conversations that landed on a specific number.
Search | Find a conversation by contact name, number, or message text.

## Conversation Statuses & Priority

Every conversation has exactly one status that controls which tab and queue it appears in. Status changes are logged to the conversation's activity timeline. The statuses are:

Status | Meaning
--- | ---
open | Active and needs attention. The default for any new incoming conversation.
pending | In progress but waiting (for example, on the customer). Still counts as live work and still appears in notifications.
snoozed | Hidden until a chosen time, then it wakes back to open automatically (see Snooze, Resolve & Reopen).
resolved | Handled and closed out. Records who resolved it and when. Can be reopened at any time.
closed | Finished and archived. (Assigning a closed conversation automatically reopens it.)
spam | Marked as junk and removed from the working queue.

Conversations also carry a priority — low, normal, high, or urgent — settable from the conversation header. Priority can tighten the SLA targets (a high/urgent chat can get a faster first-response clock; see SLA Timers).

## Team Roles & Permissions

What each teammate can do in the inbox depends on their workspace role. Roles are set when you invite members (Team Inbox → Members, or Account & Team). There are five roles:

Role | What they can do
--- | ---
Owner | Full control. Sees every conversation, and manages teams, tags, SLA policies, routing rules, business hours, integrations, members, and billing.
Admin | Same broad inbox access as the owner, but no billing. Sets up teams, tags, routing, and SLA, and invites members.
Manager | Sees all conversations across teams, can assign and resolve, manage tags and saved replies, and view the analytics pages. Cannot edit routing or SLA policies.
Agent | Works the queue — replies, notes, tags, snoozes, and resolves the conversations assigned to them or their teams. Cannot open manager-only pages (Chat, analytics).
Viewer | Read-only. Can open and read conversations but cannot reply or make changes.

> Note: Workspaces created on older versions may show a member role — it works exactly like Agent. Every action is permission-checked on the server, so a role isn't just a label on the screen.

## Replying to a Conversation

Select a conversation to open it, then use the reply box at the bottom of the center pane. Every outgoing message is charged against the wallet, sent through the active engine, then marked sent (or failed, with a refund) based on the result.

1. Text. Type your message (up to 4096 characters) and press send. The recipient is worked out automatically, so replies always reach the right person.
2. Media. Use the attachment control to send an image, video, document, or audio file (up to 16 MB) with an optional caption. Selecting several files sends one message per file.
3. Voice note. Record directly in the browser; it's sent as a WhatsApp voice message (the round play-button bubble), not a generic audio file.
4. Template. Pick an approved template from the Template tab — its header, footer, and buttons carry through. Templates are required to start conversations outside WhatsApp's 24-hour window on the Cloud API.
5. Catalog. Send a single product, a multi-product list, or a storefront link. On a Cloud API number with a linked Meta catalog it uses the native catalog message; otherwise it sends a product carousel.
6. Canned reply. Insert a saved reply by typing its `/shortcut` or choosing one from the picker (see Canned Replies).

Your first reply on a conversation stops the first-response SLA clock and clears any pending escalation, since an answer means it's been handled. Each reply also counts toward your replies-today figure on the analytics page.

> Out of credits? Every outgoing message costs one credit (or whatever your plan sets per message). If the wallet has no credits left, the reply is rejected with a clear "Out of message credits" message and nothing is sent. If the engine itself rejects a send, the message is marked failed with the reason recorded and the credit is automatically refunded — you are never billed for a message that didn't go out.

### Per-Message Actions

Hover any bubble in the thread for the same controls WhatsApp offers:

Action | What it does
--- | ---
Pin | Pins the bubble; the change is pushed to the recipient on WhatsApp (a 7-day pin) where the engine supports it.
Star | Stars the message for the operator and syncs to your WhatsApp Web starred list. The recipient is not notified.
React | Adds an emoji reaction (or clears it by sending an empty emoji). Best-effort delivery to the recipient.
Forward | Copies the message (text + media) into another conversation and sends it there. Consumes one credit; refunded on failure.
Edit | Edits your own outbound message within WhatsApp's 15-minute edit window. The wire edit is sent first; the local bubble only updates if the provider accepted it. Inbound messages and expired edits return a clear 422.
Delete | Delete for everyone revokes your own outgoing message on WhatsApp (the recipient sees "This message was deleted"); Delete for me just soft-hides it from the inbox. Inbound messages can only be hidden locally.
Info | Shows the message's status timeline — created, sent, delivered, read — plus any failure reason.
Add to contacts | On an inbound message that carries a shared vCard, promotes the captured card into a real CRM Contact (idempotent — updates an existing match instead of duplicating).

## Assignment

Assigning a conversation makes one person (or one team) responsible for it. Use the Assign control in the conversation header, or select rows in the queue and assign in bulk. Assignment follows the same rules everywhere — the header, bulk actions, and routing rules.

- Assign to a person — the conversation moves into that teammate's Mine tab and they're notified.
- Assign to a team — routes to a department; the team's assignment strategy then picks the actual member.
- Unassign — returns the conversation to the Unassigned queue.
- Hand over to AI — attach a workspace AI assistant (or AI Agent) so it answers the customer's next reply. You can detach it again at any time.

### Auto-Assignment Strategies

Each team has one strategy that decides who gets a conversation routed to that team. Strategies only consider available members — nobody who is offline or busy, and nobody already at or above their capacity (20 open chats by default) — and fall back to least-loaded when the preferred pick isn't available.

Strategy | Behavior
--- | ---
Manual | No automatic pick — a person assigns it.
Round robin | Picks the available member who has gone longest without an assignment, spreading work evenly in turn.
Least loaded | Gives the conversation to the available member with the fewest open/pending conversations.
Sticky | Keeps a returning customer with the agent who last replied to them (unless that agent is offline), falling back to least-loaded.

Teams are created under the inbox settings (Teams), where you set each team's name, color, members, strategy, and an optional number restriction so a team only sees conversations from specific connected numbers. Automatic assignment skips a team whose number restriction doesn't include the conversation's number; manual assignment isn't restricted that way.

## Auto-Assign Rules (Routing)

Routing rules automatically act on new conversations based on their content and the contact's details — before anyone touches them. Manage them under Auto-assign by tag, keyword or hours in the inbox settings (admins and owners only; the feature is plan-gated). Rules run in two passes: first your normal rules in order, then — only if nothing matched — any rules you marked as fallback (your catch-all "if nothing else matched, send to Triage" patterns).

### Conditions

Each rule is a set of conditions that must all be true (you can also build nested AND/OR groups). You can match on:

Condition | Matches against
--- | ---
Message text | The incoming message text.
Contact phone | The sender's phone number.
Contact tag | The contact's existing tags.
Channel / priority / language | The conversation's channel, current priority, or detected language.
Time of day / day of week | The current hour or weekday, for time-based routing.
Outside business hours | Whether the message arrived outside your weekly schedule (see below).
Incoming number | Which connected number the message landed on.

Comparisons include equals, not equals, contains, does not contain, starts with, ends with, is one of, is not one of, greater/less than, has any of, and pattern match. Matching ignores upper/lower case by default.

### Actions

Action | Effect
--- | ---
Assign to team | Routes to a team (using least-loaded), respecting the team's number restriction.
Assign to person / AI agent | Assigns to a specific teammate, or hands the chat to an AI Agent that responds immediately.
Set priority | Sets low / normal / high / urgent.
Add tag | Adds a tag (creating it if needed) and can automatically enroll the contact into a matching flow.
Auto-reply | Sends a template or free-text reply into the conversation, with an anti-spam cooldown.
Start a flow | Starts an automation flow for the contact.
Mark as spam | Flags the conversation as spam and pulls it from the queue.
Set SLA | Applies a specific SLA policy to the conversation.
Set escalation | Schedules a delayed action — if no reply lands within a set number of minutes, the follow-up action (reassign, raise priority, etc.) fires automatically.

Rules run in order; turn on Stop on match so once a rule fires, later rules are skipped. When a customer replies to an already-open chat, only the per-message actions (add tag, auto-reply, start a flow) run again — one-time actions like "assign to team" won't override an operator's manual reassignment.

> Business hours. Set the workspace's weekly schedule and time zone under Business hours (per day: on/off, from, to; default Mon–Fri 09:00–18:00, weekends off). The "outside business hours" condition reads from it, and you can set an automatic outside-hours auto-reply template plus its cooldown right there.

> No setup needed. Escalations, SLA breaches, and snooze wake-ups are handled automatically whenever the queue refreshes (roughly once every 30–60 seconds per workspace), so the inbox works out of the box with no extra configuration.

## Internal Notes & Mentions

Notes are private team comments attached to a conversation — the customer never sees them. Use them to brief a colleague, record context, or hand off cleanly.

1. Open the conversation and switch to the Notes area in the right pane.
2. Type your note (up to 8000 characters). To pull a teammate in, @mention them — they get an in-app notification and the conversation appears in their Mentions tab.
3. Notes are timestamped and show who wrote them. You can delete your own notes; admins and managers can delete any note.

Each note is recorded on the conversation's timeline, and every mentioned teammate (except you) is notified.

## Tags

Tags label conversations so you can group, filter, and report on them (for example refund, VIP, lead). Add a tag from the conversation header — pick an existing one, or type a new name and color to create it on the spot. Remove a tag with one click.

1. Open the conversation, click the tag control, choose or create a tag.
2. The tag is recorded on the timeline, and the change shows up for other operators viewing the queue.
3. Adding a tag can automatically enroll the contact into any active, published flow that starts on "tag added" for that tag.

The number of tags a workspace can create is set by your plan; admins and owners manage the master tag list under inbox settings.

## Snooze, Resolve & Reopen

- Snooze — pick a future time to hide a conversation. When that time passes, it wakes back to open automatically and, on the Kanban board, moves off the Snoozed column without a refresh.
- Resolve — close out a handled conversation. This records who resolved it and when, stops its SLA timers (and flags a breach if it was resolved past the resolution target), adds to your "resolved today" count, and sends a "conversation resolved" webhook.
- Reopen — bring a resolved conversation back to open if the customer replies again.

## Canned Replies & Playbook Macros

Saved replies (canned replies) are reusable message snippets that keep answers fast and consistent. Manage them from the Saved replies panel in the inbox.

1. Create a saved reply with a shortcut, a title, the body text, and an optional category.
2. Mark it personal to keep it private to you, or leave it shared for the whole workspace.
3. In the reply box, type `/shortcut` or open the picker to insert it. Saved replies support `{{placeholder}}` variables — including the sending number's phone and name, and contact details — that fill in with live values before sending.
4. Each time a reply is used, its usage count goes up, so the picker stays sorted by real popularity.

The picker is sorted by how often each reply is used, so your team's most popular answers float to the top. The number of saved replies is set by your plan.

## SLA Timers

Service-Level Agreement (SLA) policies set targets for how quickly conversations must be answered and resolved, and flag the ones that fall behind. Create policies from the SLA policies panel (admins and owners). Each policy has these settings:

Setting | Purpose
--- | ---
First response (minutes) | How fast the first reply must go out.
Resolution (minutes) | How fast the conversation must be resolved.
Pause when waiting on customer | Stop the clock while the ball is in the customer's court.
Respect business hours | Only count time during the workspace's working schedule.
Priority overrides | Tighter targets for certain priorities (for example a faster first-response time for urgent).
Set as default | Apply this policy workspace-wide. Setting one default clears it on the others.
Number restriction | Limit the policy to specific connected numbers. A number-specific policy beats the workspace default for chats on that number.

How a policy is chosen. If a routing rule or operator pinned a policy to the conversation, that one wins. Otherwise WaDesk picks the most specific match: a number-specific policy first, then the workspace default, then any policy. When a target is missed, the conversation is flagged as breached, recorded on the timeline, and shown in the SLA breach tab. The header shows a live SLA countdown so operators know what's most urgent.

## Collision Detection, Presence & Typing

Because the inbox is shared, WaDesk shows you in real time when teammates are looking at the same conversation, so two people don't reply at once. This works out of the box, with no extra server setup.

- Presence avatars appear on a conversation when other teammates have it open. An avatar drops off after about 30 seconds of silence (tab closed or connection lost).
- A "… is typing" indicator shows when someone else is composing, and disappears within about 5 seconds of them stopping.
- When you close the conversation or the tab, you drop off the viewer list right away.
- You only ever see other people on a conversation, never your own avatar.

### Agent Availability Status

Operators set their own availability — online, away, busy, or offline — with an optional status message. This isn't just cosmetic: auto-assignment skips anyone who's busy or offline, so setting yourself busy genuinely stops new work from landing on you. Each agent's status, current load, replies-today, and resolutions-today are visible on the team performance page.

## Bulk Actions

Select multiple conversations in the queue to act on them together. Each one is permission-checked individually (any you can't act on are quietly skipped), and the whole operation is recorded in the audit log.

Bulk action | Effect
--- | ---
Assign | Assign the selection to a person or team.
Resolve | Mark all as resolved and add to your resolutions-today count.
Reopen | Return all to open.
Snooze | Snooze all until a chosen time (defaults to one hour out).
Priority | Set a priority on all.
Tag | Apply a tag to all.
Spam | Flag all as spam and pull them from the queue.

## Analytics, AI Agents & Notifications

Managers, admins, and owners can open two analytics pages, both with today / week / month views and an optional per-number filter:

- Team performance — per-operator replies, resolutions, and average first-response time, plus live availability status and current load, with workspace-wide totals up top.
- AI agent performance — per-agent messages sent and failed, success rate, conversations handled, how many are active right now, and an average self-rated quality score with sample replies.

AI Agents are set up in the inbox (provider OpenAI / Anthropic / Gemini, model, tone, instructions, reply length, hand-off rules, optional voice). Assign one to a conversation and it answers the customer's next reply; resolving the conversation records which agent handled it. AI features use the workspace's own AI key or the admin-provided key, subject to your plan's AI access.

A notification widget shows your most recent unread conversations. The "new messages" counter resets whenever you open the list or Kanban view.

### Outbound Webhooks

For CRM, Zapier, or Make integrations, admins can set up outbound webhooks (under inbox settings) that fire on inbox events — for example `conversation.assigned`, `conversation.replied`, and `conversation.resolved` — with a signing secret and per-hook delivery counts so you can wire conversations into the rest of your tools.