본문 바로가기
텔레그램 한글 가이드
채널·봇 STEP 70 / 98

텔레그램 봇 버튼 — 인라인 버튼과 답장 키보드

텔레그램 봇 버튼 두 종류를 비교했습니다. 메시지 아래 인라인 버튼의 callback_data 64바이트 한도와 answerCallbackQuery 응답, 입력창을 바꾸는 답장 키보드의 칸과 연락처·위치 요청 버튼, 키보드 치우기까지 예시 JSON 으로 정리합니다.

  • 난이도L4
  • 읽는 시간5분
  • 최종 검증

결론부터

  1. 1인라인 버튼은 메시지 아래 신호, 답장 키보드는 버튼 글이 대화로 간다.
  2. 2callback_data 는 64바이트 — 짧은 코드만, 누르면 꼭 응답한다.
  3. 3답장 키보드는 resize 를 켜고, 연락처·위치는 사용자가 허락해야 간다.
이 글의 목차
  1. 버튼은 두 종류
  2. 인라인 버튼
  3. 답장 키보드
  4. 자주 묻는 질문
  5. 한눈에 정리

버튼은 두 종류

종류어디에 뜨나누르면
인라인 버튼(InlineKeyboardMarkup)메시지 바로 아래에 붙는다대화에 아무것도 보내지 않고 봇에게 신호만 간다 · 링크 열기 · 미니 앱 열기 등
답장 키보드(ReplyKeyboardMarkup)입력창 아래 키보드 자리를 바꾼다버튼 글자가 사용자의 메시지로 대화에 보내진다

메뉴를 고르게 하거나 설정을 바꾸는 일은 대화가 지저분해지지 않는 인라인 버튼이 맞고, '예/아니요'처럼 사용자의 답이 대화에 남아야 하는 일은 답장 키보드가 맞습니다.

인라인 버튼

sendMessage 의 reply_markup 에 버튼 줄(배열의 배열)을 넣습니다.

{"inline_keyboard": [
  [{"text": "알림 켜기", "callback_data": "notify_on"},
   {"text": "알림 끄기", "callback_data": "notify_off"}],
  [{"text": "도움말 보기", "url": "https://example.com/help"}]
]}
버튼 칸하는 일
callback_data봇에게 신호(callback_query)를 보낸다 — 1~64바이트
url링크를 연다
web_app미니 앱을 연다
switch_inline_query대화를 골라 인라인 모드로 봇을 부른다(인라인 봇)
copy_text정해 둔 글을 클립보드에 복사
login_url · pay사이트 로그인 · 결제(스타 결제)

callback_data 는 짧게, 답은 반드시

  • 64바이트 한도는 글자 수가 아니라 바이트입니다. 한글은 한 글자에 3바이트라 금방 찹니다. notify_on 처럼 영문 짧은 코드를 넣고, 긴 정보는 내 서버에 두고 번호만 싣습니다.
  • 버튼을 누르면 사용자 화면에 로딩 표시가 돕니다. 봇은 answerCallbackQuery 로 꼭 응답해 이 표시를 끝냅니다. 짧은 알림 글이나 경고 창(show_alert)을 함께 띄울 수 있습니다.
  • 결과는 새 메시지를 보내기보다 그 메시지를 고쳐서(editMessageText · editMessageReplyMarkup) 보여 주는 편이 대화가 깔끔합니다.
  • callback_data 는 사용자가 꾸며 보낼 수 있다고 보고, 받은 값으로 권한을 다시 확인합니다.

답장 키보드

{"keyboard": [[{"text": "예"}, {"text": "아니요"}],
              [{"text": "내 연락처 보내기", "request_contact": true}]],
 "resize_keyboard": true,
 "one_time_keyboard": true,
 "input_field_placeholder": "답을 골라 주세요"}
칸뜻
resize_keyboard버튼 수에 맞게 키보드 높이를 줄인다 — 거의 늘 켠다
one_time_keyboard한 번 누르면 키보드를 접는다
is_persistent일반 키보드로 바꿔도 다시 돌아오게 둔다
input_field_placeholder입력창의 흐린 안내 글(최대 64자)
selective그룹에서 특정 사용자에게만 키보드를 보인다

버튼에 request_contact · request_location · request_users · request_chat · request_poll 을 붙이면 연락처·위치·사용자·대화·투표를 고르는 텔레그램 화면이 열립니다. 연락처와 위치는 사용자가 확인 창에서 허락해야 보내집니다. 키보드를 치우려면 {"remove_keyboard": true}(ReplyKeyboardRemove)를 보냅니다.

요청 주소와 응답 읽기는 봇 API 첫 요청, 버튼 신호를 받는 방법은 업데이트 받기에 있습니다.

자주 묻는 질문

인라인 버튼과 답장 키보드는 무엇이 다른가요?

인라인 버튼은 메시지 아래에 붙어 봇에게 신호만 보내고, 답장 키보드는 입력창 자리를 바꿔 버튼 글자가 사용자 메시지로 대화에 보내집니다.

버튼을 누르면 로딩 표시가 계속 돌아요.

봇이 answerCallbackQuery 로 응답하지 않아서입니다. 버튼 신호를 받으면 꼭 응답합니다.

callback_data 에 한글을 넣어도 되나요?

1~64바이트 한도라 한글은 금방 찹니다. 짧은 영문 코드를 넣고 긴 정보는 서버에 둡니다.

답장 키보드는 어떻게 없애나요?

remove_keyboard 를 true 로 한 ReplyKeyboardRemove 를 메시지와 함께 보냅니다.

참고한 공식 문서

요약

한눈에 정리

  1. 1인라인

    신호 · 64바이트 · 꼭 응답.

  2. 2답장 키보드

    글이 대화로 · resize.

  3. 3요청 버튼

    연락처 · 위치 · 대화.

이 글 공유하기

같은 문제를 겪는 친구에게 보내 주세요.

텔레그램
더보기

휴대폰으로 열기휴대폰 카메라로 비추면 이 글이 열려요.

최종 수정 2026-10-06

함께 보면 좋은 글

전체 보기 ›