본문 바로가기
Programming/Spring

[Spring] 텔레그램 봇(Telegram Bot) 만들기 #1 - 텔레그램 봇 생성

by NAIMJAE 2024. 12. 19.
728x90

#1 텔레그램 봇 생성 & 스프링부트 프로젝트 연결

 


Ⅰ 텔레그램 봇이란?

텔레그램 봇은 사용자가 텔레그램에서 자동화된 작업을 수행할 수 있도록 설계된 프로그램으로  특정 작업을 자동으로 처리하거나, 사용자와 상호작용하며 유용한 정보를 제공하는 등의 기능을 제공합니다.

 

다음과 같은 작업을 텔레그램 봇으로 구현할 수 있습니다.

  • 채팅방에서 사용자 메시지 분석 및 응답
  • 특정 시간에 자동으로 알림 전송
  • 외부 API와 연동하여 실시간 데이터를 제공 (예: 날씨 정보, 환율 조회 등)
  • 사용자 맞춤형 기능 제공 (예: 개인 일정 관리, 뉴스 알림)

텔레그램 봇의 주요 기능

텔레그램 봇은 여러 기능을 제공하며, 이 중 가장 자주 활용되는 기능은 다음과 같습니다.

 

1. 자동화된 메시지 전송

  - 사용자가 특정 명령어를 입력하면, 메시지를 응답하거나 데이터를 전송할 수 있음

 

2. 사용자와의 실시간 상호작용

  -  버튼, 키보드, 멀티미디어 파일 등을 활용해 사용자와의 상호작용을 극대화할 수 있음

 

3. 외부 API와 연동

  -  REST API 등을 사용해 외부 데이터와 연동할 수 있음

 

4. 스케줄링 및 이벤트 알림

  -  특정 시간이나 조건에 맞춰 메시지를 전송할 수 있음

 

5. 멀티미디어 파일 전송

  -  이미지, 동영상, 파일 등을 전송하거나 사용자로부터 받을 수 있음

 

6. 그룹 및 채널 관리

  -  텔레그램 봇은 그룹 채팅이나 채널에서 관리자 역할을 수행할 수 있음


Ⅱ 텔레그램 봇 생성

1. 텔레그램에서 BotFather를 검색 후 입장

 

2. /newbot 명령어 입력

 

3. 봇 이름과 사용자 이름 생성

 

"Alright, a new bot. How are we going to call it? Please choose a name for your bot."
(새 봇을 만들겠습니다. 이 봇의 이름을 무엇으로 할까요? 봇의 이름을 정해주세요.)
"Good. Now let's choose a username for your bot. It must end in bot. Like this, for example:TetrisBot or tetris_bot."
(이제 이 봇의 사용자 이름을 정해야 합니다. 사용자 이름은 반드시 bot 으로 끝나야 합니다. ex) TetrisBot, tetris_bot)

 

봇의 이름과 사용자 이름을 설정하면 되는데 서로 이름이 같아도 되고 달라도 됩니다.

하지만 봇의 사용자 이름은 반드시 bot으로 끝나야하는 규칙을 가지고 있습니다.

 

4. 봇 생성 완료 후 API 토큰값 확인

 

성공적으로 텔레그램 봇을 생성하면 API 토큰값을 알려줍니다.
이 API 토큰값은 텔레그램 봇과 통신하기 위해 사용되는 값입니다.

※ API 토큰값은 노출되지 않게 주의해주세요.

 

이제 새로 생성한 텔래그램 봇 채팅방에 입장할 수 있습니다.
제공된 링크를 클릭하거나 텔레그램 검색을 통해 생성된 봇의 채팅방에 입장하면 됩니다.

 

5. /start 명령어로 봇 실행

 

/start 명령어를 입력해줍니다.

 

6. 봇 정상 작동 확인


생성한 텔레그램 봇이 정상 작동하는지 확인하기 위해 채팅을 보냅니다.

그리고 주소창에 "https://api.telegram.org/bot[API토큰값]/getUpdates" 를 입력합니다.

https://api.telegram.org/bot[API토큰값]/getUpdates

 


위 그림처럼 {"ok":true, ... }  가 보인다면 텔레그램 봇이 정상 작동 중입니다.
채팅 내용은 JSON형식으로 확인 가능하며, 방금 보낸 채팅 내용도 확인 가능합니다.


Ⅲ 스프링 부트 프로젝트와 텔레그램 봇 연결

0. 작업 환경

IDE : vscode
프레임워크 : Spring Boot 3.3.6
프로그래밍 언어 : Java 17
빌드 도구 : Gradle

 

1. 새로운 스프링 부트 프로젝트 생성

 

새로운 스프링 부트 프로젝트를 생성해줍니다.

저는 " naexamplebot " 이라는 이름으로 프로젝트를 생성했습니다.

 

2. 필요한 의존성 추가

 

기본적인 Dependency와 Telegram 라이브러리를 추가해줍니다.

Telegram - implementation 'org.telegram:telegrambots-spring-boot-starter:6.1.0'

 

