Skip to main content
Frappe Helpdesk is highly customizable, allowing you to tailor fields, workflows, statuses, and priorities to match your support process.

Customization Options

You can customize:
  • Custom Fields: Add new fields to tickets, contacts, and other documents
  • Ticket Types: Define categories for different issue types
  • Ticket Statuses: Create custom statuses and status categories
  • Ticket Priorities: Define priority levels with custom labels
  • Ticket Templates: Pre-filled ticket forms for common scenarios
  • Workflows: Custom automation and state transitions
  • Saved Replies: Template responses for common questions
  • Form Scripts: Client-side JavaScript for dynamic forms

Custom Fields

Add fields to capture additional information on tickets and related documents.

Adding Custom Fields

1

Navigate to Customize Form

In Frappe, go to Customize Form (search in the awesome bar).
2

Select Document Type

Choose the DocType to customize:
  • HD Ticket: Main ticket document
  • HD Customer: Customer information
  • HD Contact: Contact details
  • HD Article: Knowledge base articles
3

Add New Field

Click “Add Row” in the Fields table:
  • Field Type: Data, Select, Link, Date, etc.
  • Label: Display name for the field
  • Field Name: Internal identifier (auto-generated)
  • Options: For Select/Link fields
  • Required: Make field mandatory
  • Read Only: Prevent editing
4

Configure Field Properties

Set additional properties:
  • In List View: Show in ticket list
  • In Standard Filter: Enable filtering by this field
  • In Global Search: Include in search
  • Default Value: Pre-fill with default
  • Depends On: Show field conditionally
5

Save Customization

Click “Update” to save changes. The field will appear on forms immediately.

Field Types

Common field types for tickets:
  • Data: Single-line text (e.g., reference number)
  • Text: Multi-line text (e.g., detailed notes)
  • Select: Dropdown with predefined options
  • Link: Reference to another document
  • Date: Date picker
  • Datetime: Date and time picker
  • Check: Boolean checkbox
  • Int/Float: Numeric values
  • Currency: Monetary values
  • Attach: File upload
  • Table: Child table with multiple rows

Example Custom Fields

Product Version Field:
Field Type: Data
Label: Product Version
Field Name: product_version
In Standard Filter: Yes
Escalation Reason:
Field Type: Select
Label: Escalation Reason
Options:
- Technical Complexity
- Customer Request
- SLA Breach
- Management Escalation
Related Order:
Field Type: Link
Label: Related Order
Options: Sales Order
In List View: Yes

Ticket Templates

Ticket templates provide pre-configured ticket forms for specific scenarios.

Template Structure

Based on HD Ticket Template doctype (hd_ticket_template.json):
  • Template Name: Unique identifier
  • About: Additional information (HTML)
  • Fields: Custom fields for this template
  • Description Template: Pre-filled description
The Ticket Template feature is marked as deprecated (hd_ticket_template.json:6) and may be replaced in future versions. Use Custom Fields and Forms for new customizations.

Template Fields

Each template can have custom fields (HD Ticket Template Field):
  • Fieldname: Field identifier
  • Required: Make field mandatory
  • Hide from Customer: Agent-only field
  • URL/Method: Dynamic field options
  • Placeholder: Hint text

Ticket Types

Categorize tickets by type to enable specialized handling.

Creating Ticket Types

1

Navigate to Ticket Types

Go to Settings > Ticket Types or search for “HD Ticket Type”.
2

Create New Type

Click “New” and configure:
  • Name: Type identifier (e.g., “Bug”, “Feature Request”, “Billing”)
  • Description: Brief explanation
  • Priority: Default priority for this type
3

Set Default

In HD Settings, set the default ticket type for new tickets.

Common Ticket Types

  • Bug Report: Software defects and errors
  • Feature Request: New functionality requests
  • Technical Support: Technical assistance
  • Billing: Payment and invoice questions
  • General Inquiry: General questions
  • Account Management: Account changes and setup

Using Ticket Types

Ticket types enable:
  • Routing: Assignment rules based on type
  • SLA: Different SLAs per type
  • Reporting: Analytics by ticket category
  • Templates: Type-specific ticket templates
  • Workflows: Custom workflows per type

Ticket Statuses

Define custom statuses to match your support workflow.

Status Categories

All statuses belong to one of three categories:
  • Open: Active tickets requiring attention
  • Paused: Tickets on hold or waiting
  • Resolved: Closed or completed tickets
Status category affects:
  • SLA timer behavior
  • Ticket visibility in views
  • Reporting and analytics
  • Agent workload calculations

