Telegram Mini App — Step-by-Step Guide
What is it?
Telegram Mini App allows your customers to open the restaurant's digital menu directly inside Telegram — without installing apps or switching to a browser. The menu looks like a native part of Telegram: it adapts to the user's theme, supports the Back button and gestures.
Benefits
- 📱 Inside Telegram — customers don't need to switch to a browser
- 🎨 Native look — colors, fonts and theme adapt to Telegram
- 🔗 Deep Links — direct link to a specific restaurant's menu
- 🌍 Auto language — language is taken from the user's Telegram settings
- 🍪 No cookies — cookie banner is not shown inside Telegram
Quick Start
Step 1 — Create a bot
Open @BotFather in Telegram and send:
/newbot
- Enter the bot name (e.g.,
Meni Menu Bot) - Enter the username (e.g.,
MeniMenuBot) — must end withBot - Save the received Bot Token (format:
123456789:ABCdefGHI...)
💡 If the bot is already created, proceed to Step 2.
Why do you need a Bot Token?
The Bot Token is a secret key for programmatic bot management via the Telegram Bot API. For basic Mini App setup (steps 2–4) it is not required — everything is done through BotFather. But you will need it if you want to:
- Send messages to customers — order status notifications, promotions, welcome messages
- Add inline buttons to bot messages (e.g., a "📋 Open menu" button — see section below)
- Create a Telegram bot for receiving orders — the bot can receive and process orders
- Set up a Webhook — receive events from Telegram (button presses, user commands)
- Integrate with CRM or POS system — automatic order processing through the bot
🔒 Don't publish the Bot Token — anyone who has the token can control your bot. If the token is compromised, revoke it with the
/revokecommand in BotFather.
Step 2 — Create the Mini App
Send BotFather the command:
/newapp
- Select the bot from the list
- Title — application name (e.g.,
Meni) - Description — description (e.g.,
Digital restaurant menu) - Photo — upload a 640×640 px image (app icon)
- GIF — animation (optional). To skip, send
/empty - Web App URL — specify the address of your client application:
https://cenaly.com
- Short Name — short name for the link (e.g.,
menu)
After this you will have a working link like:
https://t.me/YourBot/menu
Step 3 — Add a "Menu" button to the bot chat
Send BotFather:
/setmenubutton
- Select the bot
- Send the URL:
https://cenaly.com
- Enter the button text (e.g.,
Open Menuor📋 Menu)
Now when opening a chat with the bot, a button will appear at the bottom of the screen that opens your application.
Step 4 — Allow the domain
Send BotFather:
/setdomain
Select the bot and specify the domain:
cenaly.com
This will allow Telegram Web App to work on your domain and all its subdomains (e.g., locationid.cenaly.com).
Deep Links — links to a specific restaurant
Telegram supports the startapp parameter, which is passed to the application when opened. Use it for links to a specific restaurant:
| Link | What opens |
|---|---|
t.me/YourBot/menu |
Home page |
t.me/YourBot/menu?startapp=LOCATION_ID |
Menu of a specific restaurant |
t.me/YourBot/menu?startapp=LOCATION_ID__ru |
Menu in Russian |
t.me/YourBot/menu?startapp=LOCATION_ID__en |
Menu in English |
Examples
If your restaurant's LOCATION_ID is lnc2w74z:
https://t.me/YourBot/menu?startapp=lnc2w74z
https://t.me/YourBot/menu?startapp=lnc2w74z__ru
https://t.me/YourBot/menu?startapp=lnc2w74z__en
📌
LOCATION_IDis the identifier of your location in cenaly.com. You can find it in the admin panel or in the URL likehttps://LOCATION_ID.cenaly.com.
Inline buttons from the bot
If your bot sends messages to customers, you can add an inline button that will open the menu:
Option 1 — Web App button (opens immediately)
{
"inline_keyboard": [[{
"text": "📋 Open menu",
"web_app": {
"url": "https://LOCATION_ID.cenaly.com/en"
}
}]]
}
Option 2 — Deep Link button
{
"inline_keyboard": [[{
"text": "📋 Open menu",
"url": "https://t.me/YourBot/menu?startapp=LOCATION_ID__en"
}]]
}
What works automatically
After connecting, the following features are automatically enabled inside Telegram:
| Feature | Description |
|---|---|
| 🎨 Theme | App colors adapt to the Telegram theme (light/dark) |
| ◀️ Back button | Native Telegram button appears when opening a product card |
| 📏 Viewport | The application stretches to full screen |
| 🔒 Close protection | Vertical swipe won't accidentally close the app |
| 🌍 Auto language | Language is determined from the Telegram profile, unless set explicitly |
| 🍪 Cookies | Cookie banner is not displayed inside Telegram |
QR codes for restaurants
Existing QR codes with URLs like https://lnc2w74z.cenaly.com will continue to work as usual — through the browser.
For additional Telegram integration, you can place a second QR code on tables with a bot link:
https://t.me/YourBot/menu?startapp=lnc2w74z
Verification
- Open the link
https://t.me/YourBot/menuon your phone - Click Start (if opening the bot for the first time)
- Click the 📋 Menu button in the bottom panel of the chat
- Make sure the app opened and loaded the menu
- Try opening the deep link:
https://t.me/YourBot/menu?startapp=LOCATION_ID
Common problems
| Problem | Solution |
|---|---|
| App doesn't open | Check that the domain cenaly.com is allowed via /setdomain |
| White screen | Make sure the Web App URL is set to https://cenaly.com (HTTPS is required) |
startapp doesn't work |
Check the format: LOCATION_ID (no spaces or special characters). Language separator is double underscore __ |
| Theme not applied | Telegram Mini App SDK must be connected (update the client application) |