What This Guide Covers
Spur's shared inbox isnt just a place where messages land. It's a thoughtfully designed ticketing system built to handle the chaos of real customer conversations across WhatsApp, Instagram, Facebook, and your website.
Whether you're a solo operator or running a team of 10, the system adapts. AI handles the repetitive stuff. Humans jump in when it matters. Tickets get assigned, reassigned, or left unassigned based on intentional rules, not random logic.
This guide walks you through how it all works, including the edge cases most platforms dont even think about.
How Tickets Get Created
Every time a customer messages you on any channel, a ticket gets created automatically.
One conversation = one ticket.
If the same person messages you on WhatsApp, Instagram, and Facebook, you get three separate tickets. Why? Because those are three separate conversations. The system doesnt merge them. It treats each channel independently.
What this means for your team:
If "Jack" hits you up on Instagram and also on WhatsApp, you wont automatically know its the same Jack unless he tells you. The system doesnt cross reference phone numbers or usernames across platforms. So if Jack says "Hey, Im the same Jack who messaged on WhatsApp," your agent will have to connect the dots manually.
Why it's designed this way:
Because customers dont always use the same number or handle across channels. Forcing a merge would create more confusion than clarity. Instead, Spur gives you clean, isolated tickets per channel so nothing gets tangled.
How Tickets Get Assigned
Spur's assignment logic is built around one principle: whoever replies, owns the ticket.
Heres how it works in practice:
AI Handles It First (If Enabled)
If you've turned on the AI agent for a channel, it responds first. The ticket stays with the AI until one of two things happens:
The customer confirms the AI helped them (ticket closes)
The customer asks for a human (ticket escalates)
Important: The AI doesnt close tickets on its own. If you have the "Did I help?" setting enabled, the AI will explicitly ask before closing. If the customer says "yes" or "got it" or "all good," the ticket closes. If they say "no" or "I need more help," it stays open, The AI attempts to help them more, and if they still say "I want a human to be brought in the loop," it will open the ticket and assign the default assignee human to take over.
If the "Did I help?" setting is off, the ticket stays with the AI unless the customer says something like "I need to talk to a human" or "agent." When that happens, the AI uses the escalate to human action (if enabled) and hands it off.
Where does it go when escalated?
If you have a default assignee set, it goes to them.
If you dont, it drops into Unassigned and waits for someone to grab it.
Humans Take Over
When a human agent replies to a ticket, it gets assigned to them. Doesnt matter if it was with the AI before, or with another agent, or sitting in Unassigned.
Reply = assignment.
Example:
Agent A is handling a ticket. Agent B jumps in and replies. Now its Agent Bs ticket.
Does Agent A get notified?
Nope. They come back later, check their inbox, and realize its gone. They can go to the "All" tab and see it got reassigned because someone else responded.
Why it works this way:
Because in real teams, people jump in to help without asking permission. The system reflects that. Whoever's actively engaging with the customer should own the ticket.
Two Agents Reply at the Same Time
Both messages go through. The ticket gets assigned to whoever sent the last message—even if its just a one second difference.
Does anyone get a warning?
No. Agents have to coordinate on their own. If they both reply within the same second, one of them will back off once they realize.
Why it's designed this way:
Because blocking replies would slow things down. The system prioritizes speed over preventing overlap.
What Happens When Tickets Reopen
If a customer replies to a closed ticket, it reopens and a new ticket is opened in the same chat. Simple.
Example:
3pm: Customer asks a question. AI helps them. They say "thanks." Ticket closes.
5pm: Customer replies "actually, I need more help." New ticket opens.
Does it create a new ticket?
Yes, new ticket, but same conversation/chat. Doesnt matter if its 2 hours later, 3 days later, or 50 days later.
Who gets assigned when it reopens?
If it was closed by the AI, the AI picks it back up.
If it was closed by a human, the ticket first comes to the AI as a new opportunity for it t help them if you have AI activated on your workspace, if not, it will go to the default assignee.
What Happens When Someone Gets Removed from the Workspace
If a ticket is assigned to Agent A, and Agent A gets offboarded, the ticket goes back to Unassigned.
The system doesnt reassign it to someone else automatically. Your team has to manually grab it.
What Working Hours Actually Do
Working hours dont affect assignment logic at all.
Heres what they do affect:
If a message comes in during working hours, the customer gets one type of auto reply (e.g., "Hey, well get back to you shortly").
If a message comes in outside working hours, they get a different message (e.g., "Were offline right now, but well reply when we're back").
In both cases, the ticket still opens. It still goes to the default assignee (if set) or Unassigned (if not).
Example:
Agent A is handling a ticket at 6pm. Your working hours end at 8pm. The customer replies at 11pm. The ticket stays with Agent A. It doesnt get reassigned just because working hours ended.
Why it works this way:
Because working hours are for customer expectations, not internal workflows. If an agent is already handling something, they should keep handling it.
What Happens If Theres No Default Assignee
If you dont set a default assignee, every escalated ticket goes to Unassigned.
Do agents get notified?
No. No badge. No ping. No email.
They have to check the Unassigned tab manually and grab tickets themselves.
Why it's designed this way:
Because some teams want full control over who picks what. Setting a default assignee is optional. If you dont want one, the system wont force one.
What Happens Across Multiple Channels
If a customer messages you on WhatsApp, Instagram, and Facebook, you get three separate tickets.
Does the system tell you its the same person?
No. You have to figure it out manually.
Can you merge contacts?
No. Each channel creates its own contact. If Jack messages from two different WhatsApp numbers, you get two separate "Jack" contacts. You can rename them (Jack Phone 1, Jack Phone 2) if you want, but theres no way to merge them.
Why it works this way:
Because customers use different numbers and handles for different things. Forcing a merge would cause more problems than it solves.
What If Your Team Is Drowning in Messages?
The system doesnt have a "you're underwater" alert.
If 500 messages come in at once, your team has to deal with it. Theres no automatic priority queue or overflow warning.
What you can do:
Set a default assignee so things dont pile up in Unassigned
Use AI to handle the easy stuff
Train your team to check Unassigned regularly
Why This System Works
Most platforms treat tickets like static objects. Spur treats them like conversations.
The assignment rules arent arbitrary. They're designed around how real teams actually work:
Whoever replies, owns it = no bottlenecks
AI handles the repetitive stuff = humans focus on what matters
Tickets reopen instead of duplicating = clean conversation history
No forced merges across channels = less confusion
This isnt just a shared inbox. Its a ticketing system built for the busiest of scenarios.
Quick Reference
Scenario | What Happens |
Customer messages on 3 channels | 3 separate tickets |
AI helps, customer confirms | Ticket closes |
Customer replies to closed ticket | Same ticket reopens |
Two agents reply at once | Last reply wins the assignment |
Agent gets offboarded | Ticket goes to Unassigned |
Message comes in after hours | Ticket still opens, assignment unchanged |
No default assignee set | Everything goes to Unassigned |
Customer uses a new number | New contact, no merge |
Need help setting this up? Hit us on chat.