Practical examples of how teams use Message Panel to solve real problems.
Development Teams
Blocking Issues Alert
Show issues that are blocking the current issue from progressing.
Data Source: Linked Issues Link Types: “is blocked by” (inward) Display Module: Issue Panel
{% if linkedIssues | len > 0 %}
<div style="padding: 12px; background: #FFEBE6; border-left: 4px solid #DE350B; margin-bottom: 12px;">
<strong>Blocked by {{ linkedIssues | len }} issue(s)</strong>
</div>
<table style="width: 100%; border-collapse: collapse;">
<tr style="background: #F4F5F7;">
<th style="padding: 8px; text-align: left;">Issue</th>
<th style="padding: 8px; text-align: left;">Status</th>
<th style="padding: 8px; text-align: left;">Assignee</th>
</tr>
{% for blocker in linkedIssues %}
<tr>
<td style="padding: 8px;">{{ blocker | issueLink }}</td>
<td style="padding: 8px;">{{ blocker.fields.status | statusBadge }}</td>
<td style="padding: 8px;">{{ blocker.fields.assignee.displayName | default("Unassigned") }}</td>
</tr>
{% endfor %}
</table>
{% endif %}
Epic Progress Dashboard
Display progress of child issues within an Epic.
Data Source: JQL Query
Display Module: Issue Panel
Issue Types: Epic
JQL: "Epic Link" = OR parent =
{% set total = linkedIssues | len %}
{% set done = linkedIssues | filter("fields.status.statusCategory.key", "done") | len %}
{% set inProgress = linkedIssues | filter("fields.status.statusCategory.key", "indeterminate") | len %}
{% set todo = total - done - inProgress %}
{% set percent = total > 0 ? ((done / total) * 100) | round : 0 %}
<div style="margin-bottom: 16px;">
<strong>Epic Progress: {{ percent }}%</strong>
<div style="background: #DFE1E6; border-radius: 4px; height: 8px; margin-top: 8px;">
<div style="background: #00875A; width: {{ percent }}%; height: 100%; border-radius: 4px;"></div>
</div>
</div>
<div style="display: flex; gap: 16px; margin-bottom: 16px;">
<div><span style="color: #00875A;">Done:</span> {{ done }}</div>
<div><span style="color: #0052CC;">In Progress:</span> {{ inProgress }}</div>
<div><span style="color: #6B778C;">To Do:</span> {{ todo }}</div>
</div>
{% if linkedIssues | len > 0 %}
<details>
<summary style="cursor: pointer; color: #0052CC;">View all {{ total }} issues</summary>
<ul style="margin-top: 8px;">
{% for child in linkedIssues | take(20) %}
<li>{{ child | issueLink }} - {{ child.fields.status | statusBadge }}</li>
{% endfor %}
{% if total > 20 %}
<li><em>...and {{ total - 20 }} more</em></li>
{% endif %}
</ul>
</details>
{% endif %}
Code Review Checklist
Display a checklist for code review tasks.
Data Source: Empty (Message only)
Display Module: Issue Panel
Issue Types: Story, Task, Bug
Display JQL: status = "Code Review"
<div style="padding: 12px; background: #DEEBFF; border-left: 4px solid #0052CC;">
<strong>Code Review Checklist</strong>
</div>
<div style="padding: 12px;">
<p><strong>Before approving, verify:</strong></p>
<ul style="list-style: none; padding-left: 0;">
<li>[ ] Code follows team conventions</li>
<li>[ ] Unit tests added/updated</li>
<li>[ ] No security vulnerabilities</li>
<li>[ ] Documentation updated</li>
<li>[ ] No console.log or debug code</li>
</ul>
{% if issue.fields.customfield_10001 %}
<p style="margin-top: 12px;"><strong>PR Link:</strong>
<a href="{{ issue.fields.customfield_10001 }}" target="_blank">View Pull Request</a>
</p>
{% endif %}
</div>
Sprint Scope Warning
Warn when issue is not assigned to a sprint.
Data Source: Empty (Message only)
Display Module: Issue Panel
Display JQL: sprint is EMPTY AND status != Done AND type in (Story, Task, Bug)
<div style="padding: 12px; background: #FFFAE6; border-left: 4px solid #FF8B00;">
<strong>Sprint Planning Required</strong>
<p style="margin: 8px 0 0 0;">
This issue is not assigned to any sprint.
{% if issue.fields.assignee %}
<br>Assignee: {{ issue.fields.assignee.displayName }}
{% else %}
<br>No assignee - consider assigning this issue.
{% endif %}
</p>
</div>
Support Teams
Customer Information Panel
Display customer details from a linked customer ticket.
Data Source: Linked Issues Display Module: Issue Panel Link Types: “is caused by”, “relates to”
<div style="padding: 12px; background: #F4F5F7; border-radius: 4px;">
<strong>Customer Information</strong>
{% if issue.fields.reporter %}
<div style="margin-top: 12px;">
<p><strong>Reporter:</strong> {{ issue.fields.reporter.displayName }}</p>
{% if issue.fields.reporter.emailAddress %}
<p><strong>Email:</strong> {{ issue.fields.reporter.emailAddress }}</p>
{% endif %}
</div>
{% endif %}
{% if issue.fields.customfield_10050 %}
<div style="margin-top: 12px;">
<p><strong>Company:</strong> {{ issue.fields.customfield_10050 }}</p>
</div>
{% endif %}
{% if issue.fields.customfield_10051 %}
<div style="margin-top: 12px;">
<p><strong>Support Tier:</strong> {{ issue.fields.customfield_10051.value }}</p>
</div>
{% endif %}
</div>
SLA Warning
Display SLA breach warnings for support tickets.
Data Source: Empty (Message only)
Display Module: Issue Panel
Projects: Support projects
Display JQL: status != Done AND status != Closed
{% set duedate = issue.fields.duedate %}
{% if duedate %}
{% if isPast(duedate) %}
<div style="padding: 12px; background: #FFEBE6; border-left: 4px solid #DE350B;">
<strong>SLA BREACHED</strong>
<p style="margin: 8px 0 0 0;">
Due date was {{ duedate | fromNow }}
<br>Immediate action required!
</p>
</div>
{% elif dateDiff(now(), duedate, "hours") < 24 %}
<div style="padding: 12px; background: #FFFAE6; border-left: 4px solid #FF8B00;">
<strong>SLA At Risk</strong>
<p style="margin: 8px 0 0 0;">
Due {{ duedate | fromNow }}
<br>Due date: {{ duedate | date("yyyy-MM-dd HH:mm") }}
</p>
</div>
{% else %}
<div style="padding: 12px; background: #E3FCEF; border-left: 4px solid #00875A;">
<strong>SLA On Track</strong>
<p style="margin: 8px 0 0 0;">Due {{ duedate | fromNow }}</p>
</div>
{% endif %}
{% endif %}
Related Tickets
Show other tickets from the same customer or about the same topic.
Data Source: JQL Query
Display Module: Issue Panel
JQL: reporter = "" AND key != ORDER BY created DESC
Max Issues: 10
{% if linkedIssues | len > 0 %}
<div style="padding: 12px; background: #F4F5F7; border-radius: 4px;">
<strong>Other Tickets from this Customer</strong>
<table style="width: 100%; border-collapse: collapse; margin-top: 12px;">
{% for ticket in linkedIssues | take(5) %}
<tr>
<td style="padding: 6px 0;">
{{ ticket | issueLink }}
<span style="color: #6B778C; font-size: 12px;">
{{ ticket.fields.created | fromNow }}
</span>
</td>
<td style="padding: 6px 0; text-align: right;">
{{ ticket.fields.status | statusBadge }}
</td>
</tr>
{% endfor %}
</table>
{% if linkedIssues | len > 5 %}
<p style="margin-top: 8px; color: #6B778C; font-size: 12px;">
+{{ linkedIssues | len - 5 }} more tickets
</p>
{% endif %}
</div>
{% endif %}
Resolution Guide
Display troubleshooting steps based on issue category.
Data Source: Empty (Message only)
Display Module: Issue Panel
Display JQL: "Issue Category" = "Login Issues"
<div style="padding: 12px; background: #DEEBFF; border-left: 4px solid #0052CC;">
<strong>Resolution Guide: Login Issues</strong>
</div>
<div style="padding: 12px;">
<p><strong>Common solutions:</strong></p>
<ol>
<li>Verify the user's email address is correct</li>
<li>Check if the account is locked (Admin Console)</li>
<li>Ask user to clear browser cache and cookies</li>
<li>Try incognito/private browsing mode</li>
<li>Check for any active maintenance windows</li>
</ol>
<p style="margin-top: 12px;">
<strong>Escalation:</strong> If issue persists, escalate to Tier 2 with:
<ul>
<li>Browser and OS version</li>
<li>Screenshot of error message</li>
<li>HAR file if possible</li>
</ul>
</p>
</div>
More Examples
- Use Cases - Management & HR - Project managers, HR, and compliance examples
- Use Cases - Portal & Simplified - JSM portal examples and section message patterns
Related Documentation
- Configuration Basics - Create panels
- Data Sources - JQL and linked issues
- Templates - Template syntax reference
- Context Filters - Visibility rules
Message Panel for Jira Cloud