Using discourse as ticket system, so no balls are dropped 🤹‍♀️

I know there are other topics here floating around about using discourse as a ticket system, but I thought I’d start a fresh one to give a fairly complete picture of how we think discourse can be used with the current functionality, known issues, and what fixes/new functionality might help. This might also be faq material. Would be psyched to discuss with others trying to do the same thing and any workarounds you’ve found that I am missing so far.

Also quite pleased to discover a whole genre of juggling videos on youtube that I was not aware of before. I aspire to be this guy.

How it works

No balls are dropped when handling correspondence with a ticket system, because each ticket is assigned to someone, is given a priority level and progress status. Everyone knows when a ticket is closed because it is marked as resolved.

Discourse is not designed explicitly to be used as a ticket system but it works quite well for it! Use the following features:

  • messages - title indicates what ticket is about. members and groups include the people involved.
  • tags - to indicate tickets and their status/priority
  • assign - to indicate who is the “owner” of tickets
  • reminders - to remind ourselves to follow up on tickets
  • whispers - to discuss amongst ourselves how to handle a ticket
  • solved - to indicate that a ticket has been answered (optional)

We have a tag for #ticket which “unlocks” the priority and status tag groups. These we only use for messages we want to use as tickets so we don’t drop the ball. Only one priority and one status tag can be used at once. These tags are not visible to non-moderators and can’t be used by them.

Using the ticket system

The member support team will continually be checking messages to make sure any that need responses will be made into tickets that are then taken through to resolution on a timely basis. Everyone else should be using the ticket system according to their role, responding quickly when asked to help the process along, and handling any tickets assigned to them. The assigned message list is a great place to check on a regular basis for tickets assigned to you.

  1. Start by assigning a message to yourself or someone else, who becomes the “owner” of the ticket and should pursue it until it is given the tag status-resolved. Once assigned, don’t unassign the ticket without assigning to someone else. Even once resolved, every ticket remains assigned to someone.
  2. Next, use tags to turn messages into tickets by adding the ticket, priority and status tags. These are only visible to moderators - see below for explanation of how we use them. Adding tags is done by editing the title of an existing message. Start with the ticket tag, which unlocks the ability to also add status and priority tags. Start typing status and priority into the tags field and it will autocomplete. Just choose the tag you want and you’re done. As you handle the ticket and move through the process from status-new to status-resolved, update the tags accordingly.
  3. use whispers to bring in other moderators to help with resolving whatever the message or topic is about, and to explain any details in private as needed for future reference.
  4. optionally use solved to select a reply that encapsulates the solution/resolution. This is very helpful for future reference. [color=red]Note: do not use the solved button on whispered replies as non-moderators cannot see those[/color]
  5. use reminders when status is set to #status-waiting for reply, to follow up within a reasonable period. The goal is to resolve topics as quickly as possible and to never drop any balls.

Status tags

  • #status-new New. Nothing has happened yet. This ticket is available for you to assign to yourself if you want to take it on or to assign to someone else if you think they are a better fit.

  • #status-underway Has been assigned and is currently being worked on.

  • #status-waiting Has been assigned and the owner has taken action, and is now waiting for a response from the member or someone else. It’s a good idea to set a reminder to follow-up in a week or so, depending on the priority.

  • #status-resolved All done! :rocket:

  • #status-backburner On the backburner. You’re not getting anywhere with this ticket or it’s fine to take care of this in a few weeks or months from now. Do keep an eye on these tasks and take care of them, even if it means giving up and adding a note to the bottom that you are giving up and move it to #status-resolved. The backburner is not intended to be a graveyard.

Priority tags

  • #priority-immediate Drop everything and do this first.

  • #priority-urgent Do this today, once you’ve finished the immediate priority tasks and before you take on high and normal priority tasks.

  • #priority-high More important than normal priority tickets, but can probably still wait a few days.

  • #priority-normal Most tickets have this priority.

  • #priority-low Not quite on the backburner but not as important as normal priority tickets.

