A support ticketing system in Bubble uses a Ticket Data Type with categories, priorities, and assignment rules to route requests to the right team. This tutorial covers building ticket submission forms, assignment workflows, escalation logic, SLA tracking, and an agent dashboard for managing open tickets efficiently.
Overview: Building a Support Ticketing System in Bubble
This tutorial walks through building an internal support ticketing system for IT, HR, or facilities requests. You will create a ticket submission flow with categorization, automatic assignment based on category, escalation workflows for overdue tickets, SLA tracking, and an agent dashboard for managing and resolving tickets.
Prerequisites
- A Bubble account with an app
- User accounts for agents/support staff
- Understanding of Bubble Data Types and workflows
- Familiarity with backend workflows for automation
Step-by-step guide
Create the Ticket and Agent Data Types
Create the Ticket and Agent Data Types
In the Data tab, create a Ticket Data Type: title (text), description (text), category (Option Set: IT, HR, Facilities, Finance), priority (Option Set: Low, Medium, High, Urgent), status (text: open/in-progress/waiting/resolved/closed), submitter (User), assigned_to (User), created_at (date), resolved_at (date), sla_deadline (date). Create an Agent_Profile Data Type: user (User), categories_handled (list of Option Set), is_available (yes/no), current_tickets (number). Create a Ticket_Comment Data Type: ticket (Ticket), author (User), text (text), is_internal (yes/no), created_at (date).
Expected result: Complete database schema for the ticketing system with tickets, agents, and comments.
Build the ticket submission form
Build the ticket submission form
Create a 'submit-ticket' page with: Input for title, Multiline Input for description, Dropdown for category (sourced from Option Set), Dropdown for priority (default: Medium), and a File Uploader for attachments. Add a Submit button. The workflow: create a new Ticket with all field values, set status to 'open', set created_at to now, and calculate sla_deadline based on priority (Urgent: 4 hours, High: 8 hours, Medium: 24 hours, Low: 48 hours). Then trigger the auto-assignment workflow. Show a confirmation with the ticket number.
Pro tip: Auto-generate ticket numbers with a format like 'TK-' followed by a timestamp for easy reference.
Expected result: Users can submit tickets with category, priority, and description through a clean form.
Implement automatic ticket assignment
Implement automatic ticket assignment
Create a backend workflow called 'assign-ticket' with a Ticket parameter. Search for Agent_Profiles where categories_handled contains the Ticket's category AND is_available is yes, sorted by current_tickets ascending (assigns to the least-loaded agent). Make changes to the Ticket: assigned_to = first result's user. Make changes to the Agent_Profile: current_tickets = current_tickets + 1. Send an email notification to the assigned agent. If no available agent is found, keep the ticket unassigned and send an alert to the admin.
Expected result: New tickets are automatically assigned to the least-loaded available agent handling that category.
Build the agent dashboard
Build the agent dashboard
Create an 'agent-dashboard' page. Add filter tabs: My Tickets, Unassigned, All Open. Add a Repeating Group showing Tickets filtered by the active tab (My Tickets: assigned_to = Current User AND status is not closed). Each row shows ticket number, title, category badge, priority badge (color-coded: red for Urgent, orange for High, yellow for Medium, green for Low), submitter name, created time, and SLA countdown. Clicking a ticket opens the detail view. Add summary counts at the top: Open, In Progress, Overdue (sla_deadline < now AND status is not resolved).
Expected result: Agents see a dashboard of their assigned tickets with priority indicators and SLA countdowns.
Create the ticket detail view with comments
Create the ticket detail view with comments
Create a 'ticket' page (type: Ticket) showing all ticket details, a status change dropdown (agents can update status), and a Comments section. The Comments section has a Repeating Group of Ticket_Comments sorted by created_at, with each showing author, timestamp, text, and an 'Internal' badge for internal notes. Add a Multiline Input, a Checkbox for 'Internal note' (visible to agents only), and a Post Comment button. The workflow creates the comment. When status changes to 'resolved', set resolved_at to now and decrement the agent's current_tickets count.
Expected result: Agents can view ticket details, update status, and communicate via comments with internal note support.
Implement SLA tracking and escalation
Implement SLA tracking and escalation
Create a scheduled backend workflow called 'check-sla' that runs every 15 minutes. It searches for Tickets where sla_deadline < Current Date/Time AND status is not resolved/closed. For each overdue ticket, send an escalation email to the assigned agent and their manager. If a ticket has been overdue for more than double its SLA period, auto-escalate by reassigning to a senior agent. Log escalation events in a Ticket_Comment as an internal system note. Add an SLA status indicator on the dashboard: green (within SLA), yellow (within 1 hour of deadline), red (overdue).
Expected result: Overdue tickets are automatically flagged, escalated, and reassigned with email notifications.
Complete working example
1TICKETING SYSTEM SUMMARY2=========================34DATA TYPES:5 Ticket: title, description, category, priority, status,6 submitter (User), assigned_to (User), created_at,7 resolved_at, sla_deadline8 Agent_Profile: user, categories_handled (list), is_available,9 current_tickets (number)10 Ticket_Comment: ticket, author (User), text, is_internal, created_at1112SLA DEADLINES BY PRIORITY:13 Urgent: created_at + 4 hours14 High: created_at + 8 hours15 Medium: created_at + 24 hours16 Low: created_at + 48 hours1718AUTO-ASSIGNMENT:19 Backend workflow: assign-ticket20 Search Agent_Profiles:21 categories_handled contains ticket's category22 is_available = yes23 Sorted by current_tickets ascending24 Assign to first result (least loaded)2526ESCALATION (every 15 min):27 Backend workflow: check-sla28 Search Tickets: sla_deadline < now AND not resolved29 For each:30 Email agent + manager31 If 2x overdue: reassign to senior agent32 Log escalation as internal comment3334STATUS FLOW:35 open → in-progress → waiting → resolved → closed3637DASHBOARD VIEWS:38 My Tickets: assigned_to = Current User, not closed39 Unassigned: assigned_to is empty, status = open40 All Open: status is not closed41 Overdue: sla_deadline < now AND not resolvedCommon mistakes when developing a ticketing system in Bubble.io: Step-by-Step Guide
Why it's a problem: Not calculating SLA deadlines based on priority level
How to avoid: Calculate sla_deadline dynamically: Urgent = 4h, High = 8h, Medium = 24h, Low = 48h from creation time
Why it's a problem: Forgetting to decrement the agent's ticket count when a ticket is resolved
How to avoid: When a ticket status changes to 'resolved', decrement the assigned agent's current_tickets count by 1
Why it's a problem: Not separating internal and external comments
How to avoid: Add an is_internal field to Ticket_Comment and use Privacy Rules to hide internal comments from non-agent users
Best practices
- Calculate SLA deadlines dynamically based on ticket priority
- Use auto-assignment to distribute tickets evenly across available agents
- Separate internal agent notes from external comments using an is_internal flag
- Run SLA checks every 15 minutes via scheduled backend workflow
- Decrement agent ticket counts when tickets are resolved for accurate load balancing
- Color-code priority levels for instant visual recognition on the dashboard
Still stuck?
Copy one of these prompts to get a personalized, step-by-step explanation.
I need to build an internal IT support ticketing system in Bubble with automatic ticket assignment, SLA tracking, and escalation. Can you help me design the database schema and automation workflows?
Help me build a support ticketing system with categories (IT, HR, Facilities), priority levels, automatic assignment to the least-loaded agent, SLA countdown timers, and escalation for overdue tickets.
Frequently asked questions
Can I integrate this with email for ticket creation?
Yes. Use an email parsing service like Mailgun or SendGrid that forwards incoming emails to a Bubble backend workflow via webhook, automatically creating tickets from email content.
How do I handle ticket categories that need different agents?
The Agent_Profile Data Type has a categories_handled list field. Each agent selects which categories they handle. The auto-assignment workflow matches ticket category to agent capabilities.
Can I add SLA business hours (excluding weekends)?
Yes, but it requires more complex date calculations. Use a backend workflow that calculates the deadline by adding only business hours, skipping weekends and holidays stored in an Option Set.
How do I prevent ticket flooding from one user?
Add rate limiting: before creating a ticket, search for Tickets where submitter = Current User AND created_at > 1 hour ago. If count exceeds a threshold (like 5), block submission and show a message.
Can I track ticket resolution time for reporting?
Yes. The resolved_at field minus created_at gives you the resolution time. Build a reporting page that calculates average resolution time by category, priority, and agent.
Can RapidDev help build a ticketing system?
Yes. RapidDev can build complete support ticketing systems with auto-assignment, SLA management, escalation workflows, reporting dashboards, and email integration.
Talk to an Expert
Our team has built 600+ apps. Get personalized help with your project.
Book a free consultation