Settings

First, django-helpdesk needs django.core.context_processors.request activated, so you must add it to the settings.py. Add the following:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        ...
        'OPTIONS': {
            ...
            'context_processors': (
                # Default ones first
                ...
                # The one django-helpdesk requires:
                "django.template.context_processors.request",
            ),
        },
    },
]

The following settings can be changed in your settings.py file to help change the way django-helpdesk operates. There are quite a few settings available to toggle functionality within django-helpdesk.

HELPDESK_DEFAULT_SETTINGS

django-helpdesk has a built in UserSettings entity with per-user options that they will want to configure themselves. When you create a new user, a set of options is automatically created for them which they can then change themselves.

If you want to override the default settings for your users, create HELPDESK_DEFAULT_SETTINGS as a dictionary in settings.py. The default is below:

HELPDESK_DEFAULT_SETTINGS = {
    'use_email_as_submitter': True,
    'email_on_ticket_assign': True,
    'email_on_ticket_change': True,
    'login_view_ticketlist': True,
    'tickets_per_page': 25
}

Access control & Security

These settings can be used to change who can access the helpdesk.

  • HELPDESK_PUBLIC_VIEW_PROTECTOR This is a function that takes a request and can either return None granting access to to a public view or a redirect denying access.

  • HELPDESK_STAFF_VIEW_PROTECTOR This is a function that takes a request and can either return None granting access to to a staff view or a redirect denying access.

  • HELPDESK_REDIRECT_TO_LOGIN_BY_DEFAULT When a user visits “/”, should we redirect to the login page instead of the default homepage?

    Default: HELPDESK_REDIRECT_TO_LOGIN_BY_DEFAULT = False

  • HELPDESK_ANON_ACCESS_RAISES_404 If True, redirects user to a 404 page when attempting to reach ticket pages while not logged in, rather than redirecting to a login screen.

    Default: HELPDESK_ANON_ACCESS_RAISES_404 = False

Settings related to attachments:

  • HELPDESK_ENABLE_ATTACHMENTS If set to True, files can be attached to tickets and followups, and emails are searched for attachments which are then attached to the ticket. Also enables the HELPDESK_ALWAYS_SAVE_INCOMING_EMAIL_MESSAGE setting.

    Caution: Set this to False, unless you have secured access to

    the uploaded files. Otherwise anyone on the Internet will be able to download your ticket attachments.

    Attachments are enabled by default for backwards compatibility.

  • HELPDESK_VALID_EXTENSIONS Valid extensions for file types that can be attached to tickets. Note: This used to be called VALID_EXTENSIONS which is now deprecated.

    Default: HELPDESK_VALID_EXTENSIONS = ['.txt', '.asc', '.htm', '.html', '.pdf', '.doc', '.docx', '.odt', '.jpg', '.png', '.eml']

  • HELPDESK_VALIDATE_ATTACHMENT_TYPES If you’d like to turn of filtering of helpdesk extension types you can set this to False.

Generic Options

