One click — a three-step welcome chain. Another — a reminder an hour before an event. A third — a recurring newsletter. All via REST API or dashboard.
· Once / Drip / Recurring — 3 types, worker every 30 s
Without us
Every 30 seconds poll DB, take jobs with FOR UPDATE SKIP LOCKED, retry on failure — non-trivial infra.
Subscription trigger, steps with delays, conditional transitions, webhook on chain completion. Building this — weeks of work.
And all over email. But you want messenger, where open rate is 95% instead of 20%.
What's inside
POST /v1/scheduled with subscriber_id and scheduled_at in ISO 8601. Reminders, planned promos, event notifications.
Triggers: subscription, segment, permission. Up to 50 steps, each with delay_minutes. Webhook drip.step_sent and drip.completed.
Every N hours (interval_hours ≥ 1). Broadcast-style with channel/segment/permission filters. Media and button support.
Like in broadcast: {{first_name}}, {{username}}, {{lang}}. Rendered individually for each subscriber.
Two workers won't process the same job. Scale workers horizontally without extra coordination.
On chain completion an event fires — you can trigger your next flow step (e.g., unlock content).
How it works
POST /v1/scheduled / /v1/drip-chains / /v1/recurring. Set text (or template), filters, trigger or time.
Picks jobs with next_run_at <= now, locks FOR UPDATE SKIP LOCKED, sends via /v1/send. On failure — retry on next tick.
scheduled.sent / scheduled.failed for once, drip.step_sent / drip.completed for chains, recurring.sent for recurring.
FAQ
The worker ticks every 30 seconds. A scheduled_at=12:00:00 job fires between 12:00:00-12:00:30. More precision isn't needed — Telegram and Max themselves add ~200-500 ms of delay.
Up to 50 steps. Each — a separate template or text with delay_minutes from the trigger. Typical scenarios: welcome (3 steps), onboarding (7-10 steps), course (20-30 steps).
Yes. A trigger is one of: subscription (new subscriber), segment (tag applied), permission (permission granted). On fire, drip_queue records are created with calculated run times for each step.
Following steps are skipped. You get a drip.completed webhook with a note of early exit so you can update state on your side (e.g., tag "unsubscribed at step 3").
Same as a regular message — 1 credit for Telegram/Max, 2 for email. A 5-step drip chain = 5 credits per subscriber. Recurring is billed like broadcast — 1 credit per successful delivery.
Yes. DELETE /v1/drip-chains/:id — stops the chain for all subscribers (active steps finish, new ones don't start). For a specific subscriber — remove the trigger (revoke tag/permission or delete subscription).
No credit card. 100 free credits per month — enough to try every feature.
Solutions & use cases
Common scenarios where Zapnoty replaces a stack of 3-4 separate services.
10× cheaper than SMS, higher reach than email
OTP, order status, abandoned cart, promos
Forms with instant Telegram notification — no forgotten inboxes
Drip lessons, reminders, Q&A and bot login
Support in Telegram/Max, no heavy chat widget