JAVA에서 텔레그램 봇 메세지 보내기

Kevin·2025년 3월 28일
0

JAVA

목록 보기
17/17
post-thumbnail

서론

이번에 텔레그램 API를 사용해서 특정 채팅방에 텔레그렘을 보내야 하는 일이 있었다.

해당 기능을 개발하면서, 국내에 생각보다 자료들이 많이 없었기에 이번 기회에 개발하면서 알게 된 것들을 공유 하고자 한다.


☝️ 원하는 채팅방에 메세지 보내기

텔레그램 메세지를 보내기 위해서는 텔레그램 봇을 먼저 생성 해야 한다.

텔레그램 봇을 만드는 과정은 다음 링크를 통해서 진행 하면 된다.

https://wikidocs.net/213846

텔레그램 봇을 만들었으면, 봇 토큰을 전달 받을 수 있다.

이제 해당 봇이 메세지를 보내게 될 채팅방에 봇을 초대 해준다.

이 때 봇에게 해당 채팅방에서의 admin 권한을 주어야 한다.

그 후 해당 채팅방에 아무 메세지를 보내고, 잠시 후 아래 주소로 접속 또는 API 요청을 보내자.


https://api.telegram.org/bot{봇ID}/getUpdates

위 {봇ID}에 해당하는 부분에 BotFather에게로부터 전달 받은 봇 토큰 문자열을 넣어주면 된다.

{
  "ok": true,
  "result": [
    {
      "update_id": 1234567,
      "message": {
        "message_id": 123,
        "from": {
          "id": 12345,
          "is_bot": false,
          "first_name": "lee",
          "last_name": "kevin",
          "username": "kevin99"
        },
        "chat": {
          "id": -12345676778,
          "title": "테스트 채팅방",
          "is_forum": true,
          "type": "supergroup"
        },

그렇다면 위와 같은 JSON 응답을 받을 수 있다.

이 때 chat Object의 id 값이 채팅방 ID이며, 복사 해두자.

채팅방이 여러 개인 경우에는 여러 chat Object가 출력 되기에 주의하자.


https://api.telegram.org/bot{봇ID}/sendMessage

위 주소로 API 요청을 보낼 때 body는 다음과 같다.

{
    "chat_id": "-1001XXX",
    "text": "안녕~"
}

이 때 JAVA에서 해당 API 요청을 보낼 때 일반적으로 RestTemplate 같은 라이브러리를 사용할텐데 그 때 아래와 같이 VO 객체를 생성해서 사용하면 된다.

@Getter
@Setter
@JsonInclude(JsonInclude.Include.NON_NULL)
public class TelegramMessage {

    @JsonProperty("chat_id")
    private String chatId;

    private String text;
}

✌️ 메세지에 버튼 추가하기

만약 메세지에 아래와 같이 버튼을 추가 하고 싶다면 어떻게 할 수 있을까?

기존 메세지 전송 API spec에서 reply_markupinline_keyboard 필드를 추가 해주면 된다.

{
  "chat_id": 123456789,
  "text": "메세지 내용",
  "reply_markup": {
	  "inline_keyboard": [
		    [
		      {
		        "text": "🔗게시글 링크 이동",
		        "url": "buttonUrl"
		      }
		    ]
		  ]
		}
}

reply_markup 필드는 메세지에 키보드나 버튼, 또는 기타 옵션을 함께 보내고 싶을 때 사용된다.

inline_keyboard 필드는 인라인 버튼들을 배열 형태로 구성하며, 인라인 버튼은 메시지 아래에 바로 표시 된다.

reply_markup 필드는 2차원 배열로 구성 되어있다. 각 내부 배열은 한 줄을 나타내고, 내부 배열의 각 객체는 버튼을 구성한다.

각 버튼은 text와 url로 구성되며, 이는 각각 버튼 안에 들어갈 텍스트와 버튼 클릭시 이동할 url로 구성된다.


🫰토픽(주제)에 메세지 보내기

텔레그램에는 토픽(주제)라는 개념이 있다.

이는 디스코드에도 있는 비슷한 개념인데, 하나의 채팅방(채널)에서 각 주제에 해당하는 여러 채팅방으로 나눌 수 있는 개념이다.

예를 들어 회사 채널이 있다고 하자.

회사 채널에는 아래와 같은 토픽들로 나누어진다고 하자.

  1. #공지 토픽
  2. #자유 토픽
  3. #개발 토픽

이 때 나는 공지사항 봇을 공지 토픽에 추가 하고 싶다면 어떻게 할까?

먼저 해당 토픽에 아무 메세지나 작성하고, 위 사진과 같이 링크를 복사한다.

그러면 https://t.me/c/1112223334/25/33 와 같은 주소가 복사 될 것이다.

이 때 긴 숫자 뒤에 있는 숫자인 25를 복사해둔다.

해당 숫자가 해당 토픽의 번호이다.

{
    "chat_id": "-1001XXX",
    "text": "안녕~",
    "message_thread_id": "25"
}

해당 번호를 message_thread_id 필드에 담아서 보내면 해당 토픽으로 메세지를 전송 시킬 수 있다.

profile
Hello, World! \n

0개의 댓글