Template Rendering 
Open Ticket AI uses Jinja2 for dynamic template rendering in configuration files and text generation.
Jinja2 Template System 
Jinja2 provides:
- Variable substitution
- Conditional logic
- Loops and filters
- Custom extensions
Template Expressions in Configuration 
Use templates in YAML configuration:
yaml
pipes:
  - pipe_name: add_note
    note_text: "Classified as {{ context.queue }} with priority {{ context.priority }}"Custom Template Extensions 
Open Ticket AI provides custom Jinja2 extensions:
Context Access 
Access pipeline context directly in templates:
jinja2
{{ context.ticket.id }}
{{ context.classification_result.confidence }}Filters 
Custom filters for common operations:
jinja2
{{ ticket.created_at | format_date }}
{{ text | truncate(100) }}
{{ value | default("N/A") }}Functions 
Helper functions available in templates:
jinja2
{{ now() }}
{{ random_id() }}
{{ format_priority(value) }}Template Context and Variables 
The template context includes:
- Pipeline execution context
- Environment variables
- Configuration values
- Custom variables
Examples 
Conditional Note 
yaml
note_text: >
  {% if context.priority == 'high' %}
  URGENT: This ticket requires immediate attention.
  {% else %}
  Standard priority ticket.
  {% endif %}Dynamic Queue Assignment 
yaml
queue: >
  {% if 'billing' in context.ticket.subject.lower() %}
  Billing
  {% elif 'technical' in context.ticket.subject.lower() %}
  Technical Support
  {% else %}
  General
  {% endif %}Loop Through Results 
yaml
summary: >
  Processed {{ context.tickets | length }} tickets:
  {% for ticket in context.tickets %}
  - Ticket #{{ ticket.id }}: {{ ticket.status }}
  {% endfor %}Security Considerations 
- Templates run in a sandboxed environment
- Dangerous operations are disabled
- User input is automatically escaped
- Use safefilter only for trusted content