These changes are visible throughout django-helpdesk

  • HELPDESK_KB_ENABLED show knowledgebase links?

    Default: HELPDESK_KB_ENABLED = True

  • HELPDESK_NAVIGATION_ENABLED Show extended navigation by default, to all users, irrespective of staff status?

    Default: HELPDESK_NAVIGATION_ENABLED = False

  • HELPDESK_SHOW_MY_TICKETS_IN_NAV_FOR_STAFF Show “My tickets” for staff. Typically used for help desk deployments that allow staff to create tickets to action other staff members.

    Default: HELPDESK_SHOW_MY_TICKETS_IN_NAV_FOR_STAFF = True

  • HELPDESK_TRANSLATE_TICKET_COMMENTS Show dropdown list of languages that ticket comments can be translated into via Google Translate?

    Default: HELPDESK_TRANSLATE_TICKET_COMMENTS = False

  • HELPDESK_TRANSLATE_TICKET_COMMENTS_LANG List of languages to offer. If set to false, all default google translate languages will be shown.

    Default: HELPDESK_TRANSLATE_TICKET_COMMENTS_LANG = ["en", "de", "fr", "it", "ru"]

  • HELPDESK_SHOW_CHANGE_PASSWORD Show link to ‘change password’ on ‘User Settings’ page?

    Default: HELPDESK_SHOW_CHANGE_PASSWORD = False

  • HELPDESK_FOLLOWUP_MOD Allow user to override default layout for ‘followups’ (work in progress)

    Default: HELPDESK_FOLLOWUP_MOD = False

  • HELPDESK_AUTO_SUBSCRIBE_ON_TICKET_RESPONSE Auto-subscribe user to ticket as a ‘CC’ if (s)he responds to a ticket?

    Default: HELPDESK_AUTO_SUBSCRIBE_ON_TICKET_RESPONSE = False

  • HELPDESK_EMAIL_SUBJECT_TEMPLATE Subject template for templated emails. %(subject)s represents the subject wording from the email template (e.g. “(Closed)”). Warning: your subject template should always include a {{ ticket.ticket }} somewhere as many django-helpdesk features rely on the ticket ID in the subject line in order to correctly route mail to the corresponding ticket. If you leave out the ticket ID, your helpdesk may not work correctly!

    Default: HELPDESK_EMAIL_SUBJECT_TEMPLATE = "{{ ticket.ticket }} {{ ticket.title|safe }} %(subject)s"

  • HELPDESK_NOTIFY_SUBMITTER_FOR_ALL_TICKET_CHANGES Send email to submitter for all ticket updates. Default is to only sends to submitter for followups marked as public (defaults to True) on ticket creation, closing, status changes or followup comment.

    Default: HELPDESK_NOTIFY_SUBMITTER_FOR_ALL_TICKET_CHANGES = False

  • HELPDESK_EMAIL_FALLBACK_LOCALE Fallback locale for templated emails when queue locale not found

    Default: HELPDESK_EMAIL_FALLBACK_LOCALE = "en"

  • HELPDESK_MAX_EMAIL_ATTACHMENT_SIZE Maximum size, in bytes, of file attachments that will be sent via email

    Default: HELPDESK_MAX_EMAIL_ATTACHMENT_SIZE = 512000

  • QUEUE_EMAIL_BOX_UPDATE_ONLY Only process mail with a valid tracking ID; all other mail will be ignored instead of creating a new ticket.

    Default: QUEUE_EMAIL_BOX_UPDATE_ONLY = False

  • HELPDESK_ENABLE_DEPENDENCIES_ON_TICKET If False, disable the dependencies fields on ticket.

    Default: HELPDESK_ENABLE_DEPENDENCIES_ON_TICKET = True

  • HELPDESK_ENABLE_TIME_SPENT_ON_TICKET If False, disable the time spent fields on ticket.

    Default: HELPDESK_ENABLE_TIME_SPENT_ON_TICKET = True

  • HELPDESK_TICKETS_TIMELINE_ENABLED If False, remove from the dashboard the Timeline view for tickets.

    Default: HELPDESK_TICKETS_TIMELINE_ENABLED = True

Options shown on public pages

These options only change display of items on public-facing pages, not staff pages.

  • HELPDESK_VIEW_A_TICKET_PUBLIC Show ‘View a Ticket’ section on public page?

    Default: HELPDESK_VIEW_A_TICKET_PUBLIC = True

  • HELPDESK_SUBMIT_A_TICKET_PUBLIC Show ‘submit a ticket’ section & form on public page?

    Default: HELPDESK_SUBMIT_A_TICKET_PUBLIC = True

  • HELPDESK_PUBLIC_TICKET_FORM_CLASS Define custom form class to show on public pages for anon users. You can use it for adding custom fields and validation, captcha and so on.

    Default: HELPDESK_PUBLIC_TICKET_FORM_CLASS = "helpdesk.forms.PublicTicketForm"

Options for public ticket submission form

  • HELPDESK_PUBLIC_TICKET_QUEUE Sets the queue for tickets submitted through the public form. If defined, the matching form field will be hidden. This cannot be None but must be set to a valid queue slug.

    Default: Not defined

  • HELPDESK_PUBLIC_TICKET_PRIORITY Sets the priority for tickets submitted through the public form. If defined, the matching form field will be hidden. Must be set to a valid integer priority.

    Default: Not defined

  • HELPDESK_PUBLIC_TICKET_DUE_DATE Sets the due date for tickets submitted through the public form. If defined, the matching form field will be hidden. Set to None if you want to hide the form field but do not want to define a value.

    Default: Not defined

