<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Configure templates for OnCall OSS on Grafana Labs</title><link>https://grafana.com/docs/oncall/v1.68.x/configure/jinja2-templating/</link><description>Recent content in Configure templates for OnCall OSS on Grafana Labs</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="/docs/oncall/v1.68.x/configure/jinja2-templating/index.xml" rel="self" type="application/rss+xml"/><item><title>Advanced template configuration</title><link>https://grafana.com/docs/oncall/v1.68.x/configure/jinja2-templating/advanced-templates/</link><pubDate>Fri, 03 Apr 2026 16:45:36 +0000</pubDate><guid>https://grafana.com/docs/oncall/v1.68.x/configure/jinja2-templating/advanced-templates/</guid><content><![CDATA[&lt;h1 id=&#34;advanced-template-configuration&#34;&gt;Advanced template configuration&lt;/h1&gt;
&lt;p&gt;Grafana OnCall uses the &lt;a href=&#34;http://jinja.pocoo.org/docs/2.10/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Jinja templating language&lt;/a&gt; to
format alert groups for various platforms such as the Web, Slack, phone calls, SMS messages, and more.
This allows you to customize the presentation and content of alerts when they are triggered.&lt;/p&gt;
&lt;p&gt;Jinja2 offers a range of functionalities, including loops, conditions, and functions, which can be used to enhance alert template customization.
Every alert from a monitoring system is received in a key/value format, which Grafana OnCall maps to specific fields, such as:
&lt;code&gt;title&lt;/code&gt;, &lt;code&gt;message&lt;/code&gt;, &lt;code&gt;image&lt;/code&gt;, &lt;code&gt;grouping&lt;/code&gt;, and &lt;code&gt;auto-resolve&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;To learn more about mapping your alert payload to Grafana OnCall fields, refer to 
    &lt;a href=&#34;/docs/oncall/v1.68.x/configure/jinja2-templating/#map-payloads-to-oncall-fields&#34;&gt;map payloads to  OnCall fields&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;loops&#34;&gt;Loops&lt;/h2&gt;
