Now shipping — WhatsApp calling

Complete WhatsApp calling
and messaging. Self-hosted.

Take inbound calls. Dial outbound. Route with a visual node-based IVR. Save every recording to your own S3 bucket. Automate messaging. All on infrastructure you control.

Inbound + outbound calls Visual IVR builder Recordings → S3 REST API + webhooks AGPL · open source
IVR Flow Call Log Recordings
Live
Trigger Incoming call +1 (555) 0142
IVR Menu Main greeting
1 Sales 2 Support 3 Billing
Agent Sales queue Anna picked up
Queue Support queue 3 agents online
Transfer Billing team 4 agents online

Built for teams that can't afford per-minute fees or third-party data

Multi-tenantOrgs & teams
5 minDocker setup
$0Per-message fees
Any S3AWS · Wasabi · MinIO
AGPLOpen source

Run WhatsApp calls the way you run your stack.

Most self-hosted projects stop at messaging. Whatomate is the one that goes all the way to voice — routing, recording, and storage you own end-to-end.

01 Calling

Inbound & outbound

Receive customer calls on your WhatsApp number and place outbound calls from the dashboard or a single API request.

Jane Smith+1 555 0142
02:14 answered
Outbound+1 555 0197
00:42 completed
TechBuild Inc+44 20 7946
missed
02 Routing

Node-based IVR builder

Drag, drop, and wire nodes on a canvas. Greet, capture input, branch, hit your API mid-call, route to agent teams, schedule by business hours — all visual.

Greet Branch
Transfer Gather Hangup
03 Recording

Recordings → S3

Every recording is encrypted and streamed straight to the S3-compatible bucket you configure. You set retention. You own the keys.

S3
S3

Build call routing visually. Ship it in minutes, not sprints.

Whatomate's IVR editor is built for product teams — not only telecom engineers. Drag nodes onto the canvas, wire them together, and publish a new flow without a deploy.

  • Greeting — uploaded audio or text-to-speech prompts
  • Menu & Gather — DTMF branching plus multi-digit input (account numbers, PINs)
  • HTTP Callback — call your backend mid-flow with caller context and route on the response
  • Transfer to agent teams — route to a team, handoff with full conversation context
  • Timing — business-hours routing by IANA timezone, with after-hours fallback
  • Goto Flow — reusable sub-flows you can wire into any parent
  • Hangup — end the call with an optional goodbye prompt
Support Flow Sales Flow
Live
Greeting Welcome message
Menu Press 1–3
Transfer
Gather
Hangup
Recordings Retention
s3://calls-prod
JS
Jane Smith Today · 14:32 · inbound
04:56 S3
TB
TechBuild Inc Today · 11:08 · outbound
02:08 S3
DM
Diana Morales Yesterday · 09:41 · inbound
00:42 S3
AK
Arjun Kapoor Yesterday · 16:22 · inbound
07:13 S3

Your calls. Your bucket. Your rules.

Every recording is streamed directly to the S3-compatible storage you control. Nothing passes through our servers, because there are no "our" servers — it's your infrastructure.

  • Any S3-compatible target — AWS S3, Wasabi, Backblaze B2, MinIO, Cloudflare R2, DigitalOcean Spaces
  • Org-wide recording toggle — enable once in config, every call lands in your bucket
  • Lifecycle-ready — use your bucket's retention and archival rules directly
  • Pre-signed URL playback — hear a call in the UI without exposing the bucket
  • Agent-caller audio — both sides captured end-to-end for QA and compliance
  • Data residency — recordings never leave the region of the bucket you choose

And the engine you'll actually use every day.

Calling is the differentiator. Messaging is the daily driver — and it's built to the same standard. Conversations, templates, and campaigns, all first-class.

04 Conversations

Chatbot & handoff

Keyword triggers, multi-step flows, and AI fallback with OpenAI, Anthropic, or Google. Bot hands off to a human when stuck.

