Skip to main content

Customer service

Telegram Bot Buttons: Reply Keyboards, Inline Buttons and One-Tap Phone and Location Requests

A Telegram bot has two kinds of buttons, and they behave very differently. Reply keyboards send text and can ask for a phone number or a location; inline buttons sit under a message and open links or trigger actions. Here is when to use each, and how to set them up in MonoChat without code.

MonoChat Team Updated: 9 min read

On this page
  1. Two kinds of buttons at a glance
  2. Reply keyboards: answers that look like the customer typed them
  3. Inline buttons: actions under a message
  4. Which one to use
  5. How to build Telegram buttons in MonoChat
  6. An example: a pharmacy delivery bot
  7. Mistakes to avoid
  8. Sources

Buttons decide whether a Telegram bot feels like a shop assistant or a form. A customer who can tap “Track my order” or “Share my number” answers in a second; a customer who has to type an order number, a phone number in the right format or a street address often gives up halfway.

Telegram gives bots two very different kinds of buttons, and mixing them up is the most common reason a bot feels clumsy. This guide explains reply keyboards and inline buttons, how to ask for a phone number or a location with one tap, and how to build all of it in MonoChat. With Telegram reporting over 1 billion active users, the bot is often the first place a customer meets your business, so its first buttons matter.

Two kinds of buttons at a glance

Reply keyboardInline keyboard
Where it appearsIn place of the customer’s keyboard, under the message boxAttached under one specific message
What a tap doesSends the button’s text into the chat, as if typedSends hidden data to the bot, opens a link or opens a Mini App; nothing is posted in the chat
Can ask for phone number or locationYes (request_contact, request_location), in private chatsNo
After the tapCan hide itself (one_time_keyboard)Stays under the message
Best forAnswers you want in the chat: menu choices, “Yes”/“No”, sharing contact or locationActions on a message: links, confirm/cancel, choosing from a card

In the Bot API these are ReplyKeyboardMarkup with KeyboardButton objects, and InlineKeyboardMarkup with InlineKeyboardButton objects. Telegram’s own bot guide puts the difference simply: unlike reply keyboards, pressing an inline button does not send a message to the chat.

Reply keyboards: answers that look like the customer typed them

A reply keyboard swaps the customer’s letter keyboard for a grid of your buttons. When they tap “Opening hours”, the text “Opening hours” appears in the chat from the customer, and your bot reads it like any other message. That makes reply keyboards ideal for menus and short answers: the conversation history stays readable, and an agent who opens the chat later sees exactly what the customer chose.

A few options shape how they behave:

  • resize_keyboard makes the keyboard only as tall as its buttons. Without it, two buttons fill the height of a full keyboard.
  • one_time_keyboard hides the keyboard as soon as it has been used. It is still available behind a keyboard icon in the input field, but the customer gets their letters back.
  • input_field_placeholder shows a hint of 1 to 64 characters in the message box while the keyboard is open, for example “Choose an option”.
  • is_persistent keeps the keyboard visible even when the normal keyboard is hidden.

Because the tap sends plain text, the button label is also your routing key. Keep labels short, unique and stable: if you rename “Track order” to “Where is my order?”, update the flow condition that listens for it.

Asking for a phone number with “Share contact”

A Telegram bot never sees a customer’s phone number on its own. The only way to get it is to ask: a reply-keyboard button with request_contact set to true. When the customer taps it, Telegram sends their phone number to the bot as a contact. The Bot API notes that this works in private chats only.

This is far more reliable than “please type your phone number”: no missing country code, no spaces in odd places, and the number is the one the customer’s Telegram account is registered with. It is the natural first step when you need to match the customer with an order, a booking or a CRM record.

Two habits make customers more willing to tap:

  1. Say why you ask. “Share your number so we can find your booking” works better than a bare button.
  2. Offer a way around it. Some people will not share their number. Accept a booking reference or an e-mail as well, or hand the chat to a person.

Asking for a location

request_location works the same way: one tap sends the customer’s current location as a location message. It suits delivery addresses, finding the nearest branch, sending a technician or a taxi, or checking whether an address is inside your service area. As with contacts, it works in private chats only, and the customer decides whether to share.

Inline buttons: actions under a message

Inline buttons belong to one message, so they make sense when the choice is about that message: “Confirm” and “Change time” under a booking summary, “View menu” under a restaurant greeting, “Pay now” under an invoice. There are three types most businesses use:

  • Callback buttons send up to 64 bytes of data (callback_data) to the bot. Nothing is posted in the chat; the bot decides what happens next.
  • URL buttons open a web page, such as your price list or a tracking page.
  • Web App buttons open a Telegram Mini App inside Telegram, for example a booking form or a catalog.

One detail matters for how the bot feels. After a tap on a callback button, Telegram shows a progress indicator until the bot calls answerCallbackQuery, and Telegram asks bots to call it even when there is nothing to show. A bot that skips this step leaves the button “loading”, and customers tap again and again.

A note on Telegram Business accounts. If you connect a bot to a Telegram Business account so it answers in your personal chats, Telegram does not support reply keyboards or Web App buttons in messages the bot sends on behalf of that account. They work in the chat with the bot itself, which is how a bot connected with its BotFather token, as in MonoChat, talks to customers.

Which one to use

SituationUse
Main menu: “Prices”, “Opening hours”, “Talk to a person”Reply keyboard (quick replies)
Yes / No, ratings, picking a time slotReply keyboard, hidden after one tap
Getting the customer’s phone numberReply keyboard with Share contact
Delivery address or nearest branchReply keyboard with location request
Confirm or cancel the booking shown in this messageInline callback buttons
Open a website, tracking page or payment pageInline URL button
A form or catalog inside TelegramInline Web App button

