Java로 텔레그램 봇 만들기 – ReplyKeyboard 버튼 메뉴 구현 예제
이 글에서는 Java TelegramBots 라이브러리를 활용해
사용자가 1을 입력하면 자동으로 ReplyKeyboard가 나타나는
실용적인 예제를 단계별로 소개합니다. Java로 텔레그램 봇 만들기 – ReplyKeyboard 버튼 메뉴 구현 예제는 초보자도 따라 하기 쉽도록 핵심만 추려 설명합니다.
텔레그램 봇을 개발하다 보면 흔히 발생하는 요구는 “메시지 내용에 따라 버튼 메뉴를 보여주고 싶다”는 것입니다. 본 예제는 바로 그런 상황을 빠르게 구현할 수 있는 기본 뼈대를 제공합니다.
1. 예제 기능 개요
이 Java 예제는 다음 흐름으로 동작합니다. Java로 텔레그램 봇 만들기 – ReplyKeyboard 버튼 메뉴 구현 예제의 목적은 최소한의 코드로 버튼 메뉴를 띄우는 방법을 분명히 보여주는 것입니다.
- 사용자가 봇에게
1이라는 텍스트를 보낸다. - 봇은 해당 메시지에서
chatId를 읽어 키보드를 생성한다. - 키보드에는 “버튼1” 텍스트 버튼이 포함된다.
- 봇이 "메뉴를 선택하세요" 텍스트와 함께 ReplyKeyboard 를 전송한다.
- 예제에는
CallbackQuery를 처리할 수 있는 기본 분기 구조도 포함되어 있다.
getBotUsername()와 getBotToken()에 공인된 봇 이름과 토큰을 넣어야 합니다.
2. 전체 소스 코드 (Java 텔레그램 봇 예제)
public class telegramV2 {
public static void main(String[] args) {
// TelegramBots API 초기화
ApiContextInitializer.init();
TelegramBotsApi api = new TelegramBotsApi();
// 익명 클래스로 TelegramLongPollingBot 구현
TelegramLongPollingBot bot = new TelegramLongPollingBot() {
@Override
public void onUpdatesReceived(List<Update> updates) {
// 여러 Updates가 한 번에 들어오는 경우 사용 (기본 구현 호출)
super.onUpdatesReceived(updates);
}
@Override
public void onUpdateReceived(Update update) {
// 1) 일반 메시지 처리 (텍스트)
if (update.hasMessage() && update.getMessage().hasText()) {
// 사용자가 '1'을 보냈을 때만 키보드 전송
if ("1".equals(update.getMessage().getText())) {
long chatId = update.getMessage().getChatId();
// 키보드 행 리스트
List<KeyboardRow> keyboard = new ArrayList<>();
KeyboardRow row1 = new KeyboardRow();
// 버튼 1개 생성
KeyboardButton btn1 = new KeyboardButton("버튼1");
row1.add(btn1);
// 키보드에 행 추가
keyboard.add(row1);
// SendMessage 생성
SendMessage msg = new SendMessage()
.setChatId(chatId)
.setText("메뉴를 선택하세요")
.setReplyMarkup(new ReplyKeyboardMarkup(keyboard));
try {
// 메시지 전송
execute(msg);
} catch (TelegramApiException e) {
e.printStackTrace();
}
} else {
// '1' 이외의 메시지에 대한 처리(필요 시 구현)
}
// 2) CallbackQuery 처리 (InlineKeyboard 사용 시)
} else if (update.hasCallbackQuery()) {
long chatId = update.getCallbackQuery().getMessage().getChatId();
String callData = update.getCallbackQuery().getData();
long messageId = update.getCallbackQuery().getMessage().getMessageId();
System.out.println("callData : " + callData);
// callData 값에 따라 분기 처리 가능
}
}
@Override
public String getBotUsername() {
// 텔레그램 BotFather에서 생성한 봇 이름 입력
return "";
}
@Override
public String getBotToken() {
// 텔레그램 BotFather에서 발급받은 봇 토큰 입력
return "";
}
};
// 봇 등록 및 초기 메시지 전송
try {
api.registerBot(bot);
// 특정 chatId에 초기 메시지 전송 (chatId는 실제 값으로 교체해야 함)
bot.execute(new SendMessage("", "안녕하세요"));
} catch (TelegramApiException e) {
e.printStackTrace();
}
}
}
getBotToken()에 들어가는 실제 토큰은
절대 깃허브, 블로그, 공개 저장소에 노출하지 마세요.
토큰 유출 시 외부에서 봇을 완전히 제어할 수 있습니다.
3. 코드 설명 – main & 봇 등록
3-1. ApiContextInitializer와 TelegramBotsApi
ApiContextInitializer.init();는 TelegramBots API가 내부적으로 필요로 하는 초기 설정을 수행합니다. 이후 TelegramBotsApi를 통해 만든 봇 인스턴스를 텔레그램 서버에 등록해 실제 동작하도록 합니다. Java로 텔레그램 봇 만들기 – ReplyKeyboard 버튼 메뉴 구현 예제의 핵심 초기 단계입니다.
3-2. 익명 클래스로 TelegramLongPollingBot 구현
예제는 별도 파일이나 클래스를 만들지 않고 TelegramLongPollingBot를 익명 클래스로 정의해 설명을 단순화했습니다.
onUpdateReceived(Update update)– 들어오는 메시지와 이벤트를 한 건씩 처리합니다.getBotUsername()– 봇의 공개 이름을 반환합니다.getBotToken()– BotFather에서 발급받은 토큰을 반환합니다.
3-3. registerBot() & 초기 메시지
api.registerBot(bot);을 호출하면 봇이 텔레그램에 등록됩니다. 등록 직후 bot.execute(new SendMessage("","안녕하세요"));처럼 특정 chatId로 초기 메시지를 보낼 수 있습니다.
실전에서는 빈 문자열 대신 실제 chatId를 넣어야 합니다.
4. onUpdateReceived와 키보드 버튼 처리
4-1. 사용자가 보낸 메시지 확인
if (update.hasMessage() && update.getMessage().hasText()) {
if ("1".equals(update.getMessage().getText())) {
// 키보드 전송 로직
}
}
먼저 hasMessage()와 hasText()로 텍스트 메시지임을 확인한 뒤, 텍스트가 정확히 "1"일 때만 메뉴 키보드를 반환하도록 분기합니다. 이 방식은 불필요한 오탐을 줄여줍니다.
4-2. ReplyKeyboard 생성
long chatId = update.getMessage().getChatId();
List<KeyboardRow> keyboard = new ArrayList<>();
KeyboardRow row1 = new KeyboardRow();
KeyboardButton btn1 = new KeyboardButton("버튼1");
row1.add(btn1);
keyboard.add(row1);
SendMessage msg = new SendMessage()
.setChatId(chatId)
.setText("메뉴를 선택하세요")
.setReplyMarkup(new ReplyKeyboardMarkup(keyboard));
execute(msg);
KeyboardRow에 개별 버튼을 추가하고,- 여러 행을
List<KeyboardRow>로 묶어, - 마지막으로
ReplyKeyboardMarkup에 전달합니다.
이렇게 구성하면 사용자의 입력 창 아래에 “버튼1” 버튼이 표시되어, 클릭으로 간단히 메뉴 선택을 유도할 수 있습니다.
5. CallbackQuery 처리(버튼 클릭 후 데이터)
샘플 코드에는 InlineKeyboard 사용 시 필요한 CallbackQuery 처리 구조도 포함되어 있습니다. 이 부분은 ReplyKeyboard와는 별도로 더 정교한 상호작용을 구현할 때 유용합니다.
} else if (update.hasCallbackQuery()) {
long chatId = update.getCallbackQuery().getMessage().getChatId();
String callData = update.getCallbackQuery().getData();
long messageId = update.getCallbackQuery().getMessage().getMessageId();
System.out.println(" callData " + callData);
}
callData: 버튼 생성 시 설정한 콜백 데이터chatId,messageId: 특정 메시지를 수정하거나 응답할 때 사용
callData를 출력하는 정도지만, 실무에서는 이 값을 기준으로 메뉴 분기, 상태 관리, DB 저장 등 다양한 로직을 연결할 수 있습니다.
6. 마무리 정리
여기까지 Java와 TelegramBots API를 이용해 사용자가 보낸 메시지(“1”)에 반응해 ReplyKeyboard 버튼 메뉴를 표시하는 과정을 다뤘습니다. Java로 텔레그램 봇 만들기 – ReplyKeyboard 버튼 메뉴 구현 예제는 최소한의 코드로 바로 적용 가능한 패턴을 보여줍니다.
- Java로 텔레그램 봇을 만들 때는
TelegramLongPollingBot를 상속하거나 구현합니다. onUpdateReceived()안에서hasMessage(),hasCallbackQuery()로 이벤트를 분기합니다.ReplyKeyboardMarkup,KeyboardRow,KeyboardButton조합으로 간단한 메뉴를 구현합니다.- 좀 더 복잡한 상호작용은
InlineKeyboard와CallbackQuery로 처리할 수 있습니다.
이 예제를 바탕으로 버튼을 여러 개 추가하거나 단계형 메뉴(1차 → 2차 → 상세)를 구성하면 간단한 챗봇형 메뉴 시스템을 빠르게 구축할 수 있습니다. Java로 텔레그램 봇 만들기 – ReplyKeyboard 버튼 메뉴 구현 예제는 그런 확장을 염두에 둔 출발점으로 적합합니다.
© 2025 Java 텔레그램 봇 ReplyKeyboard 예제. 모든 권리 보유.
함께 보면 좋은 엔터프라이즈 사례
🚀 이 주제, 우리 서비스에 어떻게 적용할까요?
Java로 텔레그램 봇 만들기 – ReplyKeyboard 버튼 메뉴 구현 예제를 실제 서비스와 조직에 녹여보고 싶다면, 현재 아키텍처와 운영 방식을 한 번 점검해 보는 것부터 시작해 보세요. 팀 위키나 기술 블로그, 사내 스터디 주제로도 아주 좋습니다.
이 글이 도움이 됐다면, 비슷한 엔터프라이즈 사례 글들도 함께 살펴보면서 우리 조직에 맞는 운영 상용구를 정의해 보세요.
댓글
댓글 쓰기