Skip to content

BlogGuides

How to Open a Ticket in Discord (and What Decides If It Opens)

Members open a ticket by pressing a button on a panel. Behind that press sit five steps in a fixed order, and five routes in that do not all pass them.

Dani, Founder, AI Ticket Bot

9 min read

From the member's side, opening a ticket is one click and a channel appears. From the admin's side it is the moment where your settings do the deciding, and every "the button does not work" report is one of them firing correctly.

How do you open a ticket in Discord?

Short answer: press the button on the server's ticket panel, or run /ticket open. A panel is a pinned post, usually in a channel called support or help, carrying either one button per reason or a dropdown of categories. Choosing one is the whole action. The bot replies privately with a link, and the ticket is a channel or a private thread only you and the support team can read.

  1. Find the panel

    A pinned post in the server's support or help channel, listing the reasons you can write in about

  2. Pick the category

    One button, or one option in the dropdown. This decides which team sees it and what happens next

  3. Answer the form, if there is one

    A pop-up with up to five questions. The ticket opens when you submit it

  4. Describe the problem in the new channel

    The bot sends you a private link straight to it

If the panel is buried under a month of messages, /ticket open reaches the same place from any channel. Anyone can run it, it asks for the panel and then the category with autocomplete on both, and from there the flow is identical.

What happens between the button and the channel

A Discord ticket bot does not create anything the moment a button is pressed. It runs a short sequence first, and which step stops you decides the message you get back.

OrderThe stepWhat it looks at
1BlocklistThe member, any role they hold, and whether the whole server is blocked
2Panel and categoryThat both still exist and belong to this server
3Open ticket limitHow many tickets this member already has open on this panel
4Working hoursWhether the panel is inside its support window, on paid plans
5The formIf the category has one, it opens now and nothing is created until it is submitted

The order is the useful part. The blocklist is read before the panel is even resolved, so a blocked member gets the same answer whether they aim at a live category or a deleted one, and the first three checks all happen before a channel exists, so a refusal leaves nothing to tidy up.

Step five has a wrinkle. A Discord pop-up can sit open for ten minutes, so the checks run again on submit. Somebody can pass every one, type out their order number, and still be told no, because in the meantime they opened a ticket elsewhere or a moderator blocked them.

The five ways a ticket actually opens

Most servers only think about the button. There are five routes in, and they do not all pass the same checks.

RouteWho uses itWhat it skips
The panel button or dropdownAny memberNothing
/ticket openAny memberNothing. It is the only route that checks the panel is actually published
/ticket open with open_forStaff with the right permissionThe intake form and the working hours window
The website chat widgetA visitor on your site, with no Discord accountEvery Discord check, because there is no Discord account to check
A connected third-party ticket botWhoever uses that bot's panelAll of ours. The other bot opens its channel, and we attach to it

The widget is the interesting one for anybody designing intake. The blocklist and the open ticket limit are both Discord identity checks, and a visitor on your website has no Discord identity at all, so those two are replaced by a domain allowlist and a cap on how many chats can be open at once. A blocklist entry does not follow somebody to the widget, and the same caution applies to a ticket bot you already run: that route opens in the other bot's flow, so its rules apply and ours do not.

How staff open a ticket for somebody else

This is the route almost nobody knows exists, and it solves a daily annoyance: somebody asks a real question in general chat, and telling them to go and press a button loses half of them.

/ticket open takes an optional open_for pointing at a member. The ticket is filed as theirs rather than yours, they receive a direct message with a button that jumps straight into it, and the audit log records both names separately, so a staff-opened ticket is never confused with one the member started.

/ticket open
Pick a panel and a category. Opens a ticket for yourself
/ticket open open_for:@member
Opens it for them instead, and sends them the link

It is its own staff permission, called Open tickets for others, and that is deliberate. Opening on somebody's behalf skips the intake form and ignores the working hours window entirely, because a staff member asking for a ticket at two in the morning has already made that decision. What it does not skip is the member's own situation: if they are blocked, or already at their limit on that panel, it refuses and names which.

Opening a ticket for a member is not the same as pulling one into a ticket that already exists, which is a different command with different rules: adding somebody to a ticket.

What a member sees when a ticket will not open

Every refusal is a private message that only the member sees, naming a reason. There are five, and each has a different owner.

What they are toldWhat it meansWho fixes it
You are blocked from opening tickets hereThey, or a role they hold, are on the blocklistStaff, with the blocklist command
The panel is not publishedThe panel exists but was never posted, or was unpublishedAn admin, in the panel editor
You already have as many tickets open as one member is allowedTheir previous ticket was never closedUsually the member, by closing it
The category is fullDiscord allows 50 channels in one categoryAn admin, by closing old tickets or turning on overflow
The bot cannot create channels thereA missing permission on the ticket categoryAn admin, and the message names the permission

