WhatsApp support bot

A bot that handles a water purifier company's order, return and installation questions, and the help desk the team works from behind it. Live in one week.

Client
Water purifier company
My role
Flow design, development, server setup
Timeline
1 week
Stack
Python, FastAPI, WhatsApp Cloud API, Caddy, OpenVPN
Support desk, Requests tab: request cards by category (customer details blurred)
The help desk: requests from WhatsApp, grouped by category. Customer details are blurred.

Problem

The same questions arrived on WhatsApp every day, and each one was answered by hand.

Customers who did not know their filter type sent photos of the unit, mentioned the store they ordered from in a separate message and asked for installation diagrams. Information was scattered across chats, and messages sent after hours waited.

Solution

The bot sorts each question into three main branches and collects the information each branch needs, step by step. Customers can tap a button or type the number, and typing "menu" takes them back at any point.

WhatsApp chat: the bot greets the customer and shows the main menu with three options
What the customer sees: the main menu with buttons.

Online orders

Customers who do not know their filter type are asked for a photo and the filter count; two photos for tanks.

After-sales

Order number, store and details are collected for wrong or missing items; shipping tracking info goes out automatically.

Installation

Open or closed case, 5, 6 or 7 filters, tank, faucet: the right diagram and video are sent instantly.

A new flow is data, not code

Texts, menus and forms are kept apart from the logic. Asking customers for something new takes a single form definition, and the bot reminds them of a missing photo or text on its own.

# content/forms.py
Form(ids.FORM_FILTER_TYPE, CATEGORY_ORDER,
     "Filtre tipini bilmiyor", (
    Step(texts.ASK_FILTER, photos=1, min_text=1,
         photo_hint=texts.ASK_FILTER_PHOTO,
         text_hint=texts.ASK_FILTER_COUNT),
)),

A help desk for the team

Completed forms land in the panel’s Requests tab together with their photos, split into pending and done. When a customer types /canli during working hours (weekdays 09–18, Saturdays 10–14) they are connected to an online agent. After hours the bot records the request and the team replies in the morning. Live support can be switched to automatic, open or closed with one click.

Infrastructure and security

The bot runs as a systemd service on a dedicated Linux server and restarts itself if it crashes. Caddy provides HTTPS; logs rotate within logrotate and journald limits. The team reaches the panel over OpenVPN: the agent’s identity comes from their VPN certificate, and adding or removing a teammate is one command. The whole setup is a re-runnable script.

Team and VPN access page: add a teammate, download their .ovpn file, set roles
Team access: each agent gets their own VPN profile and role.

Result

1 weekfrom the first call to going live
9installation guides, sent instantly with a diagram and video
6request forms; every request lands in the panel with its photos

Repetitive questions go to the bot, and the ones that really need a person go to an agent. The team works from complete requests instead of scattered chats.

Need a bot like this?

Let's talk