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
Multi-Tenant Provider Helpdesk
The support module includes a multi-tenant provider helpdesk system that enables service providers to register their own helpdesk backends. Tickets are automatically routed to the correct provider, with bidirectional comment forwarding between operator and provider via parent/child issue pairs.
Key capabilities:
- Per-provider helpdesk backends (Atlassian, Zammad, SMAX, Basic, Email)
- Automatic ticket routing based on resource/offering/provider chain
- SLA management with configurable deadlines and breach detection
- Auto-assignment with least-loaded and round-robin strategies
- Escalation workflow with provider notifications
- Provider team management and canned responses
See Provider Helpdesk Documentation for details.
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 |