Dubai-based forex broker · 2026
Multi-channel lifecycle engine
Four automated customer journeys across WhatsApp and email, running unattended every two hours with per-message delivery tracking.
Simplified for publication. Identifiers, endpoints and customer data removed.
The problem
Customer follow-up was manual and inconsistent. An earlier scheduled version fired unpredictably and had no way to tell a delivery failure from a send that never happened — so nobody could say whether a campaign had actually reached anyone.
What I built
- 01
Rebuilt the scheduler around a fixed two-hour window with explicit day-offset routing, replacing the cadence logic that had been misfiring
- 02
Joined every send against a suppression list and an already-sent ledger before dispatch, so a retry can never double-message a customer
- 03
Throttled dispatch to one message at a time with a fixed delay, keeping the send rate under the provider's frequency ceiling
- 04
Logged failures as a first-class path — every rejection stored with its provider error code, not collapsed into a generic error
Outcome
99.6% email delivery across the measured window (1,123 of 1,127)
Throughput grew roughly 18× in four weeks while the failure rate fell from 28% to 2%
Every failure is now attributable to a specific cause — provider frequency capping accounts for the majority, which is a tuning problem rather than a defect
21 campaigns run across four lifecycle journeys with no manual intervention
Stack
- n8n
- MySQL
- WhatsApp Cloud API
- SendGrid
- GCP
- Docker
Want something like this built?
Most of this is portable. The dedup, throttling and failure-handling patterns apply to any channel you send on.
Book a call