A simple rule: if the answer should be visible in the conversation, use a reply keyboard. If the button acts on a message or leaves Telegram, use an inline button.

How to build Telegram buttons in MonoChat

MonoChat connects your Telegram bot with its BotFather token (see how to create a bot and get its token). Since version 3.8.41 (1 November 2026), MonoChat sends quick replies, location requests and contact info requests as Telegram reply-keyboard buttons, shows the image, video or document header of button messages, answers every button tap so it no longer keeps loading, and can show a typing indicator.

1. Quick replies (reply keyboard). In a flow, add a Send Message node (or create one of your Short Messages) and choose the Text type. Write the text, switch on Quick Reply, and under Buttons click Add for each button. Set Type to text and write the button title for each language you serve. Telegram shows the buttons under the message box, two per row, sized to fit. Image, video and document messages can carry quick replies too.

2. Ask for the phone number. Choose the Contact Info Request type and write the message, for example “To find your order, please share your phone number.” Telegram shows a Share contact info button in the customer’s language. It hides after one tap, and the phone number arrives in the chat as a contact. A quick reply of type user-phone-number does the same inside a quick-reply menu.

3. Ask for the location. Choose the Location Request type. The customer sees a Send location button, and their location arrives as a location message.

4. Inline buttons. Choose the Button type. Pick a Header Type if you want an image, video or document on top, write the body text (up to 1,024 characters), then add buttons: postback for a callback button, web-url for a link and app-url for a Mini App. Button titles are up to 20 characters. A tap on a postback button arrives in the chat as a Button Reply.

5. Route by the answer. Start the bot flow with New Message Received and turn on Is bot?. After the question, add an If node with a Message Text condition for quick-reply labels, or a Message Type condition to tell a shared contact or location apart from typed text. Send the customer who chose “Talk to a person” to an Assign Session node.

6. Show that you are typing. In the channel’s settings, switch on Enable typing indicator. The customer then sees “typing” while an agent writes in the message box and while an AI node in a flow prepares its answer; while an image or document uploads, Telegram shows that a photo or file is being sent.

Every chat, button tap and shared contact lands in the same team inbox as your WhatsApp, Instagram and Messenger conversations, so an agent who takes over sees what the customer tapped.

An example: a pharmacy delivery bot

Customer: /start Bot: Hi, this is Green Cross Pharmacy. How can we help? (buttons: Order delivery · Opening hours · Talk to a pharmacist) Customer: Order delivery Bot: Please share your phone number so we can find your prescription. (button: Share contact info) Customer: (shares contact) Bot: Thanks. Where should we deliver? (button: Send location) Customer: (shares location) Bot: We deliver there today between 4 and 6 pm. (inline buttons: Confirm · Change time)

Three reply keyboards collect the answers in the chat, and one inline keyboard confirms the summary. “Talk to a pharmacist” goes straight to a person.

Mistakes to avoid

  • Too many buttons. Two to six options per keyboard are easy to scan on a phone. Longer menus belong in a Mini App or a second step.
  • Asking for the phone number first. Ask once the customer knows why you need it.
  • Leaving the keyboard on. A keyboard that never hides makes customers think they cannot type. Use one-time keyboards for one-off questions.
  • Silent buttons. Every tap should get a reply, even “Got it, one moment”.
  • No way to a person. Always keep a “Talk to a person” option. Our guide to Telegram for business covers handover and opening hours.

If you also run WhatsApp, the ideas carry over with different limits: see our guide to WhatsApp interactive messages. To add AI answers between the buttons, read how to create a Telegram AI bot.

Start free at app.monochat.ai and connect your Telegram bot in a few minutes.

Sources

FAQ

Frequently asked questions

What is the difference between a reply keyboard and an inline keyboard in Telegram?

A reply keyboard replaces the customer's normal keyboard with your buttons, and a tap sends the button's text into the chat as if the customer had typed it. An inline keyboard is attached under one message; a tap sends hidden data to the bot or opens a link or Mini App, and nothing new appears in the chat.

How can a Telegram bot get a customer's phone number?

Only when the customer shares it. Send a reply-keyboard button with request_contact; when the customer taps it, Telegram sends their phone number to the bot as a contact. In MonoChat, choose the Contact Info Request message type: the customer sees a Share contact info button in their language.

Can inline buttons ask for a phone number or location?

No. In the Bot API, request_contact and request_location exist only on reply-keyboard buttons (KeyboardButton), and they work in private chats with the bot only. Inline buttons send callback data, open a URL or launch a Mini App.

Why does a Telegram button keep showing a loading spinner?

After a customer taps an inline callback button, Telegram shows a progress indicator until the bot calls answerCallbackQuery. If the bot never answers, the button looks stuck. Since MonoChat 3.8.41, every tap is answered, so the spinner stops and the tap arrives in the chat as a Button Reply.

Do I need to write code to add buttons to a Telegram bot?

No. Connect the bot's BotFather token to MonoChat, then build messages in the Send Message node or in short messages: quick replies, Button messages with inline buttons, Location Request and Contact Info Request. Flows then route the customer by the button they tapped.

First month of Growth on us

Run WhatsApp, Instagram and Messenger from one inbox

Start free with MonoChat: shared team inbox, AI assistants, templates and campaigns on official Meta APIs.

One code per business • 30 days to redeem • No card needed

$150 to get started.

Claim