Hi, where's order #4521?
Shipped today ✓
Thanks!
Bot → Anna
05 Templates

Meta-synced templates

Create, sync from Meta, and send with {{variables}}. Full component support — headers, buttons, media, CTAs.

order_confirmation approved
Order {{1}} confirmed!
Arrives {{2}}. Track: {{3}}
06 Campaigns

Bulk sends, live analytics

Send to thousands in one click. Track delivery, read, and reply rates in real time. Segment by tags or custom fields.

summer_launch 2,847 / 3,500
retention_may done · 94%

A shared inbox your team can actually live in.

Every conversation — chat or call — lands in one unified inbox. Agents pick from a shared pool, templates drop in with one click, and the handoff from chatbot to human is seamless.

  • Agent teams — round-robin, load-balanced, or manual pick from the team queue
  • Canned responses — categorized quick replies with variable substitution
  • Unified history — chats and calls on one timeline per contact
  • Rich media — images, documents, audio, and video
  • Contact profiles — tags, custom metadata, and account filtering
  • Webhooks — react to incoming messages and Meta delivery status in real time
Conversations Templates Campaigns
JS
Jane Smith typing…
Hi! Can you check order #4521? 10:32
Your order #4521 has shipped. Tracking: TRK-9281 10:33 ✓✓
Thanks! 🎉 10:34
Template · order_confirmation
Order confirmed! Arrives Apr 8. Track at trk.io/9281 10:35 ✓✓
Chatbot handed off to Anna
summer_launch sending
2,847 / 3,500 sent 94% delivered 67% read

Batteries included. One command to deploy.

Docker Compose ships Whatomate with Postgres and Redis — everything it needs to run. Paste in your Meta credentials — access token, phone number ID, business account ID — point it at an S3 bucket, and you're live.

Your app
Any language
REST · Webhooks
Whatomate
Go + Vue.js
Calls IVR Chatbot Templates
Cloud API
S3 API
WhatsApp
Meta Cloud API
Your S3
Recordings & media

Blazing fast

Written in Go. Handles thousands of concurrent calls and messages with single-digit MB of RAM.

Self-hosted & private

Your conversations, your recordings, your data. Full control, zero third-party middlemen.

Batteries included

The full stack ships in one Compose file — Whatomate, Postgres, and Redis. docker compose up -d and you're running.

Everything the UI does, you can do over REST.

Send messages, manage contacts, trigger flows, fetch recordings, wire up webhooks — from any backend in any language.

POST /api/contacts/{id}/messages webhook.json
curl -X POST "http://your-server:8080/api/contacts/{contact_id}/messages" \
  -H "X-API-Key: whm_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "text",
    "text": "Hello! How can I help you today?"
  }'
REST-first

Call the API from Node, Python, PHP, Ruby, Go, Java — no SDK required.

Webhooks for incoming events

Meta-delivered messages and status updates forwarded to your endpoint in real time.

Contacts, templates, flows, campaigns

Full REST surface: users, accounts, roles, chatbot, custom actions, analytics.

Deploy in under 5 minutes.

Four commands. Docker Compose. Then you're running calls, IVR, and messaging on your own infrastructure.

bash · whatomate-setup
# Clone the repo
$ git clone https://github.com/shridarpatil/whatomate.git && cd whatomate
# Copy config + .env
$ cp config.example.toml docker/config.toml && cp docker/.env.example docker/.env
# Start Whatomate + Postgres + Redis
$ make docker-up
whatomate · postgres · redis started
dashboard at http://localhost:8080 (admin@admin.com / admin)

On Frappe or ERPNext?

Native WhatsApp integration suite for the Frappe ecosystem — 500+ active sites, DocType event triggers, AI-powered chatbot. Calling lands in the Frappe suite next.

Explore Frappe apps
Frappe WhatsApp
WhatsApp Chat
WhatsApp Chatbot