Creating Custom Statuses

1

Navigate to Ticket Status

Search for “HD Ticket Status” in Frappe.
2

Create New Status

Click “New” and configure:
  • Status Name: Display name (e.g., “Waiting on Customer”)
  • Category: Open, Paused, or Resolved
  • Description: When to use this status
3

Configure Default Statuses

In HD Settings or SLA configuration:
  • Default Ticket Status: Status for new tickets
  • Ticket Reopen Status: Status when customers reply
  • Auto-Close Status: Status for auto-closed tickets

Example Status Workflows

Basic Support Workflow:
  1. Open (new tickets)
  2. In Progress (being worked on)
  3. Waiting on Customer (need info)
  4. Resolved (completed)
  5. Closed (verified resolution)
Advanced Support Workflow:
  1. New (just created)
  2. Assigned (agent assigned)
  3. In Progress (actively working)
  4. Waiting on Engineering (escalated)
  5. Waiting on Customer (need response)
  6. Pending Release (fix scheduled)
  7. Resolved (completed)
  8. Closed (verified)

Ticket Priorities

Define priority levels to categorize urgency.

Creating Priorities

1

Navigate to Ticket Priority

Search for “HD Ticket Priority” in Frappe.
2

Create Priority Levels

Create priorities with:
  • Priority Name: Display label (e.g., “Urgent”, “High”, “Medium”, “Low”)
  • Integer Value: Numeric value for sorting (higher = more urgent)
  • Color: Visual indicator
  • Description: When to use this priority
3

Set Default Priority

In HD Settings, set the default priority for new tickets.

Priority Best Practices

4-Tier System (Recommended):
  • Urgent: System down, critical business impact
  • High: Significant functionality affected
  • Medium: Minor issues, workaround available
  • Low: Enhancement requests, cosmetic issues
5-Tier System (Enterprise):
  • Critical: Complete service outage
  • High: Major feature broken
  • Medium: Moderate impact
  • Low: Minor inconvenience
  • Planning: Future enhancements

Priority and SLA

Link priorities to SLA response times:
Urgent: 1 hour response, 4 hours resolution
High: 4 hours response, 24 hours resolution
Medium: 8 hours response, 48 hours resolution
Low: 24 hours response, 5 days resolution
Configuration: SLA Settings > Priorities table

Saved Replies

Create template responses for common questions.

Creating Saved Replies

1

Navigate to Saved Replies

Go to Settings > Saved Replies or search “HD Saved Reply”.
2

Create New Reply

Configure:
  • Title: Short identifier
  • Message: Template response text
  • Teams: Which teams can use this reply
3

Use Variables

Include dynamic content:
Hello {{ doc.raised_by }},

Thank you for contacting support regarding ticket #{{ doc.name }}.

Your issue about "{{ doc.subject }}" has been received and assigned to our team.
4

Organize by Team

Create team-specific replies:
  • Global replies: Available to all teams
  • Team-specific: Only for selected teams

Saved Reply Scope

Control reply visibility (see hd_settings.json:15-16):
  • Global Scope: All agents see all replies
  • Team Scope Only: disable_saved_replies_global_scope restricts to team-specific replies

Using Saved Replies

When responding to tickets:
  1. Click “Insert Saved Reply”
  2. Search for the appropriate template
  3. Select the reply
  4. Customize as needed
  5. Send response
Implementation: desk/src/components/SavedRepliesSelectorModal.vue

Form Scripts

Add client-side JavaScript to customize form behavior.

Creating Form Scripts

1

Navigate to Form Scripts

Search for “HD Form Script” in Frappe.
2

Create New Script

Configure:
  • Document Type: HD Ticket or other DocType
  • Script: JavaScript code
  • Enabled: Activate the script
3

Write Script Logic

frappe.ui.form.on('HD Ticket', {
    priority: function(frm) {
        // Auto-update due date based on priority
        if (frm.doc.priority === 'Urgent') {
            frm.set_value('response_by', frappe.datetime.add_hours(now, 1));
        }
    },
    
    ticket_type: function(frm) {
        // Set default agent group based on type
        if (frm.doc.ticket_type === 'Billing') {
            frm.set_value('agent_group', 'Billing Team');
        }
    }
});

Form Script Examples

