Demo walkthrough
Deutsche Version

ODI AI Suite for Odoo – Demo

The screenshots show the demo database after the AI has worked through the open cases once. Every AI result waits for a person: drafts are never sent and field changes wait in the review queue unless an administrator allows an automation to write directly.

Demo company
Holzhaus Nord GmbH, Hamburg (fictional flooring and furniture dealer with its own workshop)
Odoo version
19.0 Enterprise, English user interface (the suite also runs on 17.0 and 18.0)
AI model
Claude Sonnet via the Anthropic API; local models (Ollama) work the same way
Data
all companies, people, addresses, IBANs and numbers are made up

Demo users (password demo): lena customer service, max sales, jana purchasing and accounting, tom workshop, admin ODI manager.

Ask ODI – the AI chat inside Odoo

A chat panel in Odoo's top bar. The AI answers with the user's own access rights, looks up live data with tools, and links every record it mentions. A Stop button ends a long answer; each user keeps a history of their conversations.

Suggested questions for the open screen.
Suggested questions for the open screen.

On a ticket, Ask ODI knows which record is open and suggests questions about it: summarise the ticket, how similar tickets were solved, the delivery status of the customer's orders. Each screen (tickets, opportunities, purchase orders, vendor bills, production orders) has its own suggestions, and administrators can add their own.

"Has the supplier confirmed this order?" – asked on purchase order P00001.
"Has the supplier confirmed this order?" – asked on purchase order P00001.

The answer refers to the open order: confirmed by the supplier with confirmation AB-2026-4471, no differences, the lines and the delivery date. Used 2 tool call(s) expands the steps the AI took – which skill it loaded and which data it read – so every answer can be checked.

Jana (accounting): "Which vendor bills should I check before the next payment run, and why?"
Jana (accounting): "Which vendor bills should I check before the next payment run, and why?"

The answer lists the bills the vendor bill checks flagged – a possible duplicate, a changed bank account and a price 30 % above the usual – with links, why each was flagged and what to check. It ends by saying that the checks only point out what needs a closer look. Cost of the answer: $0.026.

Max (sales): "Which customers had the highest revenue in the last 90 days?"
Max (sales): "Which customers had the highest revenue in the last 90 days?"

A ranking from posted customer invoices, as a table, with a note on what is included and an offer to use confirmed sales orders instead.

Knowledge search (RAG)

Attachments (PDF and text files), e-mails, chatter notes and text fields are split into pieces and indexed in the customer's own database: by words (PostgreSQL full-text, with German, English and other word forms) and by meaning (vectors in pgvector). Users only find text from records they may open; every answer names its source.

Lena (support): "What applies to a damaged delivery?"
Lena (support): "What applies to a damaged delivery?"

The answer comes from the company's knowledge article on complaints (linked), and the AI points to similar solved tickets and to the open ticket of the Hoffmann family.

"How much parquet adhesive do I need for 60 m², and when can the floor be walked on?"
"How much parquet adhesive do I need for 60 m², and when can the floor be walked on?"

Answered from the technical data sheet, a PDF attached to the product: 54–66 kg for 60 m², so four 15 kg buckets, or five with a margin; walkable after 24 hours, full load after 3 days. The AI also notes that an earlier answer of the team in a ticket used the same rule.

ODI → Configuration → Knowledge Sources.
ODI → Configuration → Knowledge Sources.

What is indexed per area – attachments, e-mails and notes, text fields – and how many text pieces each has. Vectors are created with any embedding model; here the local model bge-m3, so no text leaves the server.

Supplier order confirmations

Confirmations that suppliers e-mail on a purchase order are read automatically and matched line by line, also with the supplier's own article numbers.

Purchase order P00002 with the supplier's confirmation in the chatter.
Purchase order P00002 with the supplier's confirmation in the chatter.

The order is marked Differences. The chatter note lists them: adhesive 15 → 12 pieces and price 58.00 → 61.40, and the oil arrives three days later. The PDF stays attached to the supplier's e-mail.

The corrections, ready to apply.
The corrections, ready to apply.

Current and proposed values side by side: the supplier's confirmation number, the new quantity, price and delivery date. Apply writes them to the order in one click.

Vendor document sorting

Every PDF a vendor sends on an order is read once and sorted: order confirmation, invoice, credit note, delivery note, quote, or something else.

ODI → Documents: all vendor PDFs and what ODI recognised them as.
ODI → Documents: all vendor PDFs and what ODI recognised them as.

Two order confirmations (one matching, one with differences), a quote, a delivery note, an invoice and a credit note – each linked to its purchase order and, for the invoice and the credit note, to the vendor bill. The supplier's general terms of sale were recognised as Other and set aside.

An invoice recognised and turned into a draft bill.
An invoice recognised and turned into a draft bill.

The invoice lines are matched to the order lines (OK); the freight flat rate is not on the order and is flagged in red. The document links the draft bill.

The draft vendor bill, with the PDF next to it.
The draft vendor bill, with the PDF next to it.

