AI and machine learningE-commerce and business

The chatbot that proves revenue: how attribution works in LEO Chat

We built LEO Chat as a bot that not only answers but also shows which scenario a paid order came after. Here is the mechanism, its limit and our own measurements.

September 7, 2026
8 min read

On 4 July 2026 the chat in the corner of lionex.com.ua changed. From the outside it is the same little window with a greeting and buttons. Inside it is the first working instance of LEO Chat, the chatbot platform for online stores we had been building since the start of that month. Three days later the same widget went live on textory.com.ua.

This article explains why we took on yet another bot in a market that already has dozens of them, and what exactly the platform counts when it shows «revenue through the bot».

The question a store usually cannot answer

A store we start website work with almost always already has a bot, or a broadcast service with a scenario builder. And the owner almost always cannot say how many orders came through that bot last month.

They know the subscriber count. They know how many messages were sent. Sometimes they see button clicks. After that the data stops, because the order is placed somewhere else: on the site, in a form, in a phone call with a salesperson. The chain breaks exactly where the money starts, and the decision to keep paying for the bot is made blind.

We closed that chain from the other end. The order has to be placed inside the conversation, delivery and payment included, and every paid order has to leave a trace: after which scenario, after which broadcast, in which channel.

What happens in the conversation

The customer writes to a Telegram bot or to the widget on the site. The bot answers from the store's knowledge base: uploaded files with delivery and warranty terms, site pages, question-and-answer pairs. When the request carries an intent to buy, the bot shows product cards with a button.

Then comes the part all of this was built for. The cart collects several items. Name. Phone number validated in the +380 format. Delivery: for Nova Poshta the bot searches the carrier's live directory for the city and the branch, for courier delivery it asks for the address. Payment: cash on delivery or card through Monobank. At the end, a confirmation, and once the waybill is created its number arrives in the same chat.

The catalogue comes from a Khoroshop or Prom.ua feed, from CSV, or from a scanner that reads product markup on the site and builds the category tree itself. That matters for the next step: the order in the database knows its product, its amount, its payment method and its status. Without that there is nothing to count.

How an order becomes a line in the report

This is the easiest place to lie, so here is the full mechanism.

Every interaction with the bot leaves an event: entering a scenario, passing a node, a broadcast sent, a click on a link from it. Events are written to a separate analytical store on ClickHouse and are not mixed with the operational database. When an order moves to the paid status, the platform looks back over a configured window and attributes it to the last interaction with the bot before payment — a specific scenario, broadcast or channel. This is a last-touch model, and it is called that by name in the settings.

The «revenue through the bot» dashboard then adds those attributions up: by channel, by scenario, by broadcast. Next to it sits the conversation-to-order conversion rate and the scenario funnel node by node, which shows the step where people drop out.

Now the limit we print next to every such report. It shows that an order was paid after a conversation or a broadcast. It does not show that the order would not have existed without the bot. That conclusion requires an experiment with a control group, and a report is not an experiment. So «revenue through the bot» reads as accounting here, not as proof of uplift.

A bot does not create demand. It removes technical loss: the question asked at half past eleven at night and answered the next day, the cart abandoned one step before payment, the broadcast whose effect nobody could see in money. How much of that turns into orders is decided by assortment, prices and how fast people handle the hard cases.

What we measured on our own product

We do not promise growth percentages, so what is left is showing what we measured ourselves, with dates.

On 4 July 2026 we ran the AI module against a reference set: 29 questions the knowledge base has an answer for, and 16 questions outside it. Accuracy on the first group was 89.7%. On the second the bot never invented an answer: in all 16 cases it admitted it did not know and offered to hand over to an operator. That is the result of an evaluation on a specific set, not a property that holds for any question.

The same day we checked the end-to-end chain: a test order from the bot appears on the revenue dashboard with the correct attribution to a scenario within 60 seconds. Onboarding from an empty account to a published bot took up to 15 minutes on demo data on 4 July 2026.

On 17 August 2026 we checked that the platform does not lose messages. On a test stack under a load of 300 messages per second for a minute, we killed the engine at the twentieth second, and in later runs restarted the NATS queue and Redis. After each run we reconciled the counters: how many messages were acknowledged at the entry point, how many reached a scenario, how many nodes were executed. In all three cases: zero losses and zero duplicates among acknowledged messages. Along the way we found two bugs that could have lost a message, and fixed them before it happened on a live project.

On 18 August we measured throughput: 298 messages per second processed in real time with 64 parallel workers, which is 17,891 messages in a minute. On the default configuration, 159 per second. The full integration suite that day consisted of 585 tests, all passing.

