How I turned a Telegram bot into a permanent sales menu that sells all day

In our project the offers change practically every day. One day we sell a ticket at odds of 10+, the next a high-odds pick, and alongside that a long-term VIP membership. We used to write every offer out again in the channel — and when the price, the odds, the start time or the number of spots changed, several different messages had to be edited.
The result was a lot of manual work, a pile of sales posts, and an audience buried in the same offers.
The harder we tried to sell, the more spam we produced.
So I gradually moved the entire sales side into a single Telegram bot. Its first message became a permanent menu of current offers. Each button leads into its own sales scenario, which I can change at any time without touching the menu itself. The buttons stay put — only the offer behind them changes.
1. The permanent menu is the main signpost
When someone starts the bot they don't get a long welcome message or paragraphs of explanation. They pick what they came for straight away:
Welcome 👋
Choose an offer:
- Today's ticket
- High odds
- VIP membership
- Contact support
Every option is its own button. Nobody has to scroll back through old posts in the channel, hunt for the current price or message support to ask what's available today — they just tap the product they're interested in.
And the menu itself never changes. What changes is the content of the scenarios the buttons lead to.
2. Every offer has its own sales scenario
I built a separate scenario in TG Flows for each offer. The Today's ticket button, for instance, opens a scenario containing:
- what kind of ticket it is
- the odds
- the kick-off time of the first match
- the price
- any guarantee
- a button with the payment link
The VIP membership button leads into a completely different scenario, which explains:
- what the membership includes
- how often members get tips
- what it costs
- how long access lasts
- how to join
- where to pay
So every product has its own short path to purchase. Someone picks an offer in the menu and gets only the information that belongs to it. No filler, no hunting, no waiting on support.
3. Each day I edit exactly one scenario
When we prepare a new offer, I open the relevant scenario and update it — for a one-off ticket that means the odds, the start time, the price, the copy, the number of spots and the payment link.
I don't touch the welcome message, don't create new buttons and don't rebuild the sales process. The permanent menu stays exactly as it was — but Today's ticket always opens the current offer.
I update the offer once, and from that moment it's current everywhere I send people into that scenario from.
4. The same scenarios do the work in campaigns
When I announce a new offer during the day, I don't have to copy the whole sales pitch into every campaign. A short message is enough:
Today's offers are ready ✅
Pick what you're interested in:
- Today's ticket
- High odds
- VIP membership
Underneath I attach the same buttons the permanent menu uses. Tapping one opens the matching scenario with the full, current offer.
So a campaign has exactly one job: get attention and take the user to the right offer. The explanation, the price and the payment link already live inside the scenario — which is why I never have to repeat the same long pitch in every campaign.
5. The bot sells while I'm offline
People arrive at different times. One starts the bot in the morning, another taps a campaign in the afternoon, a third comes back in the evening and opens the permanent menu again. All of them see the same current offer.
I don't have to be online explaining to each of them what we're selling today, what the odds are, what it costs, when the first match starts and where to pay. The bot walks them through it.
Support only steps in when a customer has a specific question or needs help with a payment — instead of answering the same basics over and over, which the bot can hand out by itself.
6. I can bring one offer up several times a day
The first campaign usually just announces that a new offer is available. Later I can send another message — for example:
- a heads-up that it's starting soon
- news that only a few spots are left
- a time-limited discount
- a fresh result or a testimonial
- the last chance to buy
But I never rewrite the whole offer. I put a button into the campaign that leads into the same current scenario. So I build the sales process once and feed users into it from several different campaigns during the day. Each message can take a different angle; all of them lead to one current place.
7. Follow-up campaigns don't go to everyone
The first announcement can go to a wide audience. After that I filter:
- members don't get an offer for the membership they already have
- customers who already bought today's ticket don't get a further discount on it
- people interested in high odds get exactly that kind of offer
- free users can be introduced to their first paid product
The goal isn't to send as many messages to as many people as possible. The goal is to put the right offer in front of the right user. That's what lets me communicate actively all day without burying the whole audience in the same messages.
8. Old offers disappear by themselves
Daily offers have a shelf life. Once the first match starts or the window closes, I don't want someone opening an old campaign and trying to buy a ticket that's already running. So I use Auto-delete when I send:
- the offer goes out at 12:00
- the window closes at 17:30
- the message deletes itself at 17:30
I do the same with extra discounts and final reminders. The campaign does its selling and then disappears from the chat when the offer ends. So nobody is left with old prices, dead payment links or offers for tickets that already kicked off.
9. When an offer ends, I switch the scenario to an info branch
The permanent menu is always there, which is exactly why the button must not open an old offer once selling has stopped. If I know an offer ends at 18:00, I switch the scenario from the sales branch to a simple message just before:
This offer is no longer available ❌
We're working on the next one. As soon as it's ready, we'll let you know ✅
So the user can still tap the same button, but instead of a dead payment link they get a clear answer that selling has finished. When the next offer is ready I switch the scenario back — no menu changes, no new button.
10. One bot turned into a simple sales system
The whole thing works like this:
Permanent menu
→ buttons for the individual products
→ its own scenario for each offer
→ the offer is updated in one place
→ campaigns feed users into those same scenarios
→ follow-ups only go to the relevant people
→ old campaigns delete themselves
→ when selling ends, the scenario switches to an info branch
I don't build the sales process from scratch every day. I update one scenario and then feed people into it from the menu and from campaigns.
What the permanent menu gave me
The biggest change isn't just the time saved. Customers get to what they want to buy far faster — no waiting on support, no scrolling through dozens of old messages, no hunting for the current payment link. They open the permanent menu, tap an offer and go straight to buying.
And I don't have to write out the same information over and over, edit several messages, or push every change of offer onto the entire audience.
The result:
- less manual work
- less spam
- fewer out-of-date messages
- an easier job for support
- a shorter path from customer to purchase
So for me a Telegram bot isn't just support or a tool for sending campaigns. It's a permanent sales menu I control completely, keep up to date — and that sells all day long.
Related articles

One campaign instead of dozens of messages: collecting members' winning tickets
A tag for each paid group, one campaign only for the people who got the winning ticket, and every reply in one place. What used to be dozens of manual messages now takes minutes.

How to add TG Flows to your phone as an app and turn on notifications
Install TG Flows on your home screen like a normal app and switch on push notifications. Step by step for iPhone and Android — no App Store, no Google Play.