Andre
An agent can sell on its own only when the system stops it from promising what does not exist.
- With
- in production, WhatsApp Cloud API, LangGraph, pgvector, PostgreSQL with RLS, 77 migrations, close to a thousand tests
A WhatsApp customer service and sales platform run by AI agents, in production at andre.giron.ai, on Meta’s official WhatsApp API.
It is the continuation of my work on RAG agents. What started as a retrieval chatbot for a photography studio is now a multi-tenant system where one WhatsApp number, a sales team and an AI agent work from the same inbox. The El Empleado Juan sales team runs its pipeline on Andre.
What it does
- Answers at any hour with the business’s own knowledge —RAG over pgvector— and in the customer’s variety of Spanish.
- Qualifies every conversation as it happens: Radar classifies it, extracts what that business needs to close —headcount, site, product— and writes it to the contact record without delaying the reply.
- Books into the team’s real calendar, person by person, mirrored to Google Calendar.
- Follows up: a pipeline where every deal has an owner, assigned calls and tasks, WhatsApp and email cadences, PDF quotes and campaigns to segments.
- Captures without copy and paste: Facebook and Instagram lead forms and click-to-WhatsApp ads land in the pipeline on their own, with their source.
The agent proposes; the system disposes
The usual mistake with a selling agent is to hand it permissions and trust the prompt. Here the model never writes directly: it proposes, and whatever it proposes goes through the same gates as a request from a person.
The guarantee against double booking, for instance, does not live in the prompt or in application code. It lives in the database, where neither the model nor a race between two requests can get around it:
-- Two people on the team may have a booking at the same time; the same
-- person may not. Eight simultaneous bookings for the same slot: exactly
-- one wins, and the other seven get an error, not a duplicate booking.
ALTER TABLE appointments ADD CONSTRAINT no_overlap EXCLUDE USING gist (
tenant_id WITH =,
staff_id WITH =,
tstzrange(starts_at, ends_at) WITH &&
) WHERE (status IN ('scheduled','confirmed'));
The same principle holds up the owner’s copilot. The business configures Andre
by talking to it —“create a segment with the leads over 25 employees and draft
them a campaign”—: the AI builds a plan, the owner sees it before anything
happens, and the API executes it under the owner’s session, with their
permissions and nothing more. Isolation between businesses comes from
PostgreSQL Row-Level Security, not from a WHERE someone might forget.
How far it goes today
- Visual flows. The business draws the agent’s script in a drag-and-drop editor, or describes it in one sentence and the AI draws it. LangGraph runs it with a Postgres checkpoint: a conversation can pause on a question and resume days later where it left off.
- Several named agents, each with its own persona, script, knowledge and autonomy level —off, shadow, suggest or automatic—, assigned per channel.
- Six services —web, API, worker, realtime, AI and migrations— on PostgreSQL, pgvector and Redis, with outbox events so nothing is lost between the database and the queue.
- 77 versioned schema migrations and close to a thousand automated tests across TypeScript and Python.
What no tutorial covers
- An AI failure must not look like an answer. If the embeddings service goes down, the agent keeps replying —without the business’s knowledge, vague and perfectly confident—. It is the failure mode I already knew from RAG agents, now with customers in front of it, which is why it is monitored as an outage and not as a quality nuance.
- WhatsApp charges for spam with your number. One live cadence per contact, quiet hours per business, and an opt-out honoured in the very send where it is requested.
- A conversation ends on the script it started with. Activating a new flow does not change the script for someone mid-conversation: each conversation is pinned to a copy of the flow until it ends.
Write to me
If you are thinking about building something with AI and want to talk it through with someone who has put it into production, write to me. I answer myself.
hola@giron.ai