Skip to content
Menu

Own product / WhatsApp + AI

A plumbing service that starts and ends on WhatsApp

The customer sends a message with a photo, the AI classifies the fault, a person approves the price and a verified local tradesperson is found. Nothing to download and no ringing round five companies.

Context
Málaga city · Plumbing · Validation phase
Project type
Own product / WhatsApp + AI
Status
Live

Project sheet

Project

unrato.es

Type
Own product
Stack
n8n · Supabase · OpenAI
Channel
WhatsApp
Status
In validation
Project summary. Not a screenshot of the application.
Fixed-price services
8
Seven repairs and the diagnostic visit
Postcodes covered
21
Málaga city
Automation flows
4
Intake, conversation, classification and review

01 / Problem

Finding a plumber for a dripping tap is harder than it should be: calls nobody answers, quotes that never arrive and prices you only learn at the end. For the self-employed tradesperson, the problem is the reverse: jobs come in with no photo, no address and no idea whether the customer will accept the price.

02 / Solution

How we solved it

Un Rato runs on the official WhatsApp API, n8n and Postgres. The AI has a narrow role: it writes the conversation, extracts the data and classifies the fault from up to three photos. The decisions that matter are not its to make. Status changes are decided by deterministic code, the price comes from a catalogue and a person approves it from Telegram before it reaches the customer.

Flow

  1. 01

    Webhook with verified HMAC signature and deduplication by message ID

  2. 02

    Per-phone lock in Postgres so a text and a photo sent together do not open two requests

  3. 03

    A six-second wait to group messages before replying

  4. 04

    Vision-based classification with JSON output against a strict schema

  5. 05

    A Telegram card with approve, change price, visit or reject

Workstreams

The AI talks, the code decides

The model never sets prices or changes a request's status. It returns a service code and the system looks up the price in the catalogue.

  • Low confidence: a diagnostic visit is proposed
  • Not in the catalogue: handed to a person
  • Defence against instructions injected into messages

A person in the loop

Every price is approved before it is sent, and the operator can take over the conversation at any time and hand it back to the bot afterwards.

  • Idempotent approval: it only counts once
  • The bot pauses when a person is talking

Verified tradespeople by design

Tradesperson onboarding is a state machine with no AI. The profile starts inactive and the database blocks activation until a person has verified the self-employed registration and public liability insurance.

  • Eight onboarding steps via WhatsApp
  • Activation blocked if the insurance has expired

03 / Scope

What it does

  • Handles WhatsApp text, photos, video, audio and location
  • Classifies the fault and proposes a fixed price from the catalogue
  • Sends every price for human review before it is communicated
  • Onboards tradespeople via WhatsApp with manual checks of their self-employed registration and insurance
  • Detects gas emergencies and refers them to 112 instead of quoting

04 / Impact

What it solves

Today, WhatsApp intake, photo classification, human price review and tradesperson onboarding are all live. Automatic assignment to a tradesperson is not yet: the offer and confirmation templates are under review at Meta and, in the meantime, the operator gets an alert to find one. The system already measures what will be needed to decide whether to scale: time to first response, price held and bot accuracy against the operator.

Security and confidentiality

  • The address and name are only requested after the customer accepts the price.
  • The database stores the photo's reference at Meta, not the image.
  • Row-level security enabled on every table, with functions closed to public roles.

05 / Questions

Frequently asked questions

What happens if the AI gets the fault wrong?

The price does not reach the customer until a person approves it. If the model has low confidence, the system proposes a diagnostic visit instead of a price, and if the fault is not in the catalogue, the conversation goes to the operator.

Why Telegram for the operator?

Because the review has to happen in seconds from a phone, with the photo in front of you and four buttons. Building a web dashboard for that would have delayed launch without improving the decision.

Your next project

Want a case like this for your business?

Let's talk about your project