
AI Concierge Across a Regional Hotel Group — 370 Leads, 92-96.8% Self-Service, Second Property Live in Half the Time
An AI concierge live across Facebook Messenger, LINE, and the brand website for a regional hotel group — 370 cumulative booking leads with no down week, 92-96.8% of conversations handled without a human, and a second property live in 7 days against the first one's 14.
All Case Studies
Auto Financial OpsAutomated Expense Entry into PEAK — 12 of 12 Bill Types Read Correctly, 45 of 48 Real Documents Passed
AI ChatbotOne Owner, 50 Chats a Day — a LINE AI Bot That Took 90% of Them Across 3,260 SKUs
Auto Financial OpsSix Legal Entities, One Message, Every Morning at 07:00 — Multi-Property Hospitality Group
Auto Financial Ops873 Students Off a 900-Parent Group Chat — and 293 Families Found Sitting Under a Silent Do-Not-Chase Flag
Auto Financial OpsA Clinic Group Found Its Own Revenue Report Overstated by 135% — 21.4 Million Against a Real 9.1 Million
AI ChatbotLINE AI File Memory — 30-Second Searches Cut to Under One Second, Delivered 23 Days Early

A 245-Item Catalogue Bot That Would Rather Say Nothing Than Guess a Price — a 156,000 Baht Error Caught Before Go-Live
Full Case Study
The Client
A distributor and installer of WPC and ASA decorative building materials — composite decking, ceilings, wall panels and battens — 245 products across 7 series and 4 categories. Customers range from homeowners to contractors to project buyers.
Most enquiries arrive on LINE, some on Facebook, and almost all of them are questions about information, not orders:
"Mostly they ask for specs, ask for information — how much is this one, what can this model be used with, how many colours does it come in."
A salesperson then follows up personally.
The Challenge: The Answer Depends on Who Is Answering
"Right now it is whichever admin it is — they save the information and send, send, send... and it does not come out the way we want it sent, because it depends on which admin answers."
— The business owner
The same question, a different answer each time. 245 products, each with a price per sheet and a price per square metre — ceilings and battens are priced per length. Staff had to open the price file every single time somebody asked, each one answered slightly differently, and each one collected a different set of customer details.
Out-of-hours enquiries went unanswered. People researching a renovation do it in the evening and at weekends.
And the problem nobody knew was there: model codes that are prefixes of other model codes. Of the 245 rows, roughly 90 carry a short model name that is the literal beginning of a different, differently priced model. This is not one awkward case — it is a whole family of them:
| Model | Price per sheet | Model starting with the same characters | Price per sheet |
|---|---|---|---|
| SR | 1,150 | SR 3D | 1,090 |
| SR + Kclip | 3,263 | ||
| MS | 370 | MS 3D | 450 |
| W08 | 1,450 | GW08 / DGW08 | 1,550 / 1,850 |
| W14 | 700 | GW14 / DGW14 | 800 / 960 |
| F | 850 | FN / FL03 | 650 / 450 |
If a system matches names left to right, a customer asking the price of SR 3D gets the price of SR.
On a real 1,000 square metre job, that difference is 156,000 baht.
What a wrong price actually costs. In building materials, quoting the wrong number is not an embarrassment. If the customer puts that figure into a bill of quantities, or quotes it onward to a project owner, and the real price turns out higher, they either lose the job or absorb the gap themselves. The cost of one wrong answer is several times the cost of the whole system.
Why This Project — It Started by Recommending They Buy Less
The client came with two businesses to automate — this one, and a small salon. The first quotation covered both.
On a phone call, the owner described the salon: "It has 3 chairs, and in a day there are no more than 10 chats, and there is a manager already."
"If I answer honestly — if it is that small, if fewer than 10 people message a day and you already have an admin answering, I do not recommend the investment."
The salon bot was cut from the scope. One business remained, and the price came down with it.
The client tested the sample system themselves, before paying. A working sample was built for them to try first. They went in and used it without arranging a time:
"I just tried it a moment ago. I do not think there is anything wrong. Could the price come down a bit?"
"But it answers slowly too — the bot, it delays."
The slowness was fixed the same morning, before any money changed hands.
A lesson that permanently changed how quotations are written. The first quotation used a price range. The client came back with "So what is the price? I do not understand the detail." Since then every quotation carries one fixed price. If the scope is not yet clear enough to price in a single number, the fix is to sharpen the scope — not to hand the customer a range and let them guess.
The Solution: A Bot That Would Rather Stay Silent Than Guess
The whole system rests on one rule: every price the bot is about to say must match a row in the database first. If it does not match, the bot does not speak — it alerts a human instead.
| Part | What it does |
|---|---|
| Product database | 245 items, 7 series, 4 categories, built from the client's own website and current price file |
| Answers with the real photo | Matches the model code, then attaches the actual product image and the real product page link |
| Two units of price | Baht per sheet and baht per square metre — per length for ceilings and battens. The client asked for both: "answer in both forms" |
| The price guard | Checks the price about to be sent against the database row. No match, no reply — staff get a card instead |
| Estimates the sheet count | Customer gives an area, the system works out sheets and total from the coverage figures in the database |
| Remembers the thread | Ask a price, then ask "what colours does it come in" — the bot knows you still mean the same model, six turns back |
| Big jobs escalate immediately | 100 sqm and above always captures the enquiry and always alerts a person |
| Enquiry capture | Logged to a shared sheet, with an instant alert to the team |
| Facebook human takeover | If staff type a reply in the business inbox, the bot goes quiet with that customer instantly, with nothing to press first |
| The client edits prices themselves | Change a price in the sheet, the system picks it up overnight |
What Was Harder Than Expected
The first phase passed acceptance on 10 out of 10 items.
Two days later, the bot was opened up and tested again — seven conversation threads — and 10 more defects were found that the acceptance run had passed straight over.
The reason it passed was simple and worth remembering: the original test set never contained two models whose names start the same way, never asked to see a photo mid-list, and never named a project-sized area.
The worst of them: the model SR was being answered with the price of SR 3D.
Writing an instruction telling the AI to be careful about this did not work — telling a model to be careful is not a guarantee. The fix was to take the decision away from the AI and make it a fixed rule that runs after the AI has answered: match whole model codes, check the price against the database, and if it does not match, suppress the reply and send a card to staff.
A defect that took three attempts. One bug — the bot asking again for something the customer had already given — survived two fixes. The third attempt found the real cause: the same canned answer existed in two places in the same set of instructions. One was edited, the other was not, and the bot was using the one that had not been touched.
And the correct fix was not to add another rule forbidding it. It was to delete the sentence from the instructions entirely when it was not needed — a sentence the bot cannot see is a sentence the bot cannot copy.
Eight live replays, and each of the first three found something new. After the fixes, the same seven threads were replayed against the bot from a test account eight times:
- •Run 1 — the price guard over-fired, suppressing a correct answer, because the model named "F" matched the letter F inside the series name "(F-Luxury)"
- •Run 2 — prices all correct, but the product link for SR 3D pointed at the page for SR
- •Run 3 — the sheet count for model FN calculated as 2,600 when it should have been 3,600
- •Runs 4 to 8 — clean
None of those three defects could have been caught by the automated test suite. All three came from live firing. Every one was added back into the suite before being fixed.
The Check Almost Nobody Runs: Comparing the Bot to the Real Staff
After Facebook went live, the page's message history was pulled back as far as 2020 — 100 conversations, 1,504 messages — and the staff's own question-and-answer pairs were extracted, 224 of them, to see whether the bot answered as well as the humans had.
The result changed the work immediately:
- •Staff gave out a phone number in 11 of 224 cases, while the bot was answering "we do not have a phone number we can give out" — which was not true. One customer asked for a number three times in two hours and then disappeared.
- •Staff quoted a fixed installation rate 12 times over five years, while the bot refused to answer the question at all. On a real 210 sqm enquiry the bot gave the material cost and stopped at "installation not included" — roughly 136,500 baht the customer was never told about.
- •Delivery cost: staff never quoted it once in 224 cases. The bot declining to answer that one is correct, and must not be changed.
That last point matters as much as the first two. This kind of check tells you what to fix and what to leave alone.
It also overturned a standing assumption. Warranty information had been logged for weeks as "content the client has not sent yet" — when staff had been answering it themselves on Messenger all along. The content existed. Nobody had read that channel.
The Results
1. A pricing error worth 156,000 baht, caught before it reached a customer
The first phase had already passed all 10 acceptance items and the system was about to go live.
The extra review found SR being answered with SR 3D's price, and roughly 90 rows in the catalogue carrying the same risk. On a 1,000 square metre job the gap is 156,000 baht.
After the fix:
| Measured | Before | After |
|---|---|---|
| Wrong prices reaching a customer | 3 in a single conversation | 0 across 5 review runs |
| Bot claiming to attach a photo it did not have | 5 times | 0 |
| Enquiry rows from one customer | 5 rows in 3 minutes | 1 row per conversation |
| A 1,000 sqm job recorded as an enquiry | Not recorded | Recorded every time |
| Raw product codes shown to customers | Shown | Shown in readable form |
And while testing was still running, a real tester came in and asked the price of SR, and got the right answer — with nobody staging it.
2. Passed on both real channels
The second phase tested 9 scenarios on the client's real LINE account, each from a different test account so that a handoff in one test could not silence the bot for the next. All 9 passed.
Every figure in the sample answers traces back to a catalogue row:
| Test | Result |
|---|---|
| Specific model, plus a photo request | Price per sheet and per square metre, with dimensions, weight, five colours, the real photo, and the real product link |
| Broad question about the decking category | Real per-square-metre prices across the group, then asked for the area |
| Ceiling category | Answered per length — the correct unit |
| Size and weight | Exact dimensions and weight |
| Delivery cost (not in the database) | Did not guess. Asked for the destination province, logged it, and passed it to the team |
That last one was tested on purpose. One wrong price costs more than one honest "I do not know".
The Facebook side passed 7 scenarios fired from two outside accounts with no privileges in the system, alongside a further 24 security and stability checks. Behind all of it sits an automated suite of 138 checks that pulls the real code out of the running system, so the tests cannot drift away from what is actually deployed.
3. Two channels, one database, nothing new for the team to learn
Facebook is not a second bot. It is a second channel of the same bot — one 245-item database, enquiries landing in the same sheet, alerts going to the same team group.
Change a price in one tab and both channels change together. There is no second copy of the data to keep in sync.
The Facebook side also does something that was not quoted for: if a staff member types a reply in the business inbox, the bot goes silent with that customer immediately, with no button to press first. LINE cannot do this, because it does not tell the system when a human has typed. It was included at no charge, and it solves a problem that had already happened on LINE — the bot talking over a staff member mid-conversation.
Before / After
| Before | After |
|---|---|
| The answer depended on who answered | The same answer every time, from one database |
| Open the price file for every question | Answered from 245 items, with photo and link |
| A price could be wrong with nobody knowing | Price not matching the database means the bot does not send — staff are told |
| Out-of-hours messages went unanswered | Answered around the clock |
| Customer details captured inconsistently | Logged to the same sheet every time, with an instant alert |
| LINE only | LINE and Facebook, with the bot standing down when staff step in |
| Changing a price meant calling a developer | The client edits the sheet; the system updates overnight |
Two Things That Were Not in the Quotation, Done Because They Were Necessary
Team alerts moved off the messaging platform. The quotation said alerts would go to a group chat, but the client's free plan caps outbound messages at 300 a month. In a busy month the alerts would go silent mid-month with no warning at all — so they were moved to a channel with no quota and no cost. Replies to customers were never affected.
A two-page manual instead of the one page quoted. Writing it honestly produced five topics the team actually needed, so two pages were delivered. No extra charge.
What Turned Up During the Facebook Install
The page had two of the platform's own auto-responders switched on — an auto reply and an away message.
Neither can coexist with the bot, because the platform treats the page's own automated message as "a human has taken over", so the bot stops answering that customer immediately. The customer gets one reply and then silence for 24 hours, which looks exactly like a broken bot when nothing is broken at all.
Lessons Learned
- •Telling a model to be careful is not a control. The instruction to watch out for similar model codes was written, and the wrong price still went out. The decision had to be moved out of the model and into a fixed check that runs after it — a rule that either matches the database or stops the message.
- •A test set built from imagination passes. This one passed 10 out of 10 while never once containing two models whose names start the same way, which was the single biggest risk in the catalogue. Test sets have to be built from the real data's shape, not from what the build team thought to try.
- •A guard that can fire has to be tested for firing wrongly too. The price guard's first live run suppressed a correct answer, because a one-letter model code matched a letter inside a series name. A protective rule is a new source of failure the moment it exists.
- •If a fix does not hold twice, the cause is somewhere you have not looked. The answer that kept coming back existed in two places in the same instructions, and only one was being edited. The permanent fix was deleting it, not forbidding it.
- •Compare the machine to the humans it replaced, not only to the documentation. Five years of real staff replies showed the bot refusing to give a phone number the staff gave freely, and withholding an installation rate the staff had quoted for years — while also proving that declining to quote delivery was exactly right.
- •Absent content is sometimes just content nobody read. Warranty answers were recorded as missing from the client for weeks, while staff had been typing them on a channel nobody had opened.
Big Catalogue, and Afraid the Bot Will Quote the Wrong Price?
This catalogue has 245 items with model names so similar that people still confuse them. The answer was not to instruct the bot to be careful. It was to design the system so that every price is checked against the database before it is sent, and the bot stays silent when it is not sure.
If your business carries hundreds of products, high unit prices, and one wrong answer means losing the job — this is exactly the case it is built for.
Tell us about your catalogue first — talk to us →
A note on the 156,000 baht: this is prevented loss, calculated from the price gap between SR and SR 3D on a 1,000 square metre job. It is not money the client lost — the error was caught before the system ever reached a real customer.
Project Information
More Like This
AI ChatbotAI Concierge Across a Regional Hotel Group — 370 Leads, 92-96.8% Self-Service, Second Property Live in Half the Time
96% MatchAn AI concierge live across Facebook Messenger, LINE, and the brand website for a regional hotel group — 370 cumulative booking leads with no down week, 92-96.8% of conversations handled without a human, and a second property live in 7 days against the first one's 14.
AI ChatbotFive Months After Handover — 96.5% Handled Without a Human, Worth 2.4 Times Its Upkeep, and Leads Recovered from 6 to 23
96% MatchA LINE AI assistant for an occupational safety training institute, built in 7 days and then measured for five months. It handles 96.5% of its conversations without a human and returns 2.4 times what its upkeep costs — and the maintenance habit behind those numbers found 15 of 16 leads quietly going missing, staff alerts dying halfway through every month, and a customer who sent 15 messages without a reply. None of it ever raised an error.
Auto Financial OpsAutomated Expense Entry into PEAK — 12 of 12 Bill Types Read Correctly, 45 of 48 Real Documents Passed
96% MatchAn AI agent that reads, classifies, and enters roughly 10 expense documents a day into the client's PEAK accounting system — correct on 12 of 12 bill types, validated against 45 of 48 real documents with zero accounting errors, matched against a real 1,339-item catalogue at 90.4%, and with no bill ever posted before a human taps confirm. Self-hosted on the client's own mini PC, no monthly platform fee.