Team Management
Teams are the core organizational unit in RapiDesq. They control how conversations are routed to agents, how tickets are prioritized and distributed, and how your support organization is structured. This guide covers creating teams, configuring routing strategies, inviting users, managing permissions, setting agent statuses, controlling capacity, and defining business hours.
Overview
Every customer conversation in RapiDesq ultimately reaches an agent through a team. Teams connect three fundamental concepts:
- Channels — inbound conversations from the chat widget, email, or web forms are routed to a team via conversation flows.
- Routing — the team's agent selection strategy determines which agent receives each conversation, while the ticket selection strategy determines the order in which queued tickets are served.
- Permissions — user roles and permission sets govern what each team member can see and do across the platform.
A typical organization has multiple teams—for example, Billing Support, Technical Support, and Sales Inquiries—each with its own routing rules, capacity limits, ticket prefix, and business hours schedule. Agents can belong to more than one team, and supervisors can oversee multiple teams simultaneously.
A conversation flow's Route to Team node directs a conversation to a specific team. The team's agent selection strategy then picks an agent. If no agent is available, the conversation enters the team's queue and is served according to the ticket selection strategy when an agent becomes free.
Creating Teams
To create a new team:
- Navigate to Admin > Teams.
- Click Create Team.
- Fill in the configuration fields described below.
- Add team members and assign each a team role (Agent or Supervisor).
- Click Save.
Configuration Fields
| Field | Description |
|---|---|
| Team Name | A human-readable name displayed throughout the platform (e.g., "Billing Support", "Technical Support"). |
| Description | An optional summary of the team's purpose, visible to admins and supervisors. |
| Agent Selection Strategy | Determines how an incoming conversation is assigned to an available agent. See Agent Selection Strategies below. |
| Ticket Selection Strategy | Determines the order in which queued tickets are served when an agent becomes available. See Ticket Selection Strategies below. |
| Max Concurrent per Agent | The maximum number of active conversations an agent on this team can handle simultaneously. See Capacity Management. |
| Ticket Prefix | A short string prepended to all ticket IDs created for this team (e.g., "SUP" produces SUP-0001, SUP-0002). See Custom Ticket Prefixes. |
Agent Selection Strategies
The agent selection strategy controls how the routing engine chooses which available agent receives an incoming conversation. Only agents whose functional status is AVAILABLE and who have not reached their maxConcurrentPerAgent limit are considered.
BROADCAST
The conversation offer is sent to all available agents on the team simultaneously. The first agent to accept the offer is assigned the conversation.
- Best for: Small teams where speed-to-answer matters most. Every agent sees the offer immediately, minimizing wait time.
- Trade-off: Can be distracting on larger teams because every agent is interrupted for every conversation. Not recommended for teams with more than about eight agents.
ROUND_ROBIN
Conversations are distributed to agents in a circular sequence. The routing engine tracks who received the last assignment and offers the next conversation to the next agent in the rotation.
- Best for: General-purpose support teams where an even distribution of work is the primary goal.
- Trade-off: Does not account for how busy each agent currently is. An agent who just finished a quick chat and an agent who is juggling three complex issues both get the same share.
FEWEST_ACTIVE
The conversation is offered to the agent with the fewest currently active conversations. If multiple agents are tied, the system selects among them using a round-robin tiebreaker.
- Best for: Teams where conversations vary in complexity and duration. Keeps workload balanced in real time.
- Trade-off: An agent who quickly resolves conversations will tend to receive more total assignments over a shift, which may or may not be desirable.
LONGEST_IDLE
The conversation is offered to the agent who has been idle the longest—that is, the agent whose most recent conversation assignment or completion was the furthest in the past.
- Best for: Organizations that prioritize fairness and want to ensure no single agent is continuously loaded while others wait.
- Trade-off: Does not consider the number of active conversations an agent already has, only when they last received one.
SKILL_MATCH
The conversation is offered to the agent whose configured skills best match the requirements identified for the conversation (typically set by conversation flow logic or ticket metadata).
- Best for: Specialized teams where agents have distinct areas of expertise (e.g., a technical support team with specialists in networking, databases, and security).
- Trade-off: Requires upfront configuration of agent skills and conversation skill requirements. If skills are not well maintained, routing quality degrades.
If you are setting up your first team and are unsure, start with ROUND_ROBIN or FEWEST_ACTIVE. Both provide reasonable workload distribution out of the box. You can change the strategy at any time without disrupting active conversations.
Ticket Selection Strategies
When an agent becomes available and there are multiple conversations waiting in the team's queue, the ticket selection strategy determines which conversation is served next.
FIFO (First In, First Out)
The oldest waiting ticket is served first, regardless of priority or SLA status.
- Best for: Teams where all requests carry roughly equal urgency and simplicity is valued.
- Trade-off: High-priority tickets wait behind lower-priority ones if they arrived later.
PRIORITY_FIFO
Tickets are grouped by priority level—URGENT > HIGH > NORMAL > LOW—and within each priority level, the oldest ticket is served first.
- Best for: Most support teams. Ensures that critical issues are addressed before routine requests while still maintaining fairness within each priority tier.
- Trade-off: Low-priority tickets can be delayed significantly during high-volume periods if urgent tickets keep arriving.
SLA_BREACH
Tickets closest to breaching their SLA response or resolution deadline are served first, regardless of when they entered the queue.
- Best for: Organizations with contractual SLA commitments where SLA compliance is a key metric.
- Trade-off: Tickets without SLA targets may be deprioritized indefinitely. Ensure all ticket types have appropriate SLA policies configured.
ROUND_ROBIN_CONTACTS
The queue is distributed across contacts (customers) so that a single customer with many open tickets cannot monopolize agent availability. The system rotates between contacts, serving one ticket per contact before moving to the next.
- Best for: Teams where a small number of contacts generate a disproportionate volume of tickets and fairness across customers is important.
- Trade-off: Does not account for priority or SLA status. A low-priority ticket from a customer with one request may be served before an urgent ticket from a customer with many requests.
Changing the ticket selection strategy takes effect immediately for all conversations currently in the queue. Active conversations already assigned to agents are not affected.
Custom Ticket Prefixes
Each team can define a ticket prefix—a short alphanumeric string that is prepended to every ticket ID generated for that team. The ticket number auto-increments after the prefix.
| Team | Prefix | Example Ticket IDs |
|---|---|---|
| Billing Support | BIL |
BIL-0001, BIL-0042, BIL-0183 |
| Technical Support | SUP |
SUP-0001, SUP-0127, SUP-0904 |
| Sales Inquiries | SAL |
SAL-0001, SAL-0015, SAL-0062 |
Ticket prefixes serve several purposes:
- Instant identification — anyone viewing a ticket ID immediately knows which team owns it.
- Cross-team communication — when agents reference tickets in internal chat or handoff notes, the prefix removes ambiguity.
- Reporting and filtering — prefixes make it straightforward to filter exports and reports by team.
- Customer communication — customers can quote a ticket ID in follow-up emails or chats, and agents can locate it instantly.
Keep prefixes short (two to four characters) and descriptive. Avoid prefixes that could be confused with one another (e.g., "SUP" and "SPT" for the same department).
Inviting Users
To add a new user to your organization:
- Navigate to Admin > Users.
- Click Invite User.
- Enter the user's email address.
- Select a role that defines their base set of permissions (see below).
- Optionally assign one or more additional permission sets to extend their access beyond the base role.
- Assign them to one or more teams, selecting a team role (Agent or Supervisor) for each.
- Click Send Invitation. The user receives an email with a link to set up their account.
User Roles
Each user is assigned exactly one platform role. The role provides a default set of permissions, but authorization throughout the platform is always checked at the permission level, not the role level. This means two users with the same role can have different effective permissions if different permission sets have been applied.
| Role | Scope | Description |
|---|---|---|
| SYSTEM_ADMIN | All tenants | Full system access across every tenant. Reserved for platform operators who manage the RapiDesq installation itself. Can create and configure tenants, manage licensing, and access all administrative functions. |
| TENANT_OWNER | Single tenant | The owner of a tenant account. Has full administrative access within their tenant plus access to billing, subscription management, and licensing. Typically the person who created the tenant. |
| TENANT_ADMIN | Single tenant | Full administrative access within a single tenant, including user management, team configuration, channel setup, and all settings. Does not have billing or licensing access. Use this role for IT administrators or operations managers. |
| SUPERVISOR | Assigned teams | Can manage agents within their assigned teams, monitor queues and agent statuses in real time, view reports, and assist with ticket reassignment. Cannot modify tenant-wide settings or manage users outside their teams. |
| AGENT | Assigned teams | Handles customer conversations and tickets routed to their teams. Can view and update tickets, use internal chat, and manage their own status. Cannot access administrative or reporting functions beyond their own performance metrics. |
| INTERNAL_USER | Limited | Restricted access limited to the service desk portal (for submitting and tracking internal requests) and team chat. Cannot handle customer-facing conversations or access admin functions. Ideal for employees outside the support organization who need to submit IT requests or participate in internal collaboration. |
Authorization in RapiDesq is permission-based, not role-based. The platform never checks "is this user a Supervisor?" to grant access. It checks "does this user have the reports:view permission?" Roles simply provide a convenient starting set of permissions. You can extend or restrict any user's effective permissions by assigning additional permission sets.
Users can belong to multiple teams. Within each team, they hold a team-level role of either Agent or Supervisor, which is independent of their platform-wide role. For example, a user with the AGENT platform role could be a Supervisor in a small side team they help manage.
Permission Sets
Permission sets are named collections of individual permissions that can be assigned to users. They provide fine-grained control over what each user can do, independent of their base role.
Permission Format
Every permission in RapiDesq follows a resource:action format:
| Permission | Grants |
|---|---|
users:create |
Ability to invite new users to the tenant |
users:edit |
Ability to modify user profiles and settings |
teams:view |
Ability to view team configurations and membership |
teams:manage |
Ability to create, edit, and delete teams |
tickets:edit |
Ability to update ticket details, status, and assignments |
tickets:delete |
Ability to delete tickets |
reports:view |
Ability to view dashboards and reports |
reports:export |
Ability to export report data |
channels:manage |
Ability to configure chat widgets, email channels, and web forms |
flows:manage |
Ability to create and edit conversation flows |
settings:manage |
Ability to modify tenant-wide settings |
Creating Custom Permission Sets
- Navigate to Admin > Permission Sets.
- Click Create Permission Set.
- Enter a descriptive name (e.g., "Report Viewer", "Channel Manager", "Ticket Admin").
- Select the individual permissions to include in this set.
- Click Save.
Once created, the permission set can be assigned to any number of users. A user's effective permissions are the union of all permissions from their base role plus all assigned permission sets.
Common Permission Patterns
- Report Viewer —
reports:view+reports:export. Assign to agents who need visibility into team performance metrics without granting broader supervisor access. - Channel Manager —
channels:manage+flows:manage. Assign to a team lead responsible for maintaining chat widget configurations and conversation flows. - User Manager —
users:create+users:edit+teams:manage. Assign to an HR or operations contact who handles onboarding without needing full admin access. - Read-Only Auditor —
teams:view+reports:view+tickets:view. Assign to compliance or quality assurance personnel who need to observe but not modify.
Follow the principle of least privilege. Start users with only the permissions they need for their day-to-day work, and add permission sets as specific needs arise. It is much safer to grant incrementally than to revoke after the fact.
Agent Statuses
Agent statuses control routing behavior and provide real-time visibility into your team's availability. The status system has two layers: functional statuses that the routing engine uses, and custom display labels that agents and supervisors see in the interface.
Functional Statuses
Every agent is always in exactly one of three functional statuses. These are the statuses the routing engine evaluates when deciding whether to offer a conversation to an agent:
| Functional Status | Routing Behavior | Description |
|---|---|---|
| AVAILABLE | Agent receives conversation offers | The agent is ready to work and will be considered by the routing engine for new conversations (subject to capacity limits). |
| NOT_AVAILABLE | Agent does not receive offers | The agent is logged in but not accepting new work. Used for breaks, meetings, training, administrative tasks, or any other period where the agent should not be interrupted with new conversations. |
| ON_TICKET | Agent may receive offers (capacity-dependent) | The agent is actively working on one or more conversations. Whether the agent receives additional offers depends on the team's maxConcurrentPerAgent setting and how many active conversations they currently have. |
Custom Display Labels
While the routing engine operates on the three functional statuses, your agents and supervisors see custom display labels that provide more context about what an agent is doing. Each display label maps to one of the three functional statuses.
To create custom display labels:
- Navigate to Admin > Agent Statuses.
- Click Add Status Label.
- Enter a display label (the name agents see in the status dropdown).
- Select the functional status it maps to.
- Click Save.
| Display Label | Maps to Functional Status | Use Case |
|---|---|---|
| Available | AVAILABLE | Default ready state |
| Lunch Break | NOT_AVAILABLE | Scheduled lunch period |
| In Meeting | NOT_AVAILABLE | Attending a team meeting or 1:1 |
| Training | NOT_AVAILABLE | Attending a training session |
| Back Office Work | NOT_AVAILABLE | Working on documentation or follow-ups that require focus |
| Handling Tickets | ON_TICKET | Actively working conversations |
Multiple display labels can map to the same functional status. This gives supervisors granular visibility into why agents are unavailable (meeting vs. lunch vs. training) while the routing engine simply sees them all as NOT_AVAILABLE.
Supervisors can view every agent's current display label in real time from the team dashboard. This enables informed decisions about staffing adjustments, such as knowing that three agents are in a training session and will return in 30 minutes versus three agents being on lunch with staggered return times.
Capacity Management
The maxConcurrentPerAgent setting on each team controls how many active conversations a single agent can handle at the same time. This is the primary mechanism for preventing agent overload and maintaining response quality.
How Capacity Affects Routing
- When an agent's active conversation count is below the team's
maxConcurrentPerAgentlimit, they are eligible to receive new conversation offers. - When an agent reaches the limit, the routing engine stops offering them new conversations until they resolve or transfer an existing one.
- If all agents on a team are at capacity, incoming conversations enter the team's queue and are held until an agent becomes available. The ticket selection strategy then determines the order in which queued conversations are served.
Setting Capacity Limits
- Navigate to Admin > Teams and select the team.
- In the team configuration, set the Max Concurrent per Agent value.
- Click Save. The new limit takes effect immediately for all agents on the team.
Monitoring Capacity in Real Time
Supervisors and admins can monitor capacity from the team dashboard:
- Per-agent utilization — see how many active conversations each agent has relative to the team's maximum.
- Queue depth — the number of conversations waiting for an available agent.
- Queue wait time — how long the oldest queued conversation has been waiting.
Setting capacity too high degrades response quality—agents juggling too many conversations produce slower, less thorough replies. Setting it too low wastes available capacity and increases queue times. Start with a conservative value (e.g., 3–4 for chat, 1–2 for complex technical support) and adjust based on observed performance and agent feedback.
Business Hours & Schedules
Business hours schedules define when your teams are operational. They affect three parts of the platform: the customer-facing chat widget, the routing engine, and conversation flows.
Configuring a Schedule
- Navigate to Admin > Business Hours.
- Click Create Schedule.
- Enter a schedule name (e.g., "US East Coast Hours", "EMEA Business Hours").
- Select the timezone for this schedule. All start and end times you enter will be interpreted in this timezone.
- For each day of the week, set start time and end time, or mark the day as closed.
- Click Save.
Schedule Exceptions
Exceptions override the regular weekly schedule for specific dates:
- Open the schedule and navigate to the Exceptions tab.
- Click Add Exception.
- Select the date (or date range).
- Choose whether the exception is a closure (team unavailable all day) or modified hours (custom start and end times for that date).
- Click Save.
Use exceptions for public holidays, company-wide events, early closures before holidays, or any other date that deviates from the normal weekly schedule.
How Schedules Affect the Platform
| Area | Behavior Outside Business Hours |
|---|---|
| Chat Widget | The widget displays an offline state. Depending on your configuration, it may show an offline message, display a contact form for email follow-up, or hide entirely. |
| Routing | Conversations that arrive outside business hours are not routed to agents. They enter the queue and are served when the schedule becomes active again. |
| Conversation Flows | The SCHEDULE_CONDITION node in conversation flows can branch logic based on whether the current time falls within a specified schedule. This allows you to provide different automated responses during and outside business hours. |
Multiple Schedules
You can create as many schedules as you need. Common patterns include:
- Regional schedules — separate schedules for US, EMEA, and APAC teams, each in their respective timezone.
- Team-specific schedules — a sales team operating Monday through Friday 9–5, while a technical support team operates Monday through Saturday 7am–10pm.
- Extended hours — a primary schedule for core hours and a reduced-staff schedule for evenings and weekends.
All schedule times are stored internally in UTC and converted to each user's configured timezone for display. When configuring a schedule, you enter times in the schedule's designated timezone—the system handles the conversion automatically. Make sure your team members have their timezone preferences set correctly in their profile settings.
Tips & Best Practices
Routing Strategy Selection
- Start with ROUND_ROBIN or FEWEST_ACTIVE. Both strategies provide reliable workload distribution without requiring additional configuration. ROUND_ROBIN is simpler to reason about; FEWEST_ACTIVE adapts better to variable conversation complexity.
- Use BROADCAST only for small teams (eight or fewer agents) where speed-to-answer is the top priority. On larger teams, the constant notifications become disruptive.
- Reserve SKILL_MATCH for teams with clearly differentiated specializations. It requires maintaining agent skill profiles, which adds ongoing administrative overhead. Only adopt it when the routing accuracy benefit justifies that cost.
Ticket Selection
- PRIORITY_FIFO is the right default for most teams. It respects urgency while maintaining fairness within each priority tier.
- Switch to SLA_BREACH if you have contractual SLA commitments. Ensure every ticket type has an SLA policy configured, or tickets without SLAs may be perpetually deprioritized.
- Consider ROUND_ROBIN_CONTACTS if you have enterprise customers who submit high volumes of tickets and risk starving other customers in the queue.
Team Organization
- Use custom ticket prefixes to differentiate teams. When agents, supervisors, and customers reference ticket IDs, the prefix makes it immediately clear which team owns the conversation.
- Keep team sizes manageable. Large teams (more than 20–25 agents) can be harder to supervise effectively. Consider splitting into sub-teams by specialty or shift.
- Mirror your organizational structure. Create teams that reflect your support specialties or departments for intuitive routing and clear ownership.
Agent Status and Capacity
- Create custom status labels that match your workflow. If your agents have regular training sessions, add a "Training" label. If they do back-office work between chats, add a "Back Office" label. The more accurately agents report their status, the better supervisors can manage staffing.
- Set realistic capacity limits. Overloading agents degrades response quality and increases burnout. Start conservatively (3–4 concurrent chats for experienced agents, 1–2 for new agents or complex support) and adjust based on quality metrics.
- Monitor queue depth and wait times. If queues consistently grow during certain hours, that is a signal to add capacity—either by adjusting schedules, adding agents, or increasing
maxConcurrentPerAgentcautiously.
Permissions and Security
- Follow the principle of least privilege. Assign the minimum permissions each user needs. Extend access with permission sets only as specific needs arise.
- Create reusable permission sets for common patterns. Instead of granting individual permissions to each user, define sets like "Report Viewer" or "Channel Manager" that can be consistently applied across users.
- Audit permissions regularly. As your organization grows and roles evolve, review who has access to what. Remove permission sets that are no longer needed.
- Use INTERNAL_USER for non-support staff. Employees who only need service desk access and team chat should not have Agent or Supervisor roles. The INTERNAL_USER role provides exactly what they need without exposing customer-facing functionality.
Business Hours
- Configure business hours before going live. Incorrect or missing business hours can result in the chat widget showing as online when no agents are available, leading to poor customer experience.
- Add holiday exceptions in advance. Set up the full year's holidays at the beginning of each year so you do not scramble to add them the day before.
- Use the SCHEDULE_CONDITION node in conversation flows to provide different experiences during and outside business hours—for example, offering an offline contact form or automated FAQ responses after hours.