Options that change ticket updates

  • HELPDESK_ALLOW_NON_STAFF_TICKET_UPDATE Allow non-staff users to interact with tickets? Set to True to allow any authenticated user to manage tickets. You can also apply a custom authorisation logic for identifying helpdesk staff members, by setting this to a callable. In that case, the value should be a function accepting the active user as a parameter and returning True if the user is considered helpdesk staff, e.g.:

    lambda u: u.is_authenticated() and u.is_active and u.groups.filter(name='helpdesk_staff').exists()
    

    Default: HELPDESK_ALLOW_NON_STAFF_TICKET_UPDATE = False

  • HELPDESK_SHOW_EDIT_BUTTON_FOLLOW_UP Show edit buttons in ticket follow ups?

    Default: HELPDESK_SHOW_EDIT_BUTTON_FOLLOW_UP = True

  • HELPDESK_SHOW_DELETE_BUTTON_SUPERUSER_FOLLOW_UP Show delete buttons in ticket follow ups if user is ‘superuser’?

    Default: HELPDESK_SHOW_DELETE_BUTTON_SUPERUSER_FOLLOW_UP = False

  • HELPDESK_UPDATE_PUBLIC_DEFAULT Make all updates public by default? This will hide the ‘is this update public’ checkbox.

    Default: HELPDESK_UPDATE_PUBLIC_DEFAULT = False

  • HELPDESK_STAFF_ONLY_TICKET_OWNERS Only show staff users in ticket owner drop-downs?

    Default: HELPDESK_STAFF_ONLY_TICKET_OWNERS = False

  • HELPDESK_STAFF_ONLY_TICKET_CC Only show staff users in ticket cc drop-down?

    Default: HELPDESK_STAFF_ONLY_TICKET_CC = False

  • HELPDESK_SHOW_CUSTOM_FIELDS_FOLLOW_UP_LIST Show configured custom fields in the follow-up form.

    Default: HELPDESK_SHOW_CUSTOM_FIELDS_FOLLOW_UP_LIST = []

