SabFlow · Automation

Every automation needs a start. We have 30 of them.

Triggers are the entry point to any flow. SabFlow ships with 30+ native trigger types — message received, order paid, contact created, segment entered, cron schedule, signed webhook — plus a generic HTTP trigger for anything custom. Same observability, same retry policy, regardless of how the flow started.

  • 30+ native triggers across channels and systems
  • Signed webhook URLs with HMAC verification
  • Cron syntax with timezone awareness
  • Replay any trigger event from the inspector
The problem

The trigger is where automation projects die

Ask any team that has tried to ship a sophisticated automation and they will tell you the same story: the trigger broke. Shopify changed a webhook schema and abandoned-cart stopped firing. The cron job ran in UTC but the business operates in IST so Diwali greetings landed at 4:30am. A retry loop hammered the API and got the account rate-limited. A test webhook from a developer's laptop fired in production and sent 2,000 customers a duplicate offer.

These failures share a root cause: most platforms treat triggers as an afterthought. You pick from a dropdown, paste a URL, and hope. There is no replay, no schema validation, no visibility into what actually fired versus what should have. When something breaks, you discover it from a customer complaint three days later.

SabFlow treats triggers as a first-class observable surface. Every incoming trigger event is captured, validated, logged and replayable. Failed triggers do not vanish — they land in a dead-letter view with the full payload, retry button, and the exception trace. Timezone is always explicit. Webhook signatures are mandatory for the integrations that support them. The trigger is the front door of your automation — we treat it like one.

What it is

Triggers, in depth.

SabFlow triggers fall into five categories: channel events (message received, message read, button clicked on WhatsApp, Instagram, Web Chat, Email), commerce events (Shopify order paid, Stripe payment succeeded, Razorpay refund initiated, catalog item updated), CRM events (contact created, segment entered, tag added, deal stage changed, custom field updated), schedules (one-off datetime, cron expression, recurring relative — "every Tuesday at 9am IST"), and integrations (signed webhook URL, REST API call, third-party native triggers from HubSpot, Pipedrive, Calendly, Google Sheets, etc.).

Every trigger emits a typed payload that downstream nodes can reference via JSONPath. A Shopify order trigger gives you `{{trigger.order.id}}`, `{{trigger.order.line_items}}`, `{{trigger.customer.email}}` — full Shopify schema, validated on entry. A WhatsApp message trigger exposes `{{trigger.message.text}}`, `{{trigger.contact.phone}}`, `{{trigger.message.type}}` (text, image, document, button, list). This typing prevents the classic "I thought that field existed" bug at design time.

Multiple triggers on one flow are supported and common. A "VIP customer onboarding" flow might trigger on (a) a Shopify customer with lifetime spend > ₹50,000, (b) a manual tag added via the CRM, or (c) a webhook from your loyalty program. All three paths converge into the same flow with the same downstream logic — you maintain the journey once, accept input from many sources.

For technical teams, the generic Webhook trigger is the universal escape hatch. We give you a signed URL with HMAC-SHA256 signature verification, a JSON schema you can declare, and a payload validator that rejects malformed input at the door. The schema is enforced at runtime so a breaking change in your upstream system surfaces immediately as failed-validation events, not as a flow running on garbage data.

Capabilities

Everything you get with Triggers.

7 capabilities
01

Channel message triggers

Fire on inbound WhatsApp message, Instagram DM, Web Chat opened, Email received. Filter by message type (text, image, document, button payload, list selection), by keyword, by contact segment, or by the channel-specific metadata like template name or campaign ID.

02

Commerce native triggers

First-class support for Shopify (order paid, abandoned checkout, refund, product update), Stripe (payment succeeded, subscription renewed, invoice failed), Razorpay (payment captured, refund processed), WooCommerce and Magento. Schema-validated, retry-safe, idempotent.

03

CRM event triggers

Contact created, contact updated (per field), segment entered or exited, tag added or removed, deal stage moved, custom field changed. Dynamic segments emit enter/exit events as the segment definition matches new data — no manual polling.

04

Scheduled triggers

One-off (fire at 2024-12-31 17:00 IST), recurring cron (`0 9 * * MON-FRI`), relative recurring ("every 6 hours starting tomorrow"). All schedules honor a configurable timezone, including per-contact timezone for personalised sends.

05

Signed webhook triggers

Each webhook trigger gets a unique URL with HMAC-SHA256 signing. The upstream signs the payload with a shared secret; SabFlow verifies before firing. Declare a JSON schema and malformed requests are rejected with a 400 before they touch the flow.

06

Dead-letter queue and replay

Failed triggers — validation failure, downstream node error, rate limit — land in the DLQ with the full payload, the exception, and the retry button. Replay one event or a batch. Audit log shows who replayed what.

07

Idempotency keys

Every trigger event carries an idempotency key derived from the source. Duplicate Shopify webhooks (which happen) do not double-fire the flow. Custom webhooks can pass an `Idempotency-Key` header that SabFlow honors across a configurable dedup window.

Use cases

Built for the way teams actually work.

E-commerce
Case 01

Order-paid → thank-you template

