Skip to content
All projects

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

  1. Pipeline

    Built the webhook pipeline WuzAPI (Go) to FastAPI (Python) to SQLite to Google Sheets, with PostgreSQL for session state, containerized with Docker.

  2. 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.

  3. Answering

    A tiered matcher tries exact, then keyword, then fuzzy matching (RapidFuzz), and falls back to a human agent with a suggested FAQ menu.

  4. 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.

Q&A content managed in Google Sheets by non-technical admins.
Multi-company message volume, bot resolution rate, and response times.

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)
WhatsApp
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.

Next case studySHRM