On 7 September 2026, an external measurement from Ukraine: the leo.lionex.com.ua landing page responded in 0.21 seconds at 153 KB of HTML, the client cabinet in 0.18 seconds, the engine in 0.19. The widget script weighs 57 KB, 19 KB compressed. That is the state on the date of measurement, not a promise for tomorrow.

What LEO Chat does not have

There are two live channels: Telegram and the widget on the site. Instagram and Viber are planned. If Instagram is your store's main channel, LEO is not a fit yet, and it is better to know that now.

There are no ready-made integrations with accounting systems or advertising cabinets either — that is a direction of development, not a feature available today. Exchange with external systems is done through webhooks and the public API.

Card payment is enabled on the payment provider's keys held by the store, which makes it a separate connection step rather than a toggle.

The bot does not close complex questions, and it should not. An individual price, a disputed return, a non-standard delivery — that is a person's job. This is exactly why the platform has a shared inbox where the bot hands over the conversation together with the full history, the customer's attributes and their orders.

What to ask any bot vendor

Whether or not you take LEO Chat, there is one question in a vendor conversation that saves a year: how exactly does your report attribute a paid order to an action by the bot, and over what window. If there is no answer, or a subscriber chart is shown instead, then this product has no revenue report, it has an activity report.

The second question: what happens to a message if your service goes down in the middle of a conversation. An answer of «that does not happen» means it was never tested.

What it looks like for us

We use LEO Chat on two of our own sites. On lionex.com.ua the bot answers from a knowledge base about our services and collects enquiries that land straight in our working system. On textory.com.ua it serves the users of Textory, our second product.

This is not a client case study, and we do not present it as proof of revenue. It is a way to see the product through a user's eyes every day and to catch what tests do not catch.

To see how the bot behaves in a conversation, use the chat in the corner of this page: that is it. The product description and cabinet screenshots are on the LEO Chat page, and our other products are in the own products section. To try the platform on your own store, go to leo.lionex.com.ua: pricing there follows the volume of the knowledge base and AI answers, and the current terms are on the product site.

If you need the bot connected to your catalogue, delivery and accounting rather than configured by yourself, send us the task. We reply within two hours and work under a contract. On the delivery mechanics inside an order we have written separately: the Nova Poshta integration and how a checkout with Nova Poshta is built.

Tags

AIE-commerce

🤔Did you like the article?

Your opinion helps us create better content

Share with friends

Found something useful? 🚀

Help others learn about it - share the article on social networks

https://lionex.com.ua/blog/chat-bot-yakyi-dovodyt-dokhid-leo-chat

💚 Thank you for helping us grow

Vladyslav Chystiakov

Пише про те, що робить руками: інтернет-магазини на OpenCart, застосунки на Next.js, інтеграції та швидкість сайтів. У статтях — заміри й перевірки, які читач може повторити на своєму проєкті, а не загальні поради. Комерційна розробка з 2015 року.

Frequently asked questions

Answers to common questions on the topic

It is the sum of orders that were paid after an interaction with the bot. Every interaction leaves an event, and at the moment of payment the order is attributed to the last interaction before it — a scenario, a broadcast or a channel. This is a last-touch model, that is accounting rather than proof that the order would not have existed without the bot: that conclusion requires an experiment with a control group.

There are two live channels: Telegram and the widget on the site. Instagram and Viber are planned and do not exist as of publication. If Instagram is your store's main channel, the platform is not a fit yet.

Yes, that is the core scenario. The cart collects several items, then come the name, a phone number validated in the +380 format, and delivery: for Nova Poshta the city and branch are searched in the carrier's directory. Payment is cash on delivery or card through Monobank, and the card option is enabled on the payment provider's keys held by the store. The number of the created waybill arrives in the same chat.

In the evaluation of 4 July 2026, no. We ran 29 questions the knowledge base has answers for and 16 questions outside it: accuracy on the first group was 89.7%, and on the second the bot admitted in all 16 cases that it did not know and offered to hand over to an operator. That is a result on a specific set, not a property that holds for any question.

It is a product with its own pricing: the model follows the volume of the knowledge base and the number of AI answers, with a trial period that needs no card. Current terms and figures are on the product site, leo.lionex.com.ua. Connecting the bot to a catalogue, delivery and accounting with the agency is estimated separately after the task is reviewed.

Get the best articles by email

Subscribe to our newsletter and receive useful tips, insights and news about web development, marketing and business.

We respect your privacy. You can unsubscribe at any time.