the problem sounds boring until you see the scale of it.
a large network of organizations, forty-five of them, needed to reach their members via WhatsApp. each org had different groups, different message templates, different schedules. no shared tooling. no coordination layer. just people forwarding messages to other people who forward messages to other people.
six thousand users downstream. the delivery mechanism was entirely human.
why the official api doesn't work here
WhatsApp Business API lets you broadcast to individuals. groups? blocked. that's not an oversight, it's a product decision.
so your options are: build a workaround, or tell the client their use case isn't possible. we built the workaround.
whatsmeow is a Go library that reverse-engineers WhatsApp's wire protocol. it works. it's also borrowed infrastructure that WhatsApp can revoke at any moment. you go in with open eyes.
the actual build
multi-tenancy here meant real isolation. forty-five organizations sharing infrastructure but completely unaware of each other. each one managing their own groups, templates, sending schedules through a self-service dashboard. a shared rate-limiting and delivery layer underneath.
the routing logic is what takes time. org A's admin shouldn't see org B's groups. org A's scheduled broadcast shouldn't delay org B's. getting that separation right, and making the dashboard usable by non-technical admins, is more work than the core sending pipeline by a fair margin.
two hundred groups. six thousand users. no ops overhead once deployed.
then the number got banned
we were in early testing. still figuring out rate limits. sending too fast, too coordinated, too obviously not human.
WhatsApp's detection is watching for exactly this: synchronized bursts, high velocity, no behavioral variation. an account that sends two hundred messages at 9am sharp every day is not a person. their systems know it.
new number. proper throttling. randomized dispatch windows. human-looking patterns. worked around it.
if we rebuilt this today we'd use Baileys over whatsmeow. Node instead of Go, more active community, marginally better fingerprinting behavior. doesn't change the fundamental bet you're making on unofficial infrastructure.
the thing that mattered
before this, a single message touching the full network required dozens of manual forwards, per message, per send. after: one trigger, propagated everywhere, delivery tracked.
small shift. the people doing the forwarding got their time back. that's it, really. sometimes that's enough.