Known issues

  • It is possible to use the :mag: advanced search to drill down in messages as well as topics. The bulk admin actions tool (wrench in top right that appears when you select a few messages/topics) is intended for topics so don’t use it for messages. Reported to developers.
  • The bulk actions available in message lists is too limiting - all you can do is archive.
  • Ticket tags are showing up in the /tags page. update: fixed!
  • minor: when mentioning ticket tags in messages, the count of mentioned messages is zero in the pulldown autocomplete list. Meanwhile, mentioned tickets link to the /tags list. This is because it refers to topics not messages.
  • It’s only possible to filter by one tag in message lists, but we want to filter by two tags (priority and status). To do that you have to use advanced search. Not sure what the UX answer is for this to propose - maybe add a second tag pulldown, or the ability to add multiple tags to the pulldown search.
  • It’s possible to use ticket tags on topics as well, but it is not possible to hide them from view from anyone but moderators so I’m not sure we want to do that.
  • It’s possible to use other tags in messages too, but I’m not yet sure of the implications.

Up next

  • look into using ticket tags to not drop balls on topics as well as messages (if possible eventually to not show)
  • look into using other tags (eg. themes, countries) on messages
  • email-in to member support team and other role-based email addresses (to start tickets via email)
  • figure out how to bulk add ticket tags to backlog of messages that might need handling/that have been resolved
  • staged users (to start messages with email correspondents who are not yet signed up. Can still be supported via this procedure. When they do sign up, they have access to the entire history of messages - as long as they use the same email address).

@awesomerobot @sam we could use the mini tag chooser kind of component to achieve this… could be cool indeed. We would also need to change routes/controllers though.


After about a week of this experiment, all appears to be well and my team is happy with it. There is alot of desire to also use ticket tags on topics as well as messages, which appears to work fine. A minor issue is that tags start showing up on the /tags page, with a count of the number of topics with the tag. Not a big deal.

A bigger issue is that it seems to be hard to get a single list of all tickets, since it’s not possible to look at topics and messages by tag at the same time except I think on the advanced search. Some single place to view all tickets in one place, preferably with the ability to filter by multiple tags, assignee and solved/unsolved, would be a huge step forward to using discourse as a ticket system.

Sounds intriguing though I don’t know what it means. :slight_smile:

For now I did an update to discourse 2 days ago and the filter pulldown on the message list seems to have gone away. I can select a tag in tagged messages to filter by the tag but there is no pulldown.

1 Like

For now tag pulldown has been replaced by a tag route on the left:


And {{mini-tag-chooser}} is the component used to affect tags to a topic and support multiple tags, but the issue is not the UI, but that our routes don’t support multiple tags for now. Once we do this I would replace the {{tag-drop}} by a {{mini-tag-chooser}} component and we could filter by multiple tags.


Ah! Funny that I didn’t even notice the new tag route on the left. You guys are moving fast! :rocket:

It’s a good idea to have a tag route on the left which is consistent with the way discourse functions.

However, I liked that pulldown because it allowed us to filter e.g. assigned messages by tag. Right now it looks like it’s not possible to see messages assigned just to me that are tagged status-underway. Or messages in the moderators inbox filtered by tag.

Thing is, it did not, the functionality did not change at all, we never did any filtering.

I totally support adding filters to the list but we got to get the basics working first.

1 Like

Ah - that’s good to know. I hadn’t noticed that in my testing. :slight_smile:

Thanks for the work you’re putting into this - I am happy to help with testing anytime just let me know.


Turning my attention to the ticket system again. I think it’s working quite well for managing various aspects of member engagement in my community, including inviting new people (staged users!), answering questions, nudging members to take advantage of various opportunities etc.

I’m impressed - looking at the “up next” list in my OP above, I have done it all and it works quite well. Staged users I create by writing messages to email addresses - I avoid the email-in staged user creating because it’s still a little unpredictable and I like to have a bit of control. I’ve also upped the ninja edit window for messages to 10 minutes to give me time to make sure the messages look their best.

