Payment protectionDetails
- Revisions within the package are free.
- If you do not respond within 3 days of delivery, the work is accepted automatically.
The money is reserved when you pay and released only once you accept the work.

Example result
Telegram bot for booking haircuts at a barbershop
The bot in Telegram
A part of the code
async def booking_done(update: Update, context: ContextTypes.DEFAULT_TYPE) -> int:
"""The last step of the form: thanks the client and passes the request on."""
request = context.user_data["booking"]
request["phone"] = update.message.text.strip()
await update.message.reply_text(TEXTS["booking_thanks"], reply_markup=main_menu())
await context.bot.send_message(settings.admin_chat_id, format_request(request))
sheet.append_row([datetime.now().isoformat(timespec="minutes"), *request.values()])
return ConversationHandler.END
All the answers and buttons are in texts.yaml, so the client changes a price or the hours without touching the code.
Files: a ZIP archive with bot.py, texts.yaml, settings.example.env (where the bot token and the sheet go, filled in by the client), requirements.txt and a README: creating the bot in Telegram, connecting the Google Sheet and running it on a small server or hosting. The bot sends the request but does not check the barbers' calendar: the owner confirms the time.
Client: a barbershop with 3 barbers that took bookings only by phone. Task: a Telegram bot with a menu: prices, address and hours, a booking form (service, day and time, name, phone) that sends each request to the owner's chat and adds it to a Google Sheet.
The client and all details are made up.
About this service
A price list sent as a photo or a long message is hard to read on a phone. This Telegram bot splits yours into sections behind buttons, so a customer taps 'Cleaning' or 'Repairs' and sees just those prices, with your notes on what is included and what costs extra. From Standard, forms take an order, a quote request or a callback and send it to your chat and a Google Sheet. In Premium, admin commands and a broadcast tell everyone who started the bot about new prices, and the list can be in 2 languages. All prices come from you and sit in one texts file, so updating them is an edit and a restart. The bot does not work out quotes, read prices from your shop or accounts, or take payments, though it can link to your own payment page. We write the Python code and a README on running it on your computer, server or a hosting. Hosting and the token are yours.
What is included
- What you getA ZIP archive with the Python code, your price list in a separate texts file, an example settings file and a README; the code is also shown on the order page.
- Prices by sectionA button per section, prices in your words
- What's includedNotes on what each price covers
- Requests to youOrder, quote or callback, from Standard
- One file to updateChange a price and restart the bot
- Price newsA broadcast to people who started the bot, in Premium
How it works
- 1PricesYou give the sections, items, prices and notes
- 2CodeWe write the bot and the guide to running it
- 3LaunchYou create the bot in @BotFather, put in the token and run it
- 4ChangesYou ask for changes within your package
What we need from you
Your price list as text or a file: sections, items, prices and notes on what is included; for Standard and Premium, the questions of each form (order, quote, callback) and the chat where requests should go; your contacts and links exactly as they should appear; a PDF of the price list, if the bot should send it too. Never send the bot's token or any passwords: the README shows where you put them yourself.
We will ask you:
- Your price list
- Notes and conditions
- Forms
- Where requests go
Compare packages
| Packages | BasicPrice list by buttons$26 | StandardPrices with requests$49 | PremiumPrice list with broadcasts$84 |
|---|---|---|---|
| Deadline | 1 day | 2 days | 3 days |
| Revisions | 1 | 2 | 3 |
| Platform | Telegram | Telegram | Telegram |
| Ready answers | up to 10 | up to 25 | up to 40 |
| Forms (request, booking, order) | No | up to 3 | up to 5 |
| Requests sent to your chat and a Google Sheet | No | Yes | Yes |
| Admin commands and broadcasts | No | No | Yes |
| Languages of the menu | 1 | 1 | 2 |
| Order Basic | Order Standard | Order Premium |
Payment protection
You pay when you order, but the money is released only for accepted work.
- Fixed priceThe package price does not change after you pay.
- The money is reservedWhen you pay, the amount is only reserved. It is released to the service once you accept the work.
- Checked before deliveryEvery result goes through a quality check before it reaches you, and you see it on the order page before accepting it.
- Free revisionsAsk for changes within your brief as many times as the package allows.
- Acceptance after 3 daysIf within 3 days of delivery you neither accept the work nor ask for changes, it is accepted automatically. If you write in the order chat after delivery, the order waits; once we answer, we may start the 3 days again and will say so in the chat.
- Redo or a full refundIf the result does not match your brief and the revisions did not fix it, or the work takes more than twice its deadline, write in the order chat: we will redo the work or refund the payment in full.
Questions and answers
Can the bot send the price list as a PDF too?
Yes, if you give the file: one answer can send your PDF as a document. The bot does not make the PDF; it sends yours.
Can it work out a price for a customer?
No. It shows your prices as written. For a custom quote, a form collects the details and sends them to you.
How do I update prices?
Edit the texts file in any text editor and restart the bot; within your package you can also ask us. The bot never reads prices from your shop or other systems.
Can customers pay?
No, the bot takes no payments; it can give a link to your own payment page.
Where does it run, and does it work in WhatsApp?
On your computer, server or a hosting with Python, with the token kept by you. It is a Telegram bot; WhatsApp is not part of this service.
Did not find your answer?