Built from the purchase order lines (taxes, accounts, link to the order), with the vendor's invoice number, date, prices and the freight line. The total, 3,228.47 €, equals the PDF. Nothing is posted: the accountant checks and confirms.

A credit note for two returned chairs.
A credit note for two returned chairs.

Recognised as a vendor credit note and turned into a draft vendor refund of 247.52 €, linked to the same purchase order.

A partial delivery note.
A partial delivery note.

The supplier delivered 180 of 300 m² vinyl. ODI compares the delivery note with what is still open on the order.

The delivery note on the receipt.
The delivery note on the receipt.

The PDF and the note "delivered 180, 300 still open" are attached to the open receipt, where the warehouse books the goods.

Supplier quotes

Request for quotation P00005 after the supplier's quote arrived.
Request for quotation P00005 after the supplier's quote arrived.

The quote is read and matched to the request: prices for the bench and the table, delivery dates, valid until Nov 14. The new prices wait in the review queue.

After applying: the quoted price as a vendor price on the product.
After applying: the quoted price as a vendor price on the product.

The bench now has the supplier's quoted price, 249.00 € from 6 pieces, next to the old price – with the quote's validity as end date, so future orders use it.

Vendor bill checks

Every vendor bill is checked before payment – whether entered by hand, read by Odoo's bill reading or created by the document sorting. The checks are rules on the company's own data: fast, free to run and the same every time. They run every hour and with the Check Bill button.

Accounting → Vendors → Bills to Check.
Accounting → Vendors → Bills to Check.

Critical bills (duplicate invoice number, changed bank account) and warnings (unusual price, differences to the order), each with its ODI status.

A bill that asks for payment to a new bank account.
A bill that asks for payment to a new bank account.

The red banner and the ODI Check tab: the bank account …4300 differs from the account on the vendor's earlier bills (…2051) and was only just added – the classic invoice fraud. IBANs are shown masked.

A subcontractor bill compared with the order and what was received.
A subcontractor bill compared with the order and what was received.

The installer billed 85 m² at 21.50 €, the order was for 60 m² at 18.00 €, and 60 m² were confirmed as done: two warnings, price differs from the order (+19.4 %) and more billed than received.

Marking a flagged bill as checked.
Marking a flagged bill as checked.

A person must give a reason, which is kept with the bill and posted in the chatter. Critical findings can only be accepted by users of the group May accept critical bill findings; optionally such bills cannot be posted until then.

Helpdesk assistant

A complaint about damaged planks.
A complaint about damaged planks.

Draft Reply and Summarise on every ticket. The summary in the chatter states the problem, what was done or promised so far, the unpaid invoice, the delivery with its DHL number, what is open and the next step. The AI Suggestions button opens the drafted reply.

The drafted reply.
The drafted reply.

Written in the customer's language from the ticket, the order data and the company's complaint rules: it asks for a photo of the outer packaging and promises no replacement or date before the warehouse has checked. Edit and Send opens it in the e-mail editor.

Triage of a new urgent ticket.
Triage of a new urgent ticket.

Proposed tag Delivery, the team and priority High, with the reason ("time-critical delivery shortfall, fitter on site"). The triage runs automatically on new tickets and waits for review by default.

Sales assistant

An opportunity where the customer has been waiting for an answer.
An opportunity where the customer has been waiting for an answer.

The daily follow-up found it (no next step, no contact for days) and planned a to-do for the salesperson: "send the oiled-finish option and delivery time to Vogel", with the reason.

The follow-up e-mail.
The follow-up e-mail.

It picks up what the customer asked (oiled instead of lacquered, delivery time), apologises for the late answer and asks one concrete question: by when the floor must be installed. The salesperson sends it.

*Summarise* on an opportunity.
Summarise on an opportunity.

What the customer wants, what was offered, the price deadline, the silence since the offer, what is open and the next step – as an internal note for the salesperson.

A new website lead, qualified.
A new website lead, qualified.

Priority High and an expected closing date before the customer's move-in date, each with the reasoning. Expected revenue was left empty: there was no comparable parquet deal to estimate from, and ODI says so instead of guessing.

A deal marked lost without a reason.
A deal marked lost without a reason.

ODI read the conversation ("we have decided on a dealer in our town who also does the installation") and proposes the lost reason Buys locally, so loss reports get real data.

Manufacturing assistant

The company's workshop builds tables and benches to order. Every hour ODI checks each open production order by rules – no AI, no cost: components that are missing or arrive after the planned start, a start date that has passed, overloaded work centers and the deadline. It names the concrete cause and computes when the order can realistically be ready.

Manufacturing → At Risk of Delay: the production orders at risk.
Manufacturing → At Risk of Delay: the production orders at risk.

Four of five open orders need attention: two will miss their deadline (red), two are at risk (yellow). The column Next Activity shows the next steps ODI planned for the workshop manager.

Twelve restaurant tables for Hotel Seeblick.
Twelve restaurant tables for Hotel Seeblick.

The red banner gives the cause: 8 of the 12 tabletops arrive only on 10/27 with P00008 from Eichenwerk Bayern, after the planned start – so the order will be ready on 10/28, after the deadline. Delay Warning let the AI write the note on the right: the cause, the date promised to the customer (10/25) and what could help; it also planned "chase the vendor about P00008" for Tom.