There are a few features still lacking that I’d like to brainstorm - some of it will likely need to be done in core, but other things might be suitable as a ticket system plugin. Open to ideas.

Having used it for a bit, it seems to me there are 3 main aspects to this - adding tickets, managing/handling tickets, and analyzing ticket system health. I’ve noted some thoughts below on what’s working and what’s not working below.

Creating tickets

Right now, to create a ticket, you edit an existing message or topic to add ticket tags. I have a #ticket staff tag, which ‘unlocks’ the other ticket tags for setting priority, status, reason. Additional tags can be used to help organize the tickets e.g. by country, theme, or language. The priority and status tags only allow one from each, which is helpful.

It’s possible to assign tasks to people, and to schedule reminders, though the interface is a little cumbersome. It’s also not possible to enforce inclusion of all the required tags, assignment and scheduled reminder.

Maybe the trick here would be to add tickets to the assign functionality. E.g. assign a message or topic to someone and be prompted to set ticket status, priority, reason and any other tags, maybe a staff note to the user the ticket is targeting. Then you’re on your way. :rocket:

Managing/handing existing tickets

The only way to see tickets is to browse the messages or topics, which has limited functionality. It displays solved indicator, message title, tags, avatars of users but that’s pretty much it. The only way to see lists of e.g. high priority, new tickets assigned to me is via an advanced search.

  • tags are not in any particular order and are not distinguished from one another (there is a styling customization hack for this)
  • it’s a bit cumbersome to add tags, assign, schedule reminders, and there is no way to require ticket tags (e.g. priority, status). Tags, reminders, etc also have to be manually updated as people reply and the ticket moves through the stages towards completion.
  • there is currently no way to mark a ticket solved if it has no reply. (mentioned this elsewhere)
  • there is no suitable bulk update feature for messages, equivalent to bulk topic editing. selecting and bulk updating scheduled reminder for assignee, updating tags, reassigning, setting solved/unsolved etc would be a big help. (discussed elsewhere)
  • there is no suitable interface for filtering messages by assignee, priority, status, or sorting the list
  • the message list is missing most relevant info.

The following column view might work for a support ticket dashboard, with column sorting and filtering options:

  • title
  • non-ticket tags (e.g. language, location, theme/issue)
  • date created
  • scheduled reminder date
  • ticket tags (one column per tag, filterable/sortable)
  • usernames of users involved (does currently show avatars)
  • username of user who started the ticket
  • username of user who is assigned the ticket
  • ticket is message or topic

I wouldn’t prioritize automation, but it would be helpful to have e.g. status-new tag changed to status-waiting when a reply is sent and the ticket is waiting for a response from the user. And for a reminder to be set automatically for the assignee when a reply is sent, with different intervals based on priority (eg. immediate = tomorrow, normal = 2 weeks, low = 2 months etc). Some sort of easy snooze feature for reminders would also be helpful.

Analyzing health of ticket system

It’s possible to look at lists of tagged tickets, but otherwise there is no immediately apparent way to see stats on overall ticket system health. I wouldn’t want to go overboard here and might want to learn from other ticket systems what is useful to track.

Some ideas for data points that can help here, filterable by assignee, priority, status:

  • number of tickets by status
  • time to completion
  • ratio of tickets by status
  • chart showing completion rates over time

FYI… creating a discourse ticketing plugin is a project at this year’s ruby for good hackathon, starting today. We’ll share updates on our progress. If you have ideas on how this might look or want to help out let us know!


Thank you for this useful post.

On the topic of dropping balls, our team is still concerned about the first critical action: making sure we don’t miss completely a message down in the queue.

Your workflow kicks out when you assign a tag to a message, but what if humans miss tagging a new message for whatever human reason?

Right now we are missing either

  • a way to sort group messages by number of replies, which would put the unanswered always on top - see Provide sortable columns in private messages, similar to latest topics
  • a function to automatically assign a tag like #status-new to all incoming messages
  • a search parameter for “no tag” (so we could monitor the pocket of messages that need to be addressed and only those).

For context, we are using the setup of incoming emails landing in groups.