<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Narcis Bodea</title>
    <description>The latest articles on DEV Community by Narcis Bodea (@narcisbodea).</description>
    <link>https://dev.to/narcisbodea</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4237921%2Fff420aef-3dad-44ea-a79c-77ac38b06d72.jpg</url>
      <title>DEV Community: Narcis Bodea</title>
      <link>https://dev.to/narcisbodea</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/narcisbodea"/>
    <language>en</language>
    <item>
      <title>Send Grafana alerts as SMS from your own phone (no Twilio)</title>
      <dc:creator>Narcis Bodea</dc:creator>
      <pubDate>Tue, 10 Nov 2026 21:54:18 +0000</pubDate>
      <link>https://dev.to/narcisbodea/send-grafana-alerts-as-sms-from-your-own-phone-no-twilio-jfn</link>
      <guid>https://dev.to/narcisbodea/send-grafana-alerts-as-sms-from-your-own-phone-no-twilio-jfn</guid>
      <description>&lt;p&gt;Grafana's alerting is great — until the part where "text me when something's on fire" means signing up for Twilio, paying per message, and letting a third party see every alert. Here's how to get Grafana alerts as SMS from &lt;strong&gt;your own phone and number&lt;/strong&gt; instead. Works on any Grafana version, including Grafana Cloud, and needs no plugin.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you need
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;An Android phone with a SIM (this is what sends the texts).&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;SMSTunnel&lt;/strong&gt; app on that phone, paired once.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;Webhook contact point&lt;/strong&gt; in Grafana.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The texts go out from your own number, so recipients see &lt;em&gt;you&lt;/em&gt;, not a shortcode — and there's no per-message fee (the free tier is 25 texts/day, plenty for alerting).&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Make a webhook address
&lt;/h2&gt;

&lt;p&gt;In the SMSTunnel app/dashboard, create a webhook address and pick &lt;strong&gt;Grafana&lt;/strong&gt;. The address holds the phone number(s) you want alerted (it can text up to 10). That's the URL you'll paste into Grafana.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Add the contact point in Grafana
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Alerting → Contact points → + Add contact point&lt;/strong&gt;, Integration &lt;strong&gt;Webhook&lt;/strong&gt; &lt;em&gt;(Grafana 12+: Alerts &amp;amp; IRM → Alerting → Notification configuration → Contact points).&lt;/em&gt; Paste the SMSTunnel address as the URL. No extra headers, default payload — SMSTunnel reads Grafana's own alert JSON. Hit &lt;strong&gt;Test&lt;/strong&gt; (sends a real test alert), then &lt;strong&gt;Save&lt;/strong&gt; and select it in your alert rules or notification policies.&lt;/p&gt;

&lt;p&gt;That's it. A firing alert now looks like this on your phone:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[FIRING] DiskFull - Disk 95% full: /volume1
[RESOLVED] DiskFull - Disk 95% full: /volume1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Optional: full control over the message (Grafana 12+)
&lt;/h2&gt;

&lt;p&gt;If you'd rather shape the text yourself, use an API key instead of the webhook address:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;URL: &lt;code&gt;https://smstunnel.io/api/v1/sms/send&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Webhook settings → Extra Headers: &lt;code&gt;X-API-Key = &amp;lt;your SMSTunnel key&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Custom Payload → Payload Template, building the &lt;code&gt;to&lt;/code&gt;/&lt;code&gt;message&lt;/code&gt; fields from the alert.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Keep texts sane
&lt;/h2&gt;

&lt;p&gt;Let Grafana's &lt;strong&gt;notification policies&lt;/strong&gt; do the throttling: group wait, group interval, and repeat interval (a firing alert re-texts every repeat interval — 4h by default). Turn on "Disable resolved message" if you only want the &lt;em&gt;firing&lt;/em&gt; ones.&lt;/p&gt;

&lt;p&gt;Full guide (webhook + API key, with the exact payload template): &lt;a href="https://smstunnel.io/integrations/grafana" rel="noopener noreferrer"&gt;https://smstunnel.io/integrations/grafana&lt;/a&gt;&lt;/p&gt;

</description>
      <category>grafana</category>
      <category>devops</category>
      <category>selfhosted</category>
      <category>monitoring</category>
    </item>
  </channel>
</rss>
