Support tickets
Let members open a private support ticket from a button or a command. Each ticket is its own private space where the member and your staff can talk things through, and every conversation is saved as a transcript you can read later on the dashboard, even after the channel is gone.
The Tickets feature is off by default and depends on your plan. Turn it on from the Features page (if your plan includes it), then set it up on the Tickets pages in the sidebar.
How a ticket works
- A member clicks the Open a ticket button on a panel you posted, or runs
/ticket open. - They pick a category (for example Support or Bug report) if you have more than one.
- If that category asks questions, they fill in a short pop-up form.
- The bot opens a private channel or thread that only the member and your support roles can see, and pings your staff.
- Staff claim the ticket to show they are handling it, chat with the member, then close it when it is sorted.
- If it turns out the problem is not sorted after all, staff can reopen the ticket, as long as its channel still exists.
Tickets can also be opened, closed and reopened for you by an automation or through the developer API.
Setting it up
Open Tickets → Configure in the sidebar (it appears once the feature is on). There are three tabs.
Categories
A category is a kind of ticket. For each one you choose:
- A name and an optional description (shown to members when they pick a category).
- The container: a private channel or a private thread.
- Where it is created: the channel category to group new channels under, or the parent channel for threads.
- The support roles that can see and help with these tickets. They are also pinged when a new ticket opens.
- Intake questions: up to five short questions the member answers in a pop-up form when they open the ticket. Their answers are shown at the top of the ticket and saved with the transcript.
Panels
A panel is the message that carries the Open a ticket button. Give it a name, choose the channel to post it in, optionally set a title, description, and colour, then Publish to post (or update) it. Members click the button to start.
You can also skip panels entirely and let members use /ticket open.
Settings
Server-wide options for tickets:
- Default container (channel or thread).
- Channel name and welcome message templates.
- Auto-close tickets after a stretch of inactivity (off by default).
- Delete the channel a set time after a ticket closes. The transcript is always kept either way.
- A first-response target so you can spot tickets that waited too long for a reply.
- A rate limit so a single member cannot open a flood of tickets at once.
- Whether to ping the support roles when a ticket opens.
Handling tickets
Staff can work tickets right in Discord using the Claim and Close buttons on the ticket message and the /ticket commands.
Closing is archiving
When a ticket closes, the bot locks it. The member can still read everything, but nobody can write in it anymore. The closed ticket stays like that, as an archive, until the Delete the channel timer from the settings removes the channel. If that timer is off, the closed ticket stays forever. The transcript is kept on the dashboard in both cases.
Reopening a ticket
The message the bot posts when a ticket closes has a Reopen button. Only support staff (and whoever claimed the ticket) can use it. You can also run /ticket reopen inside the closed ticket, or press Reopen on the ticket's page in the dashboard.
Reopening unlocks the ticket again, so the member can write in it, and cancels the planned channel delete. If the ticket was claimed before it closed, it comes back claimed by the same person. A ticket whose channel was already deleted cannot be reopened. Reopening counts towards your plan's limit of open tickets, just like opening a new one.
You can also manage everything from the dashboard. Open Tickets in the sidebar:
- The list shows open, claimed, and closed tickets, with filters by status and category.
- Open any ticket to see its details, participants, timeline, and full transcript.
- From there you (or your staff) can claim, close, reopen, add a member, or remove a member.
- The timeline shows who did what. When an automation or the developer API did something, the timeline says so, for example Closed by automation "Cleanup" (triggered by Sam in Discord).
- The Stats page shows open and closed counts, how quickly tickets get a first reply, missed response targets, and how many tickets each staff member claimed and closed.
Slash commands
| Command | Who can use it | What it does |
|---|---|---|
/ticket open | Anyone | Open a new ticket (pick a category, fill the form). |
/ticket claim | Support staff | Claim the ticket in this channel. |
/ticket close | Staff or the opener | Close the ticket in this channel. |
/ticket reopen | Support staff | Reopen the closed ticket in this channel. |
/ticket add <user> | Staff or the opener | Add a member to this ticket. |
/ticket remove <user> | Staff or the opener | Remove a member from this ticket. |
Tickets and automations
Automations have three ticket actions:
- Open ticket opens a ticket in the category you pick. If the server has no ticket category yet, the New category button next to the list makes one right there. You can give the ticket a subject, which may use placeholders such as
{user.name}. The usual open ticket limit and rate limit still apply.- Open the ticket about chooses who the ticket is for: the member the trigger is about (for "role assigned", the member who got the role), or the person who caused it (the person who gave the role, the moderator who kicked someone). The second choice only shows up for triggers that know who caused them.
- Give them access to the ticket is on by default, so that person can see and write in the ticket. Switch it off for a staff-only ticket: the person is named in it, without a ping, but only your support roles can see it. Handy for "a member got the Suspect role, open a ticket for the moderators to look into it". Staff-only tickets have their own rate limit (the same numbers as in the settings), so they never stop the member from opening their own ticket. "The member's tickets" in Close and Reopen ticket never picks a staff-only ticket about them.
- Close ticket closes the ticket in the channel the trigger happened in, all open tickets of the member, or, for channel and thread triggers, the ticket whose channel or thread the trigger is about. A handy example is "when a member leaves, close their tickets".
- Reopen ticket reopens the closed ticket in the channel the trigger happened in, the member's most recently closed ticket, or, for channel and thread triggers, the closed ticket whose channel or thread the trigger is about.
The editor only offers the choices that make sense for your trigger. Close and Reopen ticket don't show up at all on triggers that have no member and no channel, like "role created". These actions only show up when the Tickets feature is on. Whatever an automation does is recorded in the ticket's timeline and in the audit log as done by that automation, together with the person who set it off. That is the member who sent the message or joined, the moderator who did something, or, for an automation started through the developer API, the owner of the API key.
Tickets and the developer API
With the developer API your own apps can list tickets, read a ticket with its history and transcript, and open, close and reopen tickets. Anything done this way is recorded as done through the developer API by the owner of the key.
Transcripts
Every message in a ticket is saved as it is sent and finalised when the ticket closes, so the full conversation stays on the dashboard even after the Discord channel is deleted. Open any ticket from the Tickets list to read it back.
Tagging roles, members and channels
In the Welcome message and Close message boxes you can type @ to tag a role or member, or # to link a channel, the same way as on Send a message. Each role and member tag gets a Ping switch underneath. Ping means Discord sends those people a notification, and Tag only shows the tag without notifying anyone. @everyone and @here start on Tag only, so nobody pings the whole server by accident.
If a member leaves, or a role or channel is deleted, the tag keeps showing its old name when you edit the message, but you can no longer pick it again. In Discord it then shows as a broken tag.
The Embed description of a ticket panel can have tags too, but they never ping because the panel is an embed.