The drafted e-mail to the hotel.
The drafted e-mail to the hotel.

The hotel was promised the 25th, so ODI drafted a short apology with the realistic date from the check – not an earlier one, and without internal details such as the vendor. It waits in the review queue; Edit and Send opens it in the e-mail editor.

Six benches for Café Lindenblatt.
Six benches for Café Lindenblatt.

The bench frames are not in stock and nothing is ordered: no ready date can be given. ODI's note says so and planned "order the steel bench frames" for the workshop manager.

Conference tables for the showroom: the spray booth is overloaded.
Conference tables for the showroom: the spray booth is overloaded.

All components are there, but three coats of lacquer on 8 tables take 44 hours in the spray booth, and its working calendar has 16 hours until the planned end.

Tom: "Which production orders can't start this week, and why?"
Tom: "Which production orders can't start this week, and why?"

Ask ODI lists the two blocked orders with the missing component, the purchase order and its date, the expected ready date – and that the other open orders are not blocked by components.

"What is blocking this order?" – asked on the hotel order.
"What is blocking this order?" – asked on the hotel order.

Components, the open purchase order, which work orders are ready or blocked, the expected ready date against the deadline and the date promised to the customer, and the options.

Review queue

ODI → Review Queue: everything the AI proposed.
ODI → Review Queue: everything the AI proposed.

Each entry shows the automation that proposed it, whether it is an e-mail draft, the document and who it is for. Apply or Reject right in the list.

AI automations

ODI → Automations: one overview of all AI automations.
ODI → Automations: one overview of all AI automations.

What triggers each one (on create, on archive, daily, buttons only), an on/off switch, runs, errors, cost and open items for the last 30 days.

One automation: the daily follow-up.
One automation: the daily follow-up.

Plain-language instructions, what ODI may do (fields, notes, activities, e-mail drafts), the skills it uses, its own AI model if wanted, and the user it runs as.

The *Triggers* tab.
The Triggers tab.

The automation rule that runs the triage when a ticket is created. Add Rule adds another rule (on change, on incoming message …), Add Schedule a schedule.

The *Scheduled Runs* tab.
The Scheduled Runs tab.

Which records a schedule picks – here the module's selection of quiet opportunities – and how many per run. Each record runs as its responsible person, with that person's rights.

Outside services

"Please check the VAT number of our supplier VinylPro Europe B.V."
"Please check the VAT number of our supplier VinylPro Europe B.V."

The AI called the EU Commission's VIES service and reports that the (made-up) number is invalid, with what to do next – and that it changed nothing. Administrators allow such services one by one; keys stay on the server.

ODI → Configuration → Tools.
ODI → Configuration → Tools.

All tools the AI may use, and where: in Ask ODI, through MCP and in automations. Built-in tools read and search records; feature modules add their own (support context, similar tickets, bill checks …); HTTPS tools connect outside services such as the VAT check.

Claude connection (MCP)

ODI → MCP → Connected Apps.
ODI → MCP → Connected Apps.

Users can connect Claude Desktop, claude.ai or the Claude app to Odoo. They sign in with their Odoo account ("Sign in with Odoo"); the connected apps appear here and can be revoked, and every request is logged. No app is connected in the demo.

Control and costs

Settings → ODI.
Settings → ODI.

The default AI model, privacy (masking e-mail addresses, IBANs and phone numbers before sending; how much is logged; how long), limits for the agent (steps and cost per conversation), search by meaning with its similarity threshold, the MCP address for Claude, and the settings of each add-on.

ODI → Requests: every AI call.
ODI → Requests: every AI call.

User, model, tokens, cost and duration of each call. One helpdesk reply costs about one to two cents with Claude Sonnet; the vector search runs locally at no cost.

One run of an automation, step by step.
One run of an automation, step by step.

The instructions, each tool the AI called with the data it got back, and its final note – what it decided and why. Every run can be read afterwards; this one cost $0.015.

ODI → Jobs: background jobs.
ODI → Jobs: background jobs.

Vendor PDFs and automations run in the background with retries, so nobody waits.

AI providers.
AI providers.

Anthropic, OpenAI, Google Gemini, Mistral and local models (Ollama and other OpenAI-compatible servers). Each task and each automation can use its own model.

A monthly budget that warns or stops.
A monthly budget that warns or stops.

$50 a month for all AI tasks of the company, $0.54 spent so far, set to warn. A budget can also be set per task and set to stop the AI when it is reached.

Which data the AI may use.
Which data the AI may use.

The administrator chooses per area whether the AI may read, create, change or delete, and which fields it sees by default. Reading always happens with the user's own Odoo rights.

Notes

  • The demo ran on Claude Sonnet: all AI work in it – reading 7 vendor PDFs, 17 automation runs and 8 questions – took about 4 minutes and cost $0.54 in total. A local model (Qwen 3 30B on an 8 GB GPU) did 18 of these tasks in about 35 minutes, at no cost per call.