Auto-populate fields:
frappe.ui.form.on('HD Ticket', {
    customer: function(frm) {
        // Fetch customer tier and set priority
        frappe.db.get_value('Customer', frm.doc.customer, 'tier')
            .then(r => {
                if (r.message.tier === 'Enterprise') {
                    frm.set_value('priority', 'High');
                }
            });
    }
});
Conditional field display:
frappe.ui.form.on('HD Ticket', {
    ticket_type: function(frm) {
        // Show escalation field only for bugs
        frm.toggle_display('escalation_reason', 
            frm.doc.ticket_type === 'Bug');
    }
});
Field validation:
frappe.ui.form.on('HD Ticket', {
    validate: function(frm) {
        // Require resolution notes for resolved tickets
        if (frm.doc.status_category === 'Resolved' && !frm.doc.resolution_details) {
            frappe.throw('Please add resolution details before resolving');
        }
    }
});

Field Dependencies

Create dynamic forms with field dependencies.

Conditional Display

Show fields based on other field values:
// In Customize Form
Depends On: eval:doc.ticket_type == 'Bug'

// Shows field only when ticket type is Bug

Dynamic Options

Change field options based on conditions:
// In Form Script
frappe.ui.form.on('HD Ticket', {
    agent_group: function(frm) {
        // Filter agents based on selected group
        frm.set_query('assigned_to', function() {
            return {
                filters: {
                    agent_group: frm.doc.agent_group
                }
            };
        });
    }
});

Workflow Customization

Auto-Update Status

Configure automatic status updates (see hd_settings.json:31-33):
  • Auto Update Status: Enable automatic status changes
  • Update Status To: Target status for auto-update
Use case: Automatically move tickets to “In Progress” when agent replies

Auto-Close Tickets

Automatically close inactive tickets:
  • Auto Close Tickets: Enable auto-closing
  • Auto Close After Days: Inactivity period before closing
  • Auto Close Status: Status to set when auto-closing
Configuration: hd_settings.json:34-37

Branding Customization

Customize the appearance to match your brand.

Brand Settings

Configure in HD Settings > Branding:
  • Brand Name: Your company name
  • Brand Logo: Company logo (appears in header)
  • Favicon: Browser tab icon
Fields: hd_settings.json:51-55

Portal Customization

Customize the customer portal:
  1. Upload brand logo
  2. Set brand name
  3. Customize email templates with branding
  4. Add custom CSS via Frappe website settings

Comments and Reactions

Enhance collaboration with comments and reactions.

Comment Reactions

Enable emoji reactions to comments (see hd_settings.json:28-29):
  • Enable Comment Reactions: Allow agents to react to comments
  • Helps acknowledge comments without adding noise
  • Implemented via HD Comment Reaction doctype

Comment Configuration

  • Internal Comments: Only visible to agents
  • Public Comments: Visible to customers
  • Email Comments: Sent via email to customers

Best Practices

Custom Fields

  1. Plan Before Adding: Ensure fields are necessary
  2. Use Clear Labels: Make purpose obvious
  3. Set Appropriate Types: Choose correct field type
  4. Document Purpose: Add descriptions for complex fields
  5. Test Thoroughly: Verify fields work in all contexts
  6. Avoid Duplication: Check for existing fields first

Ticket Types and Statuses

  1. Keep it Simple: Start with fewer types/statuses
  2. Clear Definitions: Document when to use each
  3. Train Team: Ensure consistent usage
  4. Review Regularly: Remove unused types/statuses
  5. Map to Workflows: Align with actual processes

Saved Replies

  1. Use Variables: Make replies dynamic with template variables
  2. Keep Current: Update replies when processes change
  3. Organize by Category: Group similar replies
  4. Personal Touch: Encourage customization before sending
  5. Review Metrics: Track which replies are most used

Form Scripts

  1. Test Thoroughly: Verify scripts don’t break functionality
  2. Handle Errors: Add try-catch blocks
  3. Comment Code: Explain complex logic
  4. Performance: Avoid heavy operations on every keystroke
  5. Version Control: Track script changes

Advanced Customization

Custom DocTypes

Create entirely new document types:
  1. Define in Frappe DocType builder
  2. Add fields and permissions
  3. Link to HD Ticket via Link field
  4. Create forms and lists

Server Scripts

Add Python logic without code deployment:
  1. Create Server Script in Frappe
  2. Choose trigger (Before Save, After Insert, etc.)
  3. Write Python code
  4. Enable and test

API Customization

Extend the API with custom endpoints:
# In helpdesk/api/custom.py
import frappe

@frappe.whitelist()
def custom_ticket_action(ticket_id, action):
    # Custom logic
    ticket = frappe.get_doc('HD Ticket', ticket_id)
    # ... perform action
    return {"status": "success"}

Build docs developers (and LLMs) love