Options that change ticket properties

  • HELPDESK_TICKET_OPEN_STATUS Customize the id of OPEN_STATUS status.

    Default: HELPDESK_TICKET_OPEN_STATUS = 1

  • HELPDESK_TICKET_REOPENED_STATUS Customize the id of REOPENED_STATUS status.

    Default: HELPDESK_TICKET_REOPENED_STATUS = 2

  • HELPDESK_TICKET_RESOLVED_STATUS Customize the id of RESOLVED_STATUS status.

    Default: HELPDESK_TICKET_RESOLVED_STATUS = 3

  • HELPDESK_TICKET_CLOSED_STATUS Customize the id of CLOSED_STATUS status.

    Default: HELPDESK_TICKET_CLOSED_STATUS = 4

  • HELPDESK_TICKET_DUPLICATE_STATUS Customize the id of DUPLICATE_STATUS status.

    Default: HELPDESK_TICKET_DUPLICATE_STATUS = 5

  • HELPDESK_TICKET_STATUS_CHOICES Customize the list of status choices for all tickets.

    The default is below:

    HELPDESK_TICKET_STATUS_CHOICES = (
        (HELPDESK_TICKET_OPEN_STATUS, _('Open')),
        (HELPDESK_TICKET_REOPENED_STATUS, _('Reopened')),
        (HELPDESK_TICKET_RESOLVED_STATUS, _('Resolved')),
        (HELPDESK_TICKET_CLOSED_STATUS, _('Closed')),
        (HELPDESK_TICKET_DUPLICATE_STATUS, _('Duplicate')),
    )
    

    If you wish to modify or introduce new status choices, you may add them like this:

    # Don't forget to import the gettext_lazy function at the begining of your settings file
    from django.utils.translation import gettext_lazy as _
    
    # Explicitly define status list integer values
    HELPDESK_TICKET_OPEN_STATUS = 1
    HELPDESK_TICKET_REOPENED_STATUS = 2
    HELPDESK_TICKET_RESOLVED_STATUS = 3
    HELPDESK_TICKET_CLOSED_STATUS = 4
    HELPDESK_TICKET_DUPLICATE_STATUS = 5
    HELPDESK_TICKET_FORKED_STATUS = 6
    
    # Create the list with associated labels
    HELPDESK_TICKET_STATUS_CHOICES = (
        (HELPDESK_TICKET_OPEN_STATUS, _('Open')),
        (HELPDESK_TICKET_REOPENED_STATUS, _('Reopened')),
        (HELPDESK_TICKET_RESOLVED_STATUS, _('Resolved')),
        (HELPDESK_TICKET_CLOSED_STATUS, _('Closed')),
        (HELPDESK_TICKET_DUPLICATE_STATUS, _('Duplicate')),
        (HELPDESK_TICKET_FORKED_STATUS, _('Forked')),
    )
    
  • HELPDESK_TICKET_OPEN_STATUSES Define the list of statuses to be considered as a type of open status.

    Default: HELPDESK_TICKET_OPEN_STATUSES = (HELPDESK_TICKET_OPEN_STATUS, HELPDESK_TICKET_REOPENED_STATUS)

    If you have added the HELPDESK_TICKET_FORKED_STATUS status and wish to have django-helpdesk treat it as an open status choice, add it to the list of OPEN_STATUSES like this:

    HELPDESK_TICKET_OPEN_STATUSES = (HELPDESK_TICKET_OPEN_STATUS,
                                        HELPDESK_TICKET_REOPENED_STATUS,
                                        HELPDESK_TICKET_FORKED_STATUS)
    
  • HELPDESK_TICKET_STATUS_CHOICES_FLOW Customize the allowed state changes depending on the current state.

    The default is below:

    HELPDESK_TICKET_STATUS_CHOICES_FLOW = {
        HELPDESK_TICKET_OPEN_STATUS: (HELPDESK_TICKET_OPEN_STATUS, HELPDESK_TICKET_RESOLVED_STATUS, HELPDESK_TICKET_CLOSED_STATUS, HELPDESK_TICKET_DUPLICATE_STATUS,),
        HELPDESK_TICKET_REOPENED_STATUS: (HELPDESK_TICKET_REOPENED_STATUS, HELPDESK_TICKET_RESOLVED_STATUS, HELPDESK_TICKET_CLOSED_STATUS, HELPDESK_TICKET_DUPLICATE_STATUS,),
        HELPDESK_TICKET_RESOLVED_STATUS: (HELPDESK_TICKET_REOPENED_STATUS, HELPDESK_TICKET_RESOLVED_STATUS, HELPDESK_TICKET_CLOSED_STATUS,),
        HELPDESK_TICKET_CLOSED_STATUS: (HELPDESK_TICKET_REOPENED_STATUS, HELPDESK_TICKET_CLOSED_STATUS,),
        HELPDESK_TICKET_DUPLICATE_STATUS: (HELPDESK_TICKET_REOPENED_STATUS, HELPDESK_TICKET_DUPLICATE_STATUS,),
    }
    

    If you wish to modify or have introduce new status choices, you may configure their status change flow like this:

    # Adding HELPDESK_TICKET_FORKED_STATUS to the other allowed states flow and defining its own flow
    HELPDESK_TICKET_STATUS_CHOICES_FLOW = {
        HELPDESK_TICKET_OPEN_STATUS: (HELPDESK_TICKET_OPEN_STATUS, HELPDESK_TICKET_FORKED_STATUS, HELPDESK_TICKET_RESOLVED_STATUS, HELPDESK_TICKET_CLOSED_STATUS, HELPDESK_TICKET_DUPLICATE_STATUS,),
        HELPDESK_TICKET_REOPENED_STATUS: (HELPDESK_TICKET_REOPENED_STATUS, HELPDESK_TICKET_FORKED_STATUS, HELPDESK_TICKET_RESOLVED_STATUS, HELPDESK_TICKET_CLOSED_STATUS, HELPDESK_TICKET_DUPLICATE_STATUS,),
        HELPDESK_TICKET_RESOLVED_STATUS: (HELPDESK_TICKET_REOPENED_STATUS, HELPDESK_TICKET_RESOLVED_STATUS, HELPDESK_TICKET_CLOSED_STATUS,),
        HELPDESK_TICKET_CLOSED_STATUS: (HELPDESK_TICKET_REOPENED_STATUS, HELPDESK_TICKET_CLOSED_STATUS,),
        HELPDESK_TICKET_DUPLICATE_STATUS: (HELPDESK_TICKET_REOPENED_STATUS, HELPDESK_TICKET_DUPLICATE_STATUS,),
        HELPDESK_TICKET_FORKED_STATUS: (HELPDESK_TICKET_OPEN_STATUS, HELPDESK_TICKET_FORKED_STATUS, HELPDESK_TICKET_RESOLVED_STATUS, HELPDESK_TICKET_CLOSED_STATUS, HELPDESK_TICKET_DUPLICATE_STATUS,),
    }
    
  • HELPDESK_TICKET_PRIORITY_CHOICES Customize the priority choices for all tickets.

    The default is below:

    HELPDESK_TICKET_PRIORITY_CHOICES = (
        (1, _('1. Critical')),
        (2, _('2. High')),
        (3, _('3. Normal')),
        (4, _('4. Low')),
        (5, _('5. Very Low')),
    )
    

    If you have a new instance, you may override those settings but if you want to keep previous tickets priorities and add new choices, you may increment integer values like this:

    HELPDESK_TICKET_PRIORITY_CHOICES = (
        (1, _('1. Critical')),
        (2, _('2. High')),
        (3, _('3. Normal')),
        (4, _('4. Low')),
        (5, _('5. Very Low')),
        (6, _('6. Cold')),
        (7, _('7. Hot')),
    )
    

