Waldur Support Module
The Support module provides a comprehensive helpdesk and ticketing system with multi-backend integration, enabling organizations to manage support requests through JIRA, SMAX, Zammad, or a basic built-in system.
Overview
The support module acts as an abstraction layer over multiple ticketing backends, providing:
- Unified API for ticket management across different backends
 - Bidirectional synchronization with external ticketing systems
 - Template-based issue creation
 - Customer feedback collection
 - SLA tracking and reporting
 - Advanced permission management
 
Architecture
graph TB
    subgraph "Waldur Support"
        API[Support API]
        Models[Support Models]
        Backend[Backend Interface]
    end
    subgraph "External Systems"
        JIRA[JIRA/Service Desk]
        SMAX[Micro Focus SMAX]
        Zammad[Zammad]
    end
    subgraph "Integration"
        Webhook[Webhooks]
        Sync[Synchronization]
    end
    API --> Models
    Models --> Backend
    Backend --> JIRA
    Backend --> SMAX
    Backend --> Zammad
    JIRA --> Webhook
    SMAX --> Webhook
    Zammad --> Webhook
    Webhook --> Models
    Sync --> Backend
Core Components
1. Issue Management
The Issue model is the central entity for ticket management:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25  |  | 
Issue Types:
INFORMATIONAL- General information requestsSERVICE_REQUEST- Service provisioning requestsCHANGE_REQUEST- Change management requestsINCIDENT- Incident reports and outages
2. Comment System
Comments provide threaded discussions on issues:
1 2 3 4 5 6  |  | 
Comment Features:
- Public/private visibility control
 - Automatic user information formatting for backends
 - Bidirectional synchronization
 
3. Attachment Management
File attachments for issues and templates:
1 2 3 4 5 6 7 8  |  | 
4. User Management
SupportUser bridges Waldur users with backend systems:
1 2 3 4 5 6  |  | 
5. Custom Field Integration
Resource Backend ID Synchronization:
The system supports automatic resource backend_id updates via Service Desk custom fields:
1 2 3 4 5 6 7 8 9  |  | 
Integration Benefits:
- External systems can update Waldur resource identifiers via Service Desk
 - One-way data synchronization from helpdesk to Waldur resources
 - Automated resource identifier management from external platforms
 - Enhanced integration capabilities for third-party tools
 
Supported Resource Types:
- Marketplace Orders (
marketplace.Order) - Marketplace Resources (
marketplace.Resource) - Any resource with 
backend_idfield connected via Issue generic foreign key 
6. Template System
Templates enable standardized issue creation:
1 2 3 4 5 6 7 8 9 10 11 12 13  |  | 
7. Status Management
IssueStatus maps backend statuses to resolution types:
1 2 3 4 5 6 7 8  |  | 
Status Configuration:
Status configuration is critical for proper issue resolution detection. The system uses IssueStatus entries to determine whether an issue has been successfully resolved or canceled:
- RESOLVED: Statuses that indicate successful completion (e.g., "Done", "Resolved", "Completed")
 - CANCELED: Statuses that indicate cancellation or failure (e.g., "Cancelled", "Rejected", "Failed")
 
Management Access:
- Staff users: Full CRUD access to manage status configurations
 - Support users: Read-only access to view existing statuses
 - Regular users: No access
 
API Operations:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18  |  | 
8. Feedback System
Customer satisfaction tracking:
1 2 3 4  |  | 
Backend Integration
Supported Backends
1. JIRA/Atlassian Service Desk
Full-featured integration with:
- Service Desk project support
 - Request type management
 - Customer portal integration
 - Webhook support for real-time updates
 - Custom field mapping with one-way resource synchronization (Service Desk → Waldur)
 
Authentication Methods:
Supports multiple authentication methods with automatic fallback:
- OAuth 2.0 (Recommended for Enterprise)
 
1 2 3  |  | 
- Personal Access Token (Server/Data Center)
 
1 |  | 
- API Token (Cloud - Recommended)
 
1 2  |  | 
- Basic Authentication (Legacy)
 
