<?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: Azam Sajid</title>
    <description>The latest articles on DEV Community by Azam Sajid (@azam_sajid_23d219a841a620).</description>
    <link>https://dev.to/azam_sajid_23d219a841a620</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3409021%2Fdff72216-3afa-40cc-8443-1a83472710c9.jpg</url>
      <title>DEV Community: Azam Sajid</title>
      <link>https://dev.to/azam_sajid_23d219a841a620</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/azam_sajid_23d219a841a620"/>
    <language>en</language>
    <item>
      <title>Beyond the Notification: Building Real-Time Shopify Admin Updates via WhatsApp Webhooks</title>
      <dc:creator>Azam Sajid</dc:creator>
      <pubDate>Tue, 17 Mar 2026 14:28:47 +0000</pubDate>
      <link>https://dev.to/azam_sajid_23d219a841a620/beyond-the-notification-building-real-time-shopify-admin-updates-via-whatsapp-webhooks-3k97</link>
      <guid>https://dev.to/azam_sajid_23d219a841a620/beyond-the-notification-building-real-time-shopify-admin-updates-via-whatsapp-webhooks-3k97</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn8i0lbapf2r26obkfyk3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn8i0lbapf2r26obkfyk3.png" alt=" " width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Standard SMS is a black hole for data. When you send a verification text for a Shopify COD order, you’re just shouting into the void and hoping for a reply.&lt;/p&gt;

&lt;p&gt;At Waaibot, we decided to treat WhatsApp not just as a messaging app, but as a &lt;strong&gt;remote UI for Shopify&lt;/strong&gt;. By leveraging the Official WhatsApp Business API and Shopify Webhooks, we built an interactive flow where a customer’s button click triggers a millisecond-fast state change in the merchant's Admin Panel.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Logic Flow:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Order Created:&lt;/strong&gt; Shopify fires a &lt;code&gt;orders/create&lt;/code&gt; webhook to our Next.js backend.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interactive Dispatch:&lt;/strong&gt; We send a template message with "Confirm" and "Cancel" buttons via Meta Cloud API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Interaction:&lt;/strong&gt; User taps "Confirm." WhatsApp sends a webhook to us.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Update:&lt;/strong&gt; We hit the Shopify Admin API to flip the order status, update tags, and adjust inventory.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We even built an interactive simulator in our latest technical deep-dive to show how this state management works in real-time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Read the full technical breakdown and play with the simulator here:&lt;/strong&gt; &lt;a href="https://waaibot.com/blogs/shopify-cod-whatsapp" rel="noopener noreferrer"&gt;https://waaibot.com/blogs/shopify-cod-whatsapp&lt;/a&gt;&lt;/p&gt;

</description>
      <category>shopify</category>
      <category>webdev</category>
      <category>whatsappautomation</category>
      <category>webhooks</category>
    </item>
    <item>
      <title>How to Send Automated WhatsApp Messages from Oracle APEX (The Modern Way)</title>
      <dc:creator>Azam Sajid</dc:creator>
      <pubDate>Mon, 16 Mar 2026 20:41:32 +0000</pubDate>
      <link>https://dev.to/azam_sajid_23d219a841a620/how-to-send-automated-whatsapp-messages-from-oracle-apex-the-modern-way-3pjl</link>
      <guid>https://dev.to/azam_sajid_23d219a841a620/how-to-send-automated-whatsapp-messages-from-oracle-apex-the-modern-way-3pjl</guid>
      <description>&lt;p&gt;&lt;strong&gt;The Challenge: Beyond Standard Emails&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In modern ERP and CRM systems built on Oracle APEX, email notifications are no longer enough. Customers want real-time updates—order confirmations, shipping alerts, and OTPs—delivered directly to &lt;strong&gt;WhatsApp&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;While you can use &lt;code&gt;UTL_HTTP&lt;/code&gt;, the modern standard for APEX developers is &lt;code&gt;APEX_WEB_SERVICE&lt;/code&gt;. It’s cleaner, handles CLOBs better, and simplifies the REST call.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8q0pz579pa4t7ai9hq2a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8q0pz579pa4t7ai9hq2a.png" alt="Oracle APEX WhatsApp Integration Architecture using PL/SQL" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Method 1: Using &lt;code&gt;APEX_WEB_SERVICE.MAKE_REST_REQUEST&lt;/code&gt; (Recommended)