3. TelegramBot 클래스 생성 및 구현

src
 ─ main
         └─ java/com/naexamplebot
                 ─ bot
                         └─ TelegramBot.java

 

본격적으로 텔레그램 봇과 연결해보도록 하겠습니다.

bot 디렉토리 생성후 TelegramBot 클래스를 생성합니다.

TelegramBot 클래스 에서 텔레그램 봇과 관련된 모든 상호작용 코드를 다루게 됩니다.

 

TelegramBot 클래스를 생성한 후 TelegramLongPollingBot 을 상속받습니다.

TelegramLongPollingBot 클래스는 텔레그램 봇 API에서 제공하는 기본 클래스입니다.

봇의 필수 정보를 설정하고 메세지 이벤트를 처리하는 역할을 합니다.

package com.naexamplebot.bot;
import org.springframework.stereotype.Component;
import org.telegram.telegrambots.bots.TelegramLongPollingBot;
import org.telegram.telegrambots.meta.api.objects.Update;

@Component
public class TelegramBot extends TelegramLongPollingBot {
    // 봇의 이름 반환
    @Override
    public String getBotUsername() {
        return "botName";
    }

    // 봇의 토큰 반환
    @Override
    public String getBotToken() {
        return "botToken";
    }

    // 봇이 메시지를 받았을 때 실행되는 메서드
    @Override
    public void onUpdateReceived(Update update) {
        System.out.println("update: " + update);
    }
}

 

4. 프로젝트와 텔레그램 봇 연결

이제 프로젝트와 텔레그램 봇을 연결할 차례입니다.

텔레그램 봇과 연결하기 위해서는 API 토큰값과 봇의 이름을 @Override 메서드에 명시해줘야 합니다.

직접 소스 코드에 토큰 값을 넣는 대신, 보안을 위해 application.yml 파일을 사용해 관리하겠습니다.

 

※  API 토큰은 외부에 노출되면 보안에 문제가 발생할 수 있어, 환경 변수로 관리하는 것이 좋습니다.

 

application.yml 파일에 이미지와 같이 키와 값을 추가합니다.

BOT_TOKEN_KEY: 'botFather에서 발급 받은 API 토큰값'
BOT_NAME: 'botFather에서 생성한 봇의 이름'

 

이제 TelegramBot 클래스로 돌아와 application.yml 에서 정의한 토큰값과 이름을 가져옵니다.

package com.naexamplebot.bot;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.telegram.telegrambots.bots.TelegramLongPollingBot;
import org.telegram.telegrambots.meta.api.objects.Update;

@Component
public class TelegramBot extends TelegramLongPollingBot {

    @Value("${BOT_TOKEN_KEY}")
    private String botToken;

    @Value("${BOT_NAME}")
    private String botName;

    @Override
    public String getBotUsername() {
        return botName;
    }

    @Override
    public String getBotToken() {
        return botToken;
    }

    @Override
    public void onUpdateReceived(Update update) {
        System.out.println("update: " + update);
    }
}

 

5. 텔레그램 봇 설정

마지막으로 텔레그램 봇 서버를 실행시키기 위한 설정 파일을 생성합니다.

src
 ─ main
         └─ java/com/naexamplebot
                 ─ bot
                     └─ TelegramBot.java
                 ─ config
                         └─ TelegramBotConfig.java

 

config 디렉토리에  TelegramBotConfig 클래스를 생성합니다.

package com.naexamplebot.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.telegram.telegrambots.bots.DefaultBotOptions;
import org.telegram.telegrambots.meta.TelegramBotsApi;
import org.telegram.telegrambots.meta.exceptions.TelegramApiException;
import org.telegram.telegrambots.updatesreceivers.DefaultBotSession;
import com.naexamplebot.bot.TelegramBot;
import lombok.Getter;

@Configuration
@Getter
public class TelegramBotConfig {

    // Telegram 봇의 네트워크 설정 및 옵션
    @Bean
    public DefaultBotOptions defaultBotOptions() {
        return new DefaultBotOptions();
    }

    // TelegramBotsApi 빈을 통해 봇 API와 연결
    @Bean
    public TelegramBotsApi telegramBotsApi(TelegramBot bot) throws TelegramApiException {
        TelegramBotsApi telegramBotsApi = new TelegramBotsApi(DefaultBotSession.class);
        telegramBotsApi.registerBot(bot); // Telegram 봇 등록
        return telegramBotsApi;
    }
}

 

6. 프로젝트 실행

이제 프로젝트와 텔레그램 봇 연결이 완료되었습니다.

프로젝트를 실행한 후 텔레그램 봇과 채팅을 테스트해봅니다.

 

 

위 사진과 같이 콘솔에 방금 보낸 채팅이 뜬다면 성공입니다.


지금까지 텔레그램 봇을 생성하고 Spring Boot로 간단한 봇 서버를 구축해봤습니다.

 

2편에서는 텔레그램 봇에 더 다양한 기능을 넣어보겠습니다. 😁