Time Tracking Options

  • HELPDESK_FOLLOWUP_TIME_SPENT_AUTO If True, calculate follow-up ‘time_spent’ with previous follow-up or ticket creation time.

    Default: HELPDESK_FOLLOWUP_TIME_SPENT_AUTO = False

  • HELPDESK_FOLLOWUP_TIME_SPENT_OPENING_HOURS If defined, calculates follow-up ‘time_spent’ according to open hours.

    Default: HELPDESK_FOLLOWUP_TIME_SPENT_OPENING_HOURS = {}

    If HELPDESK_FOLLOWUP_TIME_SPENT_AUTO is True, you may set open hours to remove off hours from ‘time_spent’:

    HELPDESK_FOLLOWUP_TIME_SPENT_OPENING_HOURS = {
        "monday": (8.5, 19),
        "tuesday": (8.5, 19),
        "wednesday": (8.5, 19),
        "thursday": (8.5, 19),
        "friday": (8.5, 19),
        "saturday": (0, 0),
        "sunday": (0, 0),
    }
    

    Valid hour values must be set between 0 and 23.9999. In this example 8.5 is interpreted as 8:30AM, saturdays and sundays don’t count.

  • HELPDESK_FOLLOWUP_TIME_SPENT_EXCLUDE_HOLIDAYS List of days in format “%Y-%m-%d” to exclude from automatic follow-up ‘time_spent’ calculation.

    Default: HELPDESK_FOLLOWUP_TIME_SPENT_EXCLUDE_HOLIDAYS = ()

    This example removes Christmas and New Year’s Eve in 2024:

    HELPDESK_FOLLOWUP_TIME_SPENT_EXCLUDE_HOLIDAYS = ("2024-12-25", "2024-12-31",)
    
  • HELPDESK_FOLLOWUP_TIME_SPENT_EXCLUDE_STATUSES List of ticket statuses to exclude from automatic follow-up ‘time_spent’ calculation.

    Default: HELPDESK_FOLLOWUP_TIME_SPENT_EXCLUDE_STATUSES = ()

    This example will have follow-ups to resolved ticket status not to be counted in:

    HELPDESK_FOLLOWUP_TIME_SPENT_EXCLUDE_STATUSES = (HELPDESK_TICKET_RESOLVED_STATUS,)
    
  • HELPDESK_FOLLOWUP_TIME_SPENT_EXCLUDE_QUEUES List of ticket queues slugs to exclude from automatic follow-up ‘time_spent’ calculation.

    Default: HELPDESK_FOLLOWUP_TIME_SPENT_EXCLUDE_QUEUES = ()

    This example will have follow-ups excluded from time calculation if they belong to the queue with slug time-not-counting-queue:

    HELPDESK_FOLLOWUP_TIME_SPENT_EXCLUDE_QUEUES = ('time-not-counting-queue',)
    