&lt;/h3&gt;

&lt;p&gt;This is the most efficient way. It integrates directly with the APEX engine and makes handling JSON payloads a breeze.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;DECLARE&lt;/span&gt;
  &lt;span class="n"&gt;l_response&lt;/span&gt; &lt;span class="k"&gt;CLOB&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="n"&gt;l_url&lt;/span&gt;      &lt;span class="n"&gt;VARCHAR2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'https://api.waaibot.com/api/v1/send'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="n"&gt;l_api_key&lt;/span&gt;  &lt;span class="n"&gt;VARCHAR2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'YOUR_API_KEY'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="n"&gt;l_body&lt;/span&gt;     &lt;span class="k"&gt;CLOB&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;BEGIN&lt;/span&gt;
  &lt;span class="c1"&gt;-- Constructing the JSON Payload&lt;/span&gt;
  &lt;span class="n"&gt;l_body&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'{"number": "923001234567", "message": "Your Order #1029 is ready for dispatch!"}'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;-- Setting headers and making the request&lt;/span&gt;
  &lt;span class="n"&gt;apex_web_service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;g_request_headers&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;  &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'Content-Type'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="n"&gt;apex_web_service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;g_request_headers&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'application/json'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="n"&gt;apex_web_service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;g_request_headers&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;  &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'Authorization'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="n"&gt;apex_web_service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;g_request_headers&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'Bearer '&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;l_api_key&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="n"&gt;l_response&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;apex_web_service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;make_rest_request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;p_url&lt;/span&gt;         &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;l_url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;p_http_method&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'POST'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;p_body&lt;/span&gt;        &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;l_body&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;-- Output response for debugging&lt;/span&gt;
  &lt;span class="n"&gt;DBMS_OUTPUT&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;put_line&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Response: '&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;l_response&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;END&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Method 2: The Legacy &lt;code&gt;UTL_HTTP&lt;/code&gt; Approach
&lt;/h3&gt;

&lt;p&gt;If you are working in a pure PL/SQL environment outside of an APEX session (like a background DBMS_JOB), you’ll need &lt;code&gt;UTL_HTTP&lt;/code&gt;. This requires your Oracle Wallet to be configured for SSL.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Waaibot uses a hybrid socket connection, which means you don't need to worry about complex Meta Business verification just to send a notification to your own customers.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  Why this Architecture Wins for Oracle Developers:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Zero Infrastructure:&lt;/strong&gt; No need to set up a Node.js middleware. Your database talks directly to the WhatsApp gateway.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost Efficiency:&lt;/strong&gt; Unlike the official Cloud API that charges per message, using a socket-based API at &lt;strong&gt;&lt;a href="https://waaibot.com" rel="noopener noreferrer"&gt;waaibot.com&lt;/a&gt;&lt;/strong&gt; allows for high-volume notifications without the "Meta tax."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security:&lt;/strong&gt; By using &lt;code&gt;APEX_WEB_SERVICE&lt;/code&gt;, you can store your API keys in APEX Web Credentials for maximum security.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Pro-Tip: Handling the Response
&lt;/h3&gt;

&lt;p&gt;Always wrap your call in a &lt;code&gt;JSON_TABLE&lt;/code&gt; query to log the &lt;code&gt;message_id&lt;/code&gt;. This allows you to track delivery statuses directly inside your APEX dashboard.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Want to try this in your dev environment?&lt;/strong&gt; Grab a free API key at &lt;strong&gt;&lt;a href="https://waaibot.com" rel="noopener noreferrer"&gt;waaibot.com&lt;/a&gt;&lt;/strong&gt; and start sending messages in under 5 minutes.&lt;/p&gt;

</description>
      <category>oracleapex</category>
      <category>webdev</category>
      <category>api</category>
      <category>automation</category>
    </item>
  </channel>
</rss>
