Version 5 (modified by John Bailey, 10 years ago) (diff)

small tweaks

Canned Responses Plugin

Notice: This plugin is unmaintained and available for adoption.


The CannedResponsesPlugin allows a trac administrator to specify a list of "Canned Responses" for those with the appropriate permissions to use in responding to tickets.

Each canned response can change the status of a ticket, as well as modify the resolution and add a comment. Each response can also be restricted to users with specific permissions. For example, you may wish to have a response that only users with TICKET_ADMIN permissions can use and another which anyone with TICKET_MODIFY or greater permissions can use.

Canned responses will appear as an option in the Action box at the bottom of a ticket for those with the permissions to use any of the available canned responses.

Bugs/Feature Requests

Existing bugs and feature requests for CannedResponsesPlugin are here.

If you have any issues, create a new ticket.


Grab the latest egg from here and place it in your trac environment's plugins directory. These eggs are currently cooked for Python 2.5; if you're using a different Python version, you'll need to grab the source as described below.


You can check out the source of the CannedResponsesPlugin from here using Mercurial, as well as browse it at the same place.

If you wish not to install Mercurial but still want the source, click the link above to view the source. Then look at the tags listed near the bottom of the page. The tags will always show the plugin's name and version number. Click the "changeset" link next to that tag name. There will be a "zip" and a "gz" link at the top of the page. Either of those links will give you an archive of the source. (If you want the development source, you can click the "tip" icon and use the "zip" or "gz" links at the top of that page instead).


To enable the plugin, install it to your trac's plugins directory and add the following to your trac.ini:

cannedresponses.* = enabled

To add canned responses, choose a short name, then add attributes like so:

pluginreq = new,pending -> new
pluginreq.comment = This request is best implemented as a plugin.  This ticket remains open as an invitation for someone to write a plugin fulfilling the request.
pluginreq.milestone = Plugin Suggested
pluginreq.type = plugin request = Better As Plugin
pluginreq.permissions = TICKET_MODIFY

The above example creates a canned response that sets a ticket to the closed status, sets the resolution to invalid, and adds the comment "This issue is caused by a third party plugin. We have no control over these plugins. Please report this problem to the authors of this third party plugin." The canned response is available to any user with at least TICKET_MODIFY permissions, including TICKET_ADMIN and TRAC_ADMIN.


  • The line pluginreq = new,pending -> new specifies, as a comma-delimited list, the statuses a ticket may have for using this canned response and the status the ticket will be set to. This can be any status a ticket can have.
  • The 'name' attribute provides a "pretty name" for users to see in the list of canned responses.
  • The 'comment' attribute specifies, in WikiFormatting, the text of the comment to be added. Anything inserted into the comment field at the same time as applying a canned response will be retained and placed after the canned response, with a [[BR]] between the canned response text and the user's comment text.
  • The 'resolution' attribute specifies the resolution to use on the ticket when closing.
  • The 'permissions' attribute specifies the minimum level of permissions required to see and use the response.
  • The 'milestone' attribute (new in plugin version 0.11.1) allows you to specify the milestone to change the ticket to.
  • The 'type' attribute (new in plugin version 0.11.1) allows you to specify a ticket type to change the ticket to.
  • Be careful with spelling, as there is no validation. If you make a spelling mistake you could cause a Python exception or cause tickets to be set to statuses, resolutions, types, or milestones that don't exist.


Author: Daniel Atallah
Maintainer: rekkanoryo