&lt;p&gt;Monitoring systems can send an array of values. Use Jinja to iterate and format the alert payloads. For example:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;.jinja2&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-jinja2&#34;&gt;*Values:*
 {% for evalMatch in payload.evalMatches -%}
 `{{ evalMatch[&amp;#39;metric&amp;#39;] }}: &amp;#39;{{ evalMatch[&amp;#39;value&amp;#39;] -}}&amp;#39;`{{ &amp;#34; &amp;#34; }}
 {%- endfor %}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;conditions&#34;&gt;Conditions&lt;/h2&gt;
&lt;p&gt;Add conditional instructions based on specific alert rules. For instance, to provide instructions when an alert comes from a specific Grafana alert rule:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;jinja2&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-jinja2&#34;&gt;{% if  payload.ruleId == &amp;#39;1&amp;#39; -%}
*Alert TODOs*
1. Get access to the container
    ```
        kubectl port-forward service/example 3000:80
    ```
2. Check for the exception.
3. Open the container and reload caches.
4. Click Custom Button `Send to Jira`
{%- endif -%}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;built-in-jinja-functions&#34;&gt;Built-in Jinja functions&lt;/h2&gt;
&lt;p&gt;Jinja2 includes various built-in functions that can be used in Grafana OnCall. For example, to prettify JSON:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;.jinja2&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-jinja2&#34;&gt;{{ payload | tojson_pretty }}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Some commonly used built-in functions include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;abs&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;capitalize&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;trim&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For a full list of Jinja built-in functions, see the
&lt;a href=&#34;https://github.com/pallets/jinja/blob/3915eb5c2a7e2e4d49ebdf0ecb167ea9c21c60b2/src/jinja2/filters.py#L1307&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Jinja documentation on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;functions-added-by-grafana-oncall&#34;&gt;Functions added by Grafana OnCall&lt;/h2&gt;
&lt;p&gt;Grafana OnCall enhances Jinja with additional functions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;time()&lt;/code&gt;: Current time&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tojson&lt;/code&gt;: Dumps a structure to JSON&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tojson_pretty&lt;/code&gt;: Same as &lt;code&gt;tojson&lt;/code&gt;, but prettified&lt;/li&gt;
&lt;li&gt;&lt;code&gt;iso8601_to_time&lt;/code&gt;: Converts ISO8601 time (&lt;code&gt;2015-02-17T18:30:20.000Z&lt;/code&gt;) to datetime&lt;/li&gt;
&lt;li&gt;&lt;code&gt;datetimeformat&lt;/code&gt;: Converts datetime to string according to strftime format codes (&lt;code&gt;%H:%M / %d-%m-%Y&lt;/code&gt; by default)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;datetimeformat_as_timezone&lt;/code&gt;: Converts datetime to string with timezone conversion (&lt;code&gt;UTC&lt;/code&gt; by default)
&lt;ul&gt;
&lt;li&gt;Usage example: &lt;code&gt;{{ payload.alerts.startsAt | iso8601_to_time | datetimeformat_as_timezone(&#39;%Y-%m-%dT%H:%M:%S%z&#39;, &#39;America/Chicago&#39;) }}&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;datetimeparse&lt;/code&gt;: Converts string to datetime according to strftime format codes (&lt;code&gt;%H:%M / %d-%m-%Y&lt;/code&gt; by default)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;timedeltaparse&lt;/code&gt;: Converts a time range (e.g., &lt;code&gt;5s&lt;/code&gt;, &lt;code&gt;2m&lt;/code&gt;, &lt;code&gt;6h&lt;/code&gt;, &lt;code&gt;3d&lt;/code&gt;) to a timedelta that can be added to or subtracted from a datetime
&lt;ul&gt;
&lt;li&gt;Usage example: &lt;code&gt;{% set delta = alert.window | timedeltaparse %}{{ alert.startsAt | iso8601_to_time - delta | datetimeformat }}&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;timestamp_to_datetime&lt;/code&gt;: Converts a Unix/Epoch time to a datetime object&lt;/li&gt;
&lt;li&gt;&lt;code&gt;regex_replace&lt;/code&gt;: Performs a regex find and replace&lt;/li&gt;
&lt;li&gt;&lt;code&gt;regex_match&lt;/code&gt;: Performs a regex match, returns &lt;code&gt;True&lt;/code&gt; or &lt;code&gt;False&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;Usage example: &lt;code&gt;{{ payload.ruleName | regex_match(&amp;quot;.*&amp;quot;) }}&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;regex_search&lt;/code&gt;: Performs a regex search, returns &lt;code&gt;True&lt;/code&gt; or &lt;code&gt;False&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;Usage example: &lt;code&gt;{{ payload.message | regex_search(&amp;quot;Severity: (High|Critical)&amp;quot;) }}&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;b64decode&lt;/code&gt;: Performs a base64 string decode
&lt;ul&gt;
&lt;li&gt;Usage example: &lt;code&gt;{{ payload.data | b64decode }}&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;parse_json&lt;/code&gt;:Parses a JSON string to an object
&lt;ul&gt;
&lt;li&gt;Usage example: &lt;code&gt;{{ (payload.data | b64decode | parse_json).name }}&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
]]></content><description>&lt;h1 id="advanced-template-configuration">Advanced template configuration&lt;/h1>
&lt;p>Grafana OnCall uses the &lt;a href="http://jinja.pocoo.org/docs/2.10/" target="_blank" rel="noopener noreferrer">Jinja templating language&lt;/a> to
format alert groups for various platforms such as the Web, Slack, phone calls, SMS messages, and more.
This allows you to customize the presentation and content of alerts when they are triggered.&lt;/p></description></item></channel></rss>