The third row is nearly always an abandoned ticket holding the slot. Closing a Discord ticket goes through who may close one and what a close leaves behind.

The fourth row has a fix. That 50 channel cap is Discord's, not ours, but on paid plans you can switch on category cloning and the bot moves the overflow into a sibling category by itself. It needs both the plan and the toggle, which sits with the other server-wide ticket switches.

Open tickets per member, per panel

Free
1
Premium
3
Pro
5

Those are ceilings, not settings. The number you run is set per panel in the panel editor, up to what your plan allows, so a quiet appeals panel can sit at one while general support allows three.

What arrives once the ticket exists

The member gets a private confirmation with a button that jumps into their new ticket, and the ticket opens with a welcome message. That message is yours to write, per panel, on every plan including the free one, and it is the cheapest thing here to improve: a line telling the member what to include saves a round trip on every ticket that panel takes.

If a responsible role is set on the panel or the category, it is pinged in the ticket as a separate short message. If none is set, nothing is pinged at all and staff find tickets by watching the channel list. Setting it per category is what makes categories worth more than a menu.

The AI, if it is on for that category, writes first. Without a form it opens with a greeting and waits. With a form it has the answers already and its first message is an attempt at the actual answer, which is the argument for asking questions at the door.

Their confirmation in that window carries no jump button, because the channel is not theirs to see yet. Worth a line in your panel description, so the wait does not read as a failure. More in stopping spam tickets.

Across the bot's lifetime, roughly half of all tickets closed with no human replying at all, and the first reply lands in seconds at any hour.

How the resolution figure is defined

Sample
Every ticket handled across the bot's lifetime, V1 and V2 combined
Window
Lifetime to date, refreshed continuously rather than pinned to a date
Definition
Resolved by AI means the AI closed the ticket with no human stepping in at any point. If a staff member replied, it does not count

When the panel is the wrong front door

A ticket panel fits when

  • The question needs a private, one-to-one conversation
  • Someone needs to hand over an order number, a screenshot or an account detail
  • You want the exchange archived after it closes
  • Different reasons should reach different teams

Reach for something else when

  • The same question is asked publicly ten times a day
  • The answer is already written down and just needs to be findable
  • You want a queue members can browse and vote on
  • You need a form filled in but no conversation afterwards

The common mistake is running everything through tickets. A question a hundred people have is a channel answer, not a hundred private channels, and a bot that opens one for each of them is doing exactly what you asked and still costing you the afternoon.

One structural limit to plan around: there is no reopening. Closing a ticket deletes the channel and leaves a transcript, so coming back to the same problem means a new ticket. Members can find their own past ones with /mytickets, and ticket history covers what they see there.

What it costs to find out

The free plan runs one panel with five categories, one open ticket per member at a time, 90 days of transcripts, and the AI included rather than held back as the upsell. Publishing your first panel then starts 14 days of Premium automatically, with no payment method at any point and nothing to cancel, which is when forms and working hours switch on. One per server, permanently.

Frequently asked questions

Find the ticket panel, which is usually a pinned post in a channel called support or help, and press the button or pick from the dropdown for the reason you are writing in about. The bot answers you privately with a link to a new channel that only you and the support team can read, and you describe the problem there. If the server asks a few questions in a pop-up first, fill those in and the ticket opens once you submit.

Yes. The /ticket open command does the same thing from anywhere in the server, and anyone can run it. You pick the panel and then the category, both from autocomplete, and the ticket opens exactly as it would from the button. It is the route to use when the panel channel is buried, when you are on mobile, or when a member cannot find the post at all.

Yes, with /ticket open and the open_for option pointing at that member. The ticket is filed as theirs, they get a direct message with a jump button, and the audit log records both of you. It needs the Open tickets for others staff permission or Manage Server, because it deliberately skips the intake form and the working hours window that a normal open has to pass.

Per panel. The limit is on how many tickets one member can have open at the same time on one panel, so a server running a support panel and a separate appeals panel gives every member a slot on each. There is no cap on how many tickets a server holds in total, and none on how many one member opens over their lifetime. Closing a ticket frees the slot immediately.

Two causes account for nearly all of it. If anti-DM protection is on, the channel is created without them and they are added a few seconds later on purpose, so a short wait is normal. If the server runs tickets as private threads, Discord requires the member to be able to see the parent channel before they can see any thread inside it, even one they were added to, so a thread panel pointed at a staff-only channel produces a ticket nobody outside the team can read.

Only if a responsible role is set on the panel or on the category, in which case that role is pinged in the new ticket as a separate message right after the welcome. Without one, nothing is pinged and staff find tickets by watching the category. Set the role per category when different teams handle different reasons, so a billing question does not ping everybody.

It’s not just an AI, it’s your AI.

See it on your own server.

Add the bot free, teach it a few of your most common answers, and watch it clear the repeat tickets on its own.

Free plan, no card. Your first panel starts 14 days of Premium.