Auto-Trigger

Automate WhatsApp Messages by User Events

Send WhatsApp messages the moment something happens: call the REST API from your backend, connect Zapier, Make or Pabbly, reply to keywords automatically, or start a chatbot flow when a customer writes in.

✦ 14-day free trial · Your own WhatsApp Business number · Meta bills messages directly

Event-Driven Message Automation

Call one API endpoint from your app or store backend — or use Zapier, Make or Pabbly — to send abandoned-checkout reminders, welcome messages and feedback requests as approved templates. Customer replies and delivery updates come back to you as signed webhooks.

  • Signed webhooks for replies and delivery status, with a delivery log and redelivery
  • Keyword auto-replies (exact, contains or starts-with) with text or template replies, matched on whole words (Team and Business)
  • Connect Zapier, Make or Pabbly, or call the REST API from any backend
WhatsApp Trigger Engine Diagram
How It Works

3 Steps to Automated Messaging

01

Define Your Trigger Event

Decide what sends the message: an event in your own backend, a Zapier, Make or Pabbly workflow, a keyword the customer sends, or a chatbot flow trigger. Keyword auto-replies are on Team and Business; chatbot flows are on Business.

02

Pick Your Template & Variables

Select an approved WhatsApp template and fill its variables for each customer. Delays such as '1 hour after cart abandonment' are timed by your own system or automation tool.

03

Activate & Monitor

Turn it on and follow delivery and read status in the dashboard, through the API, or by webhook.

Integration Model

Event Triggers vs. Polling Systems vs. Manual Webhooks

Compare setup overhead, network latency, and infrastructure resource costs for event automation.

Comparison Point Real-time Event Triggers Cron Polling Systems Manual Direct Webhooks
Message Latency Seconds (sent as the event happens) Minutes to hours (Batch run) Seconds (direct hook)
Development Effort Low (Configure on UI/API) Medium (Write scheduler logic) High (Handle edge failures)
Server Load Overhead Minimal (Event-driven) High (Heavy periodic DB scans) Minimal (Push updates)
Error Handling ✓ (Safe retries with Idempotency-Key, webhook redelivery) ✗ (Manual correction needed) ✗ (Requires custom script queues)
API triggers

Send an automated message from your own backend

curl -X POST https://waba-api.startmessaging.com/api/v1/messages \
  -H "Authorization: Bearer sm_live_your_api_key" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: order-1042-confirm" \
  -d '{
    "to": "+919812345678",
    "type": "template",
    "template": {
      "name": "cod_order_confirmation",
      "language": "en_US",
      "parameters": [
        {
          "text": "Asha"
        },
        {
          "text": "#1042"
        },
        {
          "text": "₹1,299"
        }
      ]
    },
    "clientReference": "order-1042"
  }'
const res = await fetch('https://waba-api.startmessaging.com/api/v1/messages', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ' + process.env.SM_API_KEY,
    'Content-Type': 'application/json',
    'Idempotency-Key': 'order-1042-confirm',
  },
  body: JSON.stringify({
    "to": "+919812345678",
    "type": "template",
    "template": {
      "name": "cod_order_confirmation",
      "language": "en_US",
      "parameters": [
        {
          "text": "Asha"
        },
        {
          "text": "#1042"
        },
        {
          "text": "₹1,299"
        }
      ]
    },
    "clientReference": "order-1042"
  }),
});

const { data } = await res.json();
console.log(data.id, data.status);
import os, requests

res = requests.post(
    'https://waba-api.startmessaging.com/api/v1/messages',
    headers={
        'Authorization': f"Bearer {os.environ['SM_API_KEY']}",
        'Idempotency-Key': 'order-1042-confirm',
    },
    json={
      "to": "+919812345678",
      "type": "template",
      "template": {
        "name": "cod_order_confirmation",
        "language": "en_US",
        "parameters": [
          {
            "text": "Asha"
          },
          {
            "text": "#1042"
          },
          {
            "text": "₹1,299"
          }
        ]
      },
      "clientReference": "order-1042"
    },
)

data = res.json()['data']
print(data['id'], data['status'])
<?php
$body = <<<'JSON'
{
  "to": "+919812345678",
  "type": "template",
  "template": {
    "name": "cod_order_confirmation",
    "language": "en_US",
    "parameters": [
      {
        "text": "Asha"
      },
      {
        "text": "#1042"
      },
      {
        "text": "₹1,299"
      }
    ]
  },
  "clientReference": "order-1042"
}
JSON;

$ch = curl_init('https://waba-api.startmessaging.com/api/v1/messages');
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer ' . getenv('SM_API_KEY'),
        'Content-Type: application/json',
        'Idempotency-Key: order-1042-confirm',
    ],
    CURLOPT_POSTFIELDS => $body,
]);
$data = json_decode(curl_exec($ch), true)['data'];
echo $data['id'] . ' ' . $data['status'];
Conversions

Report the sale back, credit the campaign

On the Business plan, when your shop or billing system records a sale, POST /api/v1/conversions credits it to the last campaign delivered to that number within your conversion window, and the campaign report adds up the value.

# Your shop marks an order paid: report it as a conversion (Business, scope conversions:write)
curl -X POST https://waba-api.startmessaging.com/api/v1/conversions \
  -H "Authorization: Bearer sm_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "phone": "+919812345678",
    "orderId": "ORD-10442",
    "value": 2499.5,
    "currency": "INR"
  }'
// In your order-paid handler
async function reportConversion(order) {
  const res = await fetch('https://waba-api.startmessaging.com/api/v1/conversions', {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer ' + process.env.SM_API_KEY, // sm_live_your_api_key
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      phone: order.customerPhone, // E.164, e.g. +919812345678
      orderId: order.id,          // safe to retry: the same orderId never counts twice
      value: Math.round(order.total * 100) / 100, // at most 2 decimals
      currency: 'INR',
    }),
  });
  const { data } = await res.json(); // 201 = recorded, 200 = already reported
  return data.conversion.campaign; // the campaign credited, or null
}
FAQs

Auto-Trigger — FAQ

Can I set delays for triggered messages?

Delays are set where the trigger lives. If you send from your backend or from Zapier, Make or Pabbly, time the API call there — for example, an abandoned-cart reminder 1 hour later and a second one at 24 hours. Inside chatbot flows, a 'wait delay' step pauses before the next message. Outside the 24-hour customer service window, only approved templates are delivered.

Which plan do I need for these automations?

The REST API and signed webhooks are on every plan, Developer Free included. Keyword auto-replies are on Team and Business. Chatbot flows, with their wait-delay steps, and reporting conversions with POST /api/v1/conversions are on Business. The 14-day free trial includes everything in Business.

WhatsApp API

Automate Your Customer Journeys

14-day free trial. Connect your own WhatsApp Business number in minutes.