Trigger on Shopify order.paid. Filter for orders above ₹1,000 to skip low-value sends. Fire a WhatsApp template with order summary and tracking link. Idempotent against duplicate webhooks. Replays available for the rare missed event.

SaaS
Case 02

Cron daily standup pull

Cron trigger at 9am IST weekdays. HTTP Request to GitHub for yesterday's PRs, AI Generate node summarises into a standup post, Send to Slack channel. Replaces a 15-minute manual ritual. Skips weekends and holidays via a custom calendar.

D2C
Case 03

Segment-entered → re-engagement

Dynamic segment "last purchase > 90 days ago and total spend > ₹5,000" fires segment-entered trigger. Sends a personalised WhatsApp template with a curated set of products via AI Generate. Recovers churning customers without manual list-pulling.

Logistics
Case 04

Webhook trigger from custom ERP

Internal ERP fires a signed webhook on shipment-out-for-delivery. JSON schema declared with `tracking_id`, `eta`, `customer_phone`. SabFlow validates, looks up the contact, sends WhatsApp with live tracking. End-to-end latency under two seconds.

SaaS
Case 05

Stage-change → onboarding handoff

Trigger on CRM deal stage moving to "Won". Creates the customer record, assigns onboarding manager via Slack, triggers a 30-day onboarding flow. Single trigger replaces a five-person handoff that used to rely on Slack DMs and prayer.

How it works

From signup to first send in minutes.

Triggers is included on every SabNode workspace. No separate billing, no extra setup — flip it on from your workspace settings.

  1. 01

    Pick the trigger source

    Choose from channels, commerce, CRM, schedule or custom webhook. The selector previews the payload shape so you know what fields the downstream flow can use.

  2. 02

    Configure filters

    Narrow firing conditions — only orders above ₹1,000, only contacts in segment X, only on weekdays. Filters run before the flow starts, saving execution cost.

  3. 03

    Validate the payload schema

    For webhook triggers, paste a sample payload and declare a JSON schema. Future events failing the schema are rejected with a 400 instead of poisoning the flow.

  4. 04

    Test with a fired event

    Hit Send Test from the trigger config. A synthetic event runs through the flow in debug mode. Or replay any historical event from the trigger log.

  5. 05

    Monitor the trigger log

    Every fire, success or fail, lands in the trigger log with payload, latency and downstream result. Filter by status, replay the failures, set up alerts on DLQ depth.

Plays well with

Works with the tools you already ship on.

ShopifyStripeRazorpayHubSpotPipedriveCalendlyGoogle SheetsMeta WhatsApp Cloud API
Frequently asked

Questions about Triggers.

Can't find what you're looking for? Talk to our team.

What happens if Shopify retries a webhook?
SabFlow uses the `X-Shopify-Webhook-Id` header as an idempotency key with a 24-hour dedup window. The first delivery fires the flow; subsequent retries within the window log the duplicate and skip execution. This matches Shopify's own at-least-once delivery semantic without doubling up customer messages — a common source of complaints with naive integrations.
How are timezone-sensitive cron schedules handled?
Every cron trigger has an explicit timezone configured (IANA, e.g. Asia/Kolkata). The scheduler computes fire times in that zone and accounts for DST changes automatically. For per-contact personalisation, the Wait node in the flow can pause until the contact's local 9am, which uses the contact's timezone field. Diwali at 4:30am no longer happens.
Can I have multiple triggers on one flow?
Yes. A flow can declare any number of triggers, of any mix of types. All triggers funnel into the same Trigger node at the top of the canvas with a discriminator on `trigger.source`. Downstream branches can switch on the source if needed, or treat them uniformly. This is the pattern for "any of these three things happens → run the same onboarding".
How do I verify webhook signatures?
Every webhook trigger has a per-trigger secret. The upstream signs the raw body with HMAC-SHA256 using that secret and sends it in the `X-SabNode-Signature` header. SabFlow verifies before parsing JSON; failures return 401 and never reach the flow. For Shopify, Stripe, Razorpay and other native integrations, we handle signature verification with each platform's own scheme automatically.
What is the throughput limit for triggers?
The platform sustains 5,000 trigger events per second per tenant on the standard plan and 50,000 per second on enterprise. Bursts above the limit queue with elastic backoff rather than dropping. If you expect a high-volume burst (e.g. campaign-driven traffic), let us know and we will pre-scale your tenant's ingestion fleet.
Can a flow trigger another flow?
Yes, three ways. (1) The Subflow node inlines another flow with named inputs and outputs — the called flow runs in the parent's context. (2) The Trigger Flow node fires another flow asynchronously and continues. (3) Webhook Out node calls the target flow's webhook URL. Use Subflow for synchronous logic reuse, Trigger Flow for fire-and-forget, Webhook Out for cross-tenant or external systems.
How long are trigger events retained?
90 days of full payload retention on standard plans, 13 months on enterprise. After that, the event metadata (timestamp, status, duration) stays for analytics but the payload is purged. You can extend retention or set up automatic export to your S3 bucket via the export integration if you need longer-term audit.
SabFlow · Automation

Ship triggers into production this week.

No credit card. No sales call required. Spin up a workspace, plug in a number, and your team is live in under an hour.