Multi-company WhatsApp Service Platform
One WhatsApp number serving several companies, each with its own answers.
- Role
- Project Owner & Developer
- Period
- Sep 2026 - Present
- Status
- Launched, self-hosted
Overview
A self-hosted WhatsApp Q&A platform where one number serves multiple companies with strict data isolation, running on a single Ubuntu VPS.
Problem
Several companies needed WhatsApp customer service, but running a separate number and SaaS subscription for each one was costly.
The people who know the answers are not developers, so the FAQ content had to be editable without touching code.
Each company must only ever see its own knowledge base and its own conversation logs.
My role
Designed and built the platform: architecture, answer matching, security hardening, deployment, and backups.
Executed a full WhatsApp number change and server migration without data loss.
Wrote the tests and an operations handbook for handover, and designed the next phase.
Approach
Pipeline
Built the webhook pipeline WuzAPI (Go) to FastAPI (Python) to SQLite to Google Sheets, with PostgreSQL for session state, containerized with Docker.
Content in Google Sheets
Non-technical admins manage companies and Q&A in Google Sheets; changes sync every 5 minutes or on demand through a secured WhatsApp admin command.
Answering
A tiered matcher tries exact, then keyword, then fuzzy matching (RapidFuzz), and falls back to a human agent with a suggested FAQ menu.
Conversation feel
Replies go through a single-worker send queue with read receipt, typing indicator, and randomized delay to keep chats natural and reduce ban risk.
Key decisions
Self-hosted on a small VPS
One Ubuntu VPS serves several companies at a fraction of SaaS cost.
Nothing public except SSH
HMAC-SHA256 webhook verification, firewall rules scoped to the Docker network, encrypted session storage, and restricted secret files.
Admin takeover by signature
When a CS agent replies with a signature such as "-Admin", the bot pauses for that chat and resumes afterwards, so humans and the bot never talk over each other.
Logs where the business already works
Every interaction is logged to Google Sheets with WIB timestamp, name, company code, matched answer, and confidence score for reporting and audit.
Outcome
- One WhatsApp number serves multiple companies, each with its own knowledge base and log.
- Bilingual (ID/EN) onboarding personalized by WhatsApp name, one-time login per session, tap-to-select menus.
- 15-minute auto-logout protects users on shared phones.
- Daily backups with 14-day retention; a full number change and server migration completed without data loss.
- 56
- automated tests (pytest)
- ~800
- line operations handbook for handover
- 1 VPS
- running the whole platform
Test counts describe engineering coverage, not business results.
Stack
- Messaging
- WuzAPI (Go)
- Backend
- Python
- FastAPI
- RapidFuzz
- Data
- SQLite
- PostgreSQL
- Google Sheets API
- Operations
- Docker
- Ubuntu VPS
- UFW
Next phase
Planned, not yet built
Shared-inbox dashboard for 12+ CS agents
Designed as a PRD and interactive mockup, to run on the same infrastructure. Not built yet.