Java, 텔레그램 메시지 전송하기

개요

  • 애플리케이션에서 로그 만큼이나 중요한 것이 특정 상황에 대한 알람(Alert) 기능이다. 가장 전통적인 수단은 이메일 또는 SMS로 알람 메시지를 전송하는 것이다. 최근 들어 별도의 인프라 구축 비용이나 과금이 없이 손쉽게 알람 메시지를 전송하는 수단은 텔레그램 메신저를 이용하는 것이다. 세계에서 가장 안전하며 무료라는 장점이 있다. 이번 글에서는 Java 애플리케이션에서 텔레그램 메시지를 전송하는 방법을 소개하고자 한다.

전제 조건

  • 애플리케이션에서 텔레그램으로 메시지를 전송하려면 봇(Bot)을 최소 1개 생성해야 한다.

  • 메시지를 전송할 특정 채팅방 또는 그룹방에 앞서 생성한 봇이 초대되어 있어야 한다.

  • 위 상태에서 에게 발급된 botToken과 해당 채팅방(그룹방)chatId를 획득하면 메시지를 전송할 준비가 완료된다.

텔레그램 봇 생성 및 토큰 발급

  • 새로운 봇을 생성하려면 모든 봇을 관리하는 BotFather를 친구 추가해야 한다. 텔레그램 클라이언트가 설치된 모바일 또는 데스크탑 웹 브라우저에서 https://telegram.me/botfather에 접속하고 SEND MESSAGE 버튼을 클릭하면 내 계정에 BotFather가 친구로 추가되어 대화할 수 있다.

  • BotFather와의 대화 창에서 /newbot을 입력하면 새로운 봇을 생성하기 위한 질문이 시작된다.

  • 가장 먼저 봇의 name을 묻는다. 실제 텔레그램에 노출되는 이름이므로 쉽게 인지할 수 있도록 적절히 입력한다. 그 다음 질문은 봇의 username을 묻는다. 시스템이 인지하기 위한 이름으로 작명은 자유롭지만 반드시 마지막이 Bot 또는 bot으로 끝나야 한다.

  • 생성한 봇의 name, username에 대한 답변이 완료되면 해당 봇을 위한 token이 발급된다. Bot API를 이용할 수 있는 토큰 정보이므로 잊지 말고 잘 기록해둔다.

  • 토큰 값을 이용하여 아래와 같이 봇 정보를 조회할 수 있다.
GET 'https://api.telegram.org/bot{token}/getMe'
HTTP/1.1 200 OK
{
    "ok": true,
    "result": {
        "id": 472939985,
        "is_bot": true,
        "first_name": "{name}",
        "username": "{username}"
    }
}

텔레그램 채팅방 ID 발급

  • 앞서 생성된 봇의 token을 확보했으니 이제 현재 봇과 대화중인 채팅방(chat.id)을 알아야 한다. 아래와 같이 API를 조회하여 확보할 수 있다. result[].message.chat.id 값이다.
GET 'https://api.telegram.org/bot{token}/getUpdates'
HTTP/1.1 200 OK
{
    "ok": true,
    "result": [
        {
            "update_id": 653055795,
            "message": {
                "message_id": 3,
                "from": {
                    "id": 59524576,
                    "is_bot": false,
                    "first_name": "json",
                    "last_name": "object",
                    "language_code": "ko"
                },
                "chat": {
                    "id": {chatId},
                    "first_name": "json",
                    "last_name": "object",
                    "type": "private"
                },
                "date": 1510808019,
                "text": "hello"
            }
        }
    ]
}

Java에서 텔레그램 메시지 전송하기

  • 이제 특정 채팅 창으로 메시지를 전송하기 위한 준비물인 botToken, chatId가 확보되었으니 Java 애플리케이션에서 텔레그램 메시지를 채팅방에 전송해보자. 가장 먼저 아래와 같이 라이브러리 종속성을 추가한다.
compile group: 'com.github.pengrad', name: 'java-telegram-bot-api', version: '3.4.0'
TelegramBot bot = new TelegramBot("{botToken}");
SendMessage request = new SendMessage({chatId}, "hello, world!")
        .parseMode(ParseMode.HTML)
        .disableWebPagePreview(true)
        .disableNotification(false)

SendResponse sendResponse = bot.execute(request);
boolean ok = sendResponse.isOk();
Message message = sendResponse.message();
  • 텔레그램에 전송할 메시지의 형식은 Markdown, HTML 2가지를 지원한다. 지원하는 태그는 매우 제한적인데 대표적으로 텍스트에 색상을 입힐 수 없다. 오로지 Bold, Italic, Link만 제공한다.
// Markdown
*bold* _italic_ [link](http://jsonobject.com)

// HTML
b>bold</b> <i>italic</i> <a href="http://jsonobject.com">link</a>
저작자 표시 비영리 동일 조건 변경 허락
신고