Skip links

A WhatsApp Quotation Bot for Odoo

What it does

A customer sends a WhatsApp message asking about products.

The workflow reads it, works out what they want, finds those products in Odoo, creates a quotation, and replies.

What that replaces: a salesperson reading the message, opening Odoo, searching for each product, building the quotation, and typing a reply. Several minutes, every time.

Why this is harder than a normal import

The input is free text written by a person.

Not a form. Not a spreadsheet. Somebody typing on a phone.

“Do you have the 40mm brackets, need about 200, and the mounting kits too”

No rule handles that. The product name is approximate, the quantity is buried in a sentence, and the second item has no quantity at all.

This is exactly where a language model earns its place — extracting structure from text that varies without limit.

FIGURE 1: FROM A MESSAGE TO A QUOTATION

Message arrives

  • Free text, on a phone

AI extracts

  • Products and quantities, as structured data

Odoo searched

  • Match each item to a real product

Quotation drafted

  • And a reply sent back

Step 1 — Extract the request

The message goes to an AI model with instructions: pull out the products mentioned and the quantities.

The output must be structured, not prose. A list of items, each with a name and a quantity — something the next node can work with.

Two things that improve this a great deal:

Give it your product vocabulary. A model that knows you sell brackets, kits and fixings interprets an ambiguous message better than one guessing from nothing.

Ask it to say when it is unsure. A model told to flag ambiguity is far more useful than one that always produces a confident answer.

Step 2 — Match to real products

The extracted text is not a product. “40mm brackets” has to become a specific Odoo product.

Search Odoo for each item.

Three outcomes, and each needs a decision:

One clear match. Use it.

Several possible matches. Do not guess. Either ask the customer which they meant, or send it to a person.

No match. Tell the customer you could not find it, or hand to a salesperson.

This step is where most of the risk sits. A model can produce a plausible product name that does not exist, and quietly matching it to the nearest thing is how a customer receives a quotation for the wrong item.

Fail visibly rather than guessing.

Step 3 — Find or create the customer

The same pattern as every Odoo integration: search first, create only if not found.

Match on phone number — you have it, since they messaged you.

Which means phone numbers must be stored consistently in Odoo. Country code included, no spaces or punctuation. Inconsistent formatting is the most common cause of a customer not being found and a duplicate being created.

Step 4 — Create the quotation

With a matched customer and matched products, the quotation is straightforward — Odoo applies the customer’s price list, payment terms and taxes.

One important decision: what state does it arrive in?

Draft, for a salesperson to review. Safer, and it keeps a person on anything commercial.

Confirmed automatically. Faster, and it commits you to prices a model helped assemble.

Draft is the right default. The workflow removes the assembly work — which is most of the time — and leaves the decision with a person.

FIGURE 2: WHERE THE HUMAN STAYS

The workflow does

  • Reads and understands the message
  • Searches for matching products
  • Finds or creates the customer
  • Assembles the draft quotation

A person does

  • Checks the products are right
  • Confirms the prices
  • Sends it to the customer
  • Handles anything ambiguous

Step 5 — Reply

A confirmation back to the customer on WhatsApp.

Because they messaged you, a service window is open — you can reply freely for a period without needing an approved template.

What a good reply says:

What you understood them to want. This matters — it gives them a chance to correct a misreading before anything goes further.

What happens next, and roughly when.

What it should not do: state prices or commitments the model assembled without a person checking them.

Where it goes wrong

Five things.

Guessing at ambiguous products. The most damaging. A confident wrong match produces a quotation for something the customer did not ask for.

Confirming automatically. A quotation is a commercial document. Keep a person on it.

Inconsistent phone numbers. Customers not matched, duplicates created.

No route to a person. A customer whose request the workflow cannot handle needs a human, quickly.

No logging. When a quotation comes out wrong, you need to see the original message, what the model extracted, and what it matched to.

That last one is what makes this debuggable. Without it, an AI step is a black box.

FIGURE 3: WHAT MAKES THIS SAFE

Fail visibly on ambiguity

  • Never guess at a product. Ask, or hand to a person.

Draft, not confirmed

  • A quotation is commercial. A person sends it.

Consistent phone numbers

  • The match depends on it entirely.

Log input, extraction and match

  • Otherwise you cannot explain a wrong quotation.

What it is worth

The saving is the assembly, not the decision.

Reading the message, searching for products, building the quotation — that is most of the time and all of the tedium.

Checking it and sending it takes a salesperson under a minute.

So the realistic outcome is not “quotations without people”. It is quotations that arrive ready to review, instead of taking ten minutes to build.

For a business handling many enquiries, that is a real change in capacity.

Before building one

Four questions.

Do enough enquiries arrive this way to justify it? A handful a week does not.

Is your product data clean enough to match against? Inconsistent names and missing references make matching unreliable.

Are phone numbers stored consistently? The customer match depends on it.

Who handles what the workflow cannot? There must be a person, and a fast route to them.

The short version

The workflow reads a message, extracts what was asked for, matches it to real Odoo products, and drafts a quotation.

The AI step is justified because the input is free text — no rule handles how people actually write.

Never guess at an ambiguous product. Fail visibly, ask the customer, or hand to a person.

Draft, not confirmed. The saving is the assembly; the decision stays human.

Enquiries arriving faster than quotations go out?

Get in touch. We build WhatsApp-to-Odoo quotation workflows that assemble the draft and leave the commercial decision with your team.

Leave a comment

Drag