Staff Ticket Creation Settings

  • HELPDESK_CREATE_TICKET_HIDE_ASSIGNED_TO Hide the ‘assigned to’ / ‘Case owner’ field from the ‘create_ticket’ view? It’ll still show on the ticket detail/edit form.

    Default: HELPDESK_CREATE_TICKET_HIDE_ASSIGNED_TO = False

Staff Ticket View Settings

  • HELPDESK_ENABLE_PER_QUEUE_STAFF_PERMISSION If True, logged in staff users only see queues and tickets to which they have specifically been granted access - this holds for the dashboard, ticket query, and ticket report views. User assignment is done through the standard django.admin.admin permissions. Note: Staff with access to admin interface will be able to see the full list of tickets, but won’t have access to details and could not modify them. This setting does not prevent staff users from creating tickets for all queues. Also, superuser accounts have full access to all queues, regardless of whatever queue memberships they have been granted.

    Default: HELPDESK_ENABLE_PER_QUEUE_STAFF_PERMISSION = False

Default E-Mail Settings

The following settings default to None but can be set as defaults, rather than setting them per-queue.

  • QUEUE_EMAIL_BOX_TYPE

  • QUEUE_EMAIL_BOX_SSL

  • QUEUE_EMAIL_BOX_HOST``

  • QUEUE_EMAIL_BOX_USER

  • QUEUE_EMAIL_BOX_PASSWORD

Discontinued Settings

The following settings were defined in previous versions and are no longer supported.

  • HELPDESK_CUSTOM_WELCOME

  • HELDPESK_KB_ENABLED_STAFF Now always True

  • HELPDESK_NAVIGATION_STATS_ENABLED Now always True

  • HELPDESK_PREPEND_ORG_NAME Please customise your local helpdesk/base.html template if needed

  • HELPDESK_SHOW_DELETE_BUTTON_TICKET_TOP Button is always shown

  • HELPDESK_SHOW_EDIT_BUTTON_TICKET_TOP Button is always shown

  • HELPDESK_SHOW_HOLD_BUTTON_TICKET_TOP Button is always shown

  • HELPDESK_SHOW_KB_ON_HOMEPAGE KB categories are always shown on the homepage

  • HELPDESK_SUPPORT_PERSON Please customise your local helpdesk/attribution.html template if needed

  • HELPDESK_DASHBOARD_SHOW_DELETE_UNASSIGNED Button is always shown

  • HELPDESK_DASHBOARD_HIDE_EMPTY_QUEUES Empty queues are always hidden

  • HELPDESK_DASHBOARD_BASIC_TICKET_STATS Stats are always shown

  • HELPDESK_FOOTER_SHOW_API_LINK Link to API documentation is always shown. Edit your local helpdesk/base.html template if needed.

  • HELPDESK_FOOTER_SHOW_CHANGE_LANGUAGE_LINK Is never shown. Use your own template if required.

  • HELPDESK_ENABLE_PER_QUEUE_MEMBERSHIP Discontinued in favor of HELPDESK_ENABLE_PER_QUEUE_STAFF_PERMISSION.

  • HELPDESK_FULL_FIRST_MESSAGE_FROM_EMAIL Do not ignore fowarded and replied text from the email messages which create a new ticket; useful for cases when customer forwards some email (error from service or something) and wants support to see that

  • HELPDESK_ALWAYS_SAVE_INCOMING_EMAIL_MESSAGE Any incoming .eml message is saved and available, helps when customer spent some time doing fancy markup which has been corrupted during the email-to-ticket-comment translate process.

    Requires HELPDESK_ENABLE_ATTACHMENTS to be set to True