1 2  |  | 
Authentication Priority Order: OAuth 2.0 > Personal Access Token > API Token > Basic Authentication
Security Recommendations:
- Use OAuth 2.0 for enterprise integrations with fine-grained permissions
 - Use API Tokens for Atlassian Cloud instances
 - Use Personal Access Tokens for Server/Data Center instances
 - Avoid Basic Authentication in production environments
 
OAuth 2.0 Setup:
- Create an OAuth 2.0 app in your Atlassian organization
 - Obtain client_id and access_token from the OAuth flow
 - Configure the credentials in your environment variables
 - The system will automatically use OAuth 2.0 when configured
 
Custom Field Mapping:
Waldur supports custom field mapping with Atlassian Service Desk for enhanced integration capabilities:
1 2 3 4 5 6 7 8 9 10 11  |  | 
Resource Backend ID Synchronization:
The system automatically synchronizes resource backend IDs using the waldur_backend_id custom field:
- Jira Setup: Create a custom field named 
waldur_backend_id(text field, single line) - Field Mapping: The system automatically detects field ID 
customfield_10200or uses field lookup - Service Desk → Waldur Sync:
 - Issue synchronization reads 
waldur_backend_idcustom field and updates connected resource'sbackend_id - External systems can update Waldur resources by modifying the custom field in Service Desk tickets
 
Use Cases:
- External systems can update Waldur resource identifiers via Service Desk
 - Cross-platform resource synchronization through helpdesk integration
 - Automated data consistency maintenance across integrated systems
 - Third-party tool integration via Service Desk custom field updates
 
Configuration Example:
1 2 3 4 5 6 7  |  | 
2. Micro Focus SMAX
Enterprise ITSM integration:
- Request and incident management
 - Change management workflows
 - Service catalog integration
 - REST API-based synchronization
 - Webhook support for real-time updates
 
3. Zammad
Open-source ticketing system:
- Multi-channel support (email, web, phone)
 - Customer organization management
 - Tag-based categorization
 - Webhook integration
 
4. Basic Backend
No-op implementation for:
- Development and testing
 - Environments without external ticketing
 - Minimal support requirements
 
Backend Interface
All backends implement the SupportBackend interface:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23  |  | 
API Endpoints
Issue Management
| Endpoint | Method | Description | 
|---|---|---|
/api/support-issues/ | 
GET | List issues with filtering | 
/api/support-issues/ | 
POST | Create new issue | 
/api/support-issues/{uuid}/ | 
GET | Retrieve issue details | 
/api/support-issues/{uuid}/ | 
PATCH | Update issue | 
/api/support-issues/{uuid}/ | 
DELETE | Delete issue | 
/api/support-issues/{uuid}/comment/ | 
POST | Add comment to issue | 
/api/support-issues/{uuid}/sync/ | 
POST | Sync issue with backend | 
Comments
| Endpoint | Method | Description | 
|---|---|---|
/api/support-comments/ | 
GET | List comments | 
/api/support-comments/{uuid}/ | 
GET | Retrieve comment | 
/api/support-comments/{uuid}/ | 
PATCH | Update comment | 
/api/support-comments/{uuid}/ | 
DELETE | Delete comment | 
Attachments
| Endpoint | Method | Description | 
|---|---|---|
/api/support-attachments/ | 
GET | List attachments | 
/api/support-attachments/ | 
POST | Upload attachment | 
/api/support-attachments/{uuid}/ | 
GET | Download attachment | 
/api/support-attachments/{uuid}/ | 
DELETE | Delete attachment | 
Configuration & Management
| Endpoint | Method | Description | 
|---|---|---|
/api/support-users/ | 
GET | List support users | 
/api/support-priorities/ | 
GET | List priorities | 
/api/support-templates/ | 
GET/POST | Manage templates | 
/api/support-feedback/ | 
GET/POST | Manage feedback | 
/api/support-issue-statuses/ | 
GET/POST | Manage issue statuses (staff only) | 
/api/support-issue-statuses/{uuid}/ | 
GET/PATCH/DELETE | Issue status details (staff only) | 
Webhooks
| Endpoint | Method | Description | 
|---|---|---|
/api/support-jira-webhook/ | 
POST | JIRA webhook receiver | 
/api/support-smax-webhook/ | 
POST | SMAX webhook receiver | 
/api/support-zammad-webhook/ | 
POST | Zammad webhook receiver | 
Reports
| Endpoint | Method | Description | 
|---|---|---|
/api/support-statistics/ | 
GET | Dashboard statistics | 
/api/support-feedback-report/ | 
GET | Feedback summary | 
/api/support-feedback-average-report/ | 
GET | Average ratings | 
Permissions
Permission Model
The support module uses Waldur's standard permission system with additional paths:
1 2 3 4 5 6 7 8 9 10 11 12  |  | 
Filtering
Advanced filtering capabilities:
- Customer/project-based filtering
 - Resource-based filtering (VMs, networks)
 - IP address lookup for resource issues
 - Full-text search across summary/description
 - Status, priority, and type filtering
 
Configuration
Django Settings
1 2 3 4 5 6 7 8  |  | 
Constance Settings
Dynamic configuration via admin:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16  |  | 
Backend Configuration
JIRA Configuration
1 2 3 4 5 6 7 8  |  | 
SMAX Configuration
1 2 3 4 5 6 7  |  | 
Zammad Configuration
1 2 3 4 5 6  |  | 
Workflows
Issue Creation Flow
sequenceDiagram
    participant User
    participant API
    participant Models
    participant Backend
    participant External
    User->>API: POST /support-issues/
    API->>Models: Create Issue
    Models->>Backend: create_issue()
    Backend->>External: Create ticket
    External-->>Backend: Ticket ID
    Backend-->>Models: Update backend_id
    Models-->>API: Issue created
    API-->>User: 201 Created
Synchronization Flow
sequenceDiagram
    participant Scheduler
    participant Backend
    participant External
    participant Models
    Scheduler->>Backend: sync_issues()
    Backend->>External: Fetch updates
    External-->>Backend: Issue data
    Backend->>Models: Update issues
    Note over Backend,Models: Update status, comments, attachments
    Backend->>Models: Process callbacks
    Note over Models: Trigger marketplace callbacks if needed
Webhook Flow
sequenceDiagram
    participant External
    participant Webhook
    participant Models
    participant Callbacks
    External->>Webhook: POST /support-*-webhook/
    Webhook->>Webhook: Validate signature
    Webhook->>Models: Update issue/comment
    alt Status changed
        Models->>Callbacks: Trigger callbacks
        Note over Callbacks: Resource state updates
    end
    Webhook-->>External: 200 OK
Celery Tasks
Scheduled background tasks:
| Task | Schedule | Description | 
|---|---|---|
pull-support-users | 
Every 6 hours | Sync support users from backend | 
pull-priorities | 
Daily at 1 AM | Update priority levels | 
sync_request_types | 
Daily at 1 AM | Sync JIRA request types | 
sync-issues | 
Configurable | Full issue synchronization | 
Best Practices
1. Backend Selection
- Use JIRA for enterprise environments with existing Atlassian infrastructure
 - Use SMAX for ITIL-compliant service management
 - Use Zammad for open-source, multi-channel support
 - Use Basic for development or minimal requirements
 
2. Status Configuration
- Map all backend statuses: Create IssueStatus entries for every status that your backend can return
 - Define clear RESOLVED vs CANCELED mappings:
 - RESOLVED (type=0): Statuses indicating successful completion
 - CANCELED (type=1): Statuses indicating cancellation or failure
 - Use descriptive names: Match the exact status names from your backend system
 - Test status transitions: Verify resolution detection works correctly before production
 - Staff-only management: Only staff users can create/modify status configurations
 - Regular monitoring: Review status configurations when backend workflows change
 
3. Performance Optimization
- Enable webhooks for real-time updates
 - Configure appropriate sync intervals
 - Use pagination for large issue lists
 - Implement caching for frequently accessed data
 
4. Security
- Use secure webhook endpoints with signature validation
 - Implement proper permission checks
 - Sanitize user input in comments/descriptions
 - Use HTTPS for all backend connections
 
5. Custom Field Integration
- Enable custom field mapping: Set 
ATLASSIAN_CUSTOM_ISSUE_FIELD_MAPPING_ENABLED = Truefor enhanced integration - Create required custom fields: Ensure 
waldur_backend_idcustom field exists in Jira/Service Desk - Test field permissions: Verify API user can read/write custom fields
 - Monitor field updates: Log resource backend_id changes for audit trails
 - Validate field values: Ensure custom field values are appropriate for resource backend IDs
 - Document field usage: Maintain clear documentation of custom field purposes and expected values
 
6. Monitoring
- Monitor sync task execution
 - Track webhook delivery failures
 - Log backend API errors
 - Set up alerts for SLA breaches
 - Monitor custom field mapping operations
 - Track resource backend_id updates via logs
 
Troubleshooting
Common Issues
1. Issues Not Syncing
- Check backend connectivity
 - Verify API credentials
 - Review sync task logs
 - Ensure webhook configuration
 
2. Missing Status Updates
- Verify IssueStatus configuration
 - Check webhook signature validation
 - Review backend field mappings
 - Monitor sync intervals
 
3. Permission Errors
- Verify user roles and permissions
 - Check customer/project associations
 - Review permission paths configuration
 - Validate backend user permissions
 
4. Attachment Upload Failures
- Check file size limits
 - Verify MIME type restrictions
 - Review storage permissions
 - Monitor backend API limits
 
5. Custom Field Mapping Issues
- Field Not Found: Verify 
waldur_backend_idcustom field exists in Jira (should becustomfield_10200) - Mapping Disabled: Ensure 
ATLASSIAN_CUSTOM_ISSUE_FIELD_MAPPING_ENABLED = True - Resource Not Updated: Check if issue is properly connected to resource via 
resource_content_typeandresource_object_id - Permission Errors: Verify Jira user has permission to read/write custom fields
 - Field Name Mismatch: Ensure custom field name matches exactly 
waldur_backend_id - API Errors: Check Jira REST API logs for custom field access issues
 
Debugging Custom Field Integration:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15  |  | 
Integration with Marketplace
The support module integrates with the marketplace for ticket-based offerings:
- Orders create support issues automatically
 - Issue status changes trigger order callbacks
 - Resolution status determines order success/failure
 - Comments and attachments sync bidirectionally
 - Resource backend_id synchronization: Custom field mapping enables automatic resource identifier updates
 
Enhanced Marketplace Integration Features:
- Support.OfferingTemplate Integration: Marketplace orders for support offerings automatically create connected support issues
 - One-way Resource Sync: Service Desk custom field updates can automatically update connected marketplace resource backend IDs
 - Cross-System Data Flow: External systems can update Waldur resources via Service Desk custom field modifications
 - Automated Identifier Management: Maintains consistent resource identifiers across integrated platforms
 
See Ticket-Based Offerings Documentation for detailed marketplace integration.
Extension Points
The support module provides several extension points:
- Custom Backends: Implement 
SupportBackendinterface - Template Processors: Custom template variable processing
 - Notification Handlers: Custom email/notification logic
 - Webhook Processors: Custom webhook payload processing
 - Feedback Collectors: Alternative feedback mechanisms
 
Appendix
Database Schema
Key database tables:
support_issue- Issue recordssupport_comment- Issue commentssupport_attachment- File attachmentssupport_supportuser- Backend user mappingsupport_priority- Priority levelssupport_issuestatus- Status configuration (with UUID support)support_template- Issue templatessupport_feedback- Customer feedback
API Filters
Available query parameters:
1 2 3 4 5 6 7 8 9 10 11 12  |  | 
Error Codes
Common error responses:
| Code | Description | 
|---|---|
| 400 | Invalid request data | 
| 401 | Authentication required | 
| 403 | Permission denied | 
| 404 | Issue/resource not found | 
| 409 | Conflict (duplicate, state issue) | 
| 424 | Backend dependency failed | 
| 500 | Internal server error |