코딩스토리/개발관련

파이썬으로 텔레그램 메세지 보내기

Tech&Fin 2022. 1. 17. 17:14
반응형

예전에 파이썬으로 라인라이트 메신저에 메세지를 보내는 방법에 대해서 살펴본 적이 있는데요. 라인라이트 메신저는 가볍고 텍스트 메시지를 수신하는데는 아주 훌륭한 프로그램입니다.

 

하지만 화려한 그래픽의 이모티콘이나 복잡한 형식의 메세지를 받는데에는 효율적이지 못하거나 지원이 되지 않는 부분이 있습니다. 그래서 다소 복잡한 메세지를 전송하거나 메세지를 주고 받는 챗봇의 역할을 하는 기능을 사용하려면 텔레그램을 이용하는 것이 좋습니다.

 

텔레그램으로 메세지를 보내는 기능을 구현하는 것은 라인 메신저를 보내는 기능을 구현하는 만큼 간편하긴 하지만 조금 다르게 텔레그램 봇을 만드는 과정부터 시작 됩니다.

 

오늘은 텔레그램 봇을 만들고 파이썬을 이용하여 메세지를 보내는 방법에 대해서 살펴 보도록 하겠습니다.

 

 

목차 - 클릭하면 이동합니다.

     

    텔레그램 설치

    텔레그램 다운 및 설치

    텔레그램은 휴대폰에서 사용하는 모바일 버전과 PC에서 사용할 수 있는 버전이 모두 제공됩니다. 메세지를 언제 어디서든 편하게 확인하기 위해서는 모바일 버전은 필수로 설치하는 것이 좋고 봇 생성이나 집에서 PC를 하는 중에 메세지를 받기 위해서는 PC 버전을 받는 것도 좋습니다.

     

    오늘 봇을 생성하는 방법은 PC의 텔레그램을 이용할 예정이나 모바일에서도 동일하게 텔레그램 봇을 생성할 수 있다는 부분 참고 부탁 드리겠습니다.

     

    혹시 가벼운 라인 라이트 메신저를 이용하고 싶으신 분들은 아래 링크를 클릭하여 지난 포스팅을 참고하시면 좋을 것 같습니다.

     

    2021.11.10 - [코딩스토리/개발관련] - 파이썬을 이용하여 라인 라이트(Line Lite) 메신저로 메세지 발송하기

     

    파이썬을 이용하여 라인 라이트(Line Lite) 메신저로 메세지 발송하기

    비트코인 자동매매 프로그램을 만들다 보면 필요한 시점에 알림을 받고 싶은 경우가 있는데요. 이럴 때 라인 라이트 메신저를 이용하면 파이썬을 이용하여 메세지를 보낼 수 있습니다. 이번 시

    technfin.tistory.com

     

    먼저 텔레그램 PC용 버전을 설치하기 위해 아래 링크를 클릭하여 윈도우 또는 Mac 중 사용중인 OS 타입으로 설치합니다. 설치는 Next를 계속 누르면 어렵지 않게 완료할 수 있습니다.

     

    https://telegram.org/

     

    텔레그램 – 새로운 메시징의 시대

    빠르고. 안전하며. 강력함

    telegram.org

     

    설치를 완료하면 모바일 텔레그램에서 스캔 또는 전화번호를 이용해 로그인을 합니다.

     

    텔레그램 봇 생성 및 메세지 발송하기

    텔레그램 봇 생성하기

    로그인을 한 후에 상단에서 botfather를 검색합니다. @BotFather와 유사한 같은 프로필 사진을 가진 것들이 있으니 유의하시어 정확한 이름의 ① BotFather를 선택해 줍니다. 그 다음 ② 시작 버튼을 클릭하여 대화방에 입장합니다.

     

    텔레그램에서 봇에 특정 명령을 하기 위해서는 슬래쉬(/)를 이용합니다. 대화방에 입장하면서 /start 명령어가 자동으로 실행되었지만 다시 /start라고 입력하면 동일한 가이드 메뉴를 응답 받을 수 있습니다.

     

    여러가지 실행할 수 있는 명령어가 있는데 이 중에서 새로운 봇을 생성하기 위해 /newbot을 입력하여 새로운 봇을 생성해 보도록 하겠습니다.

     

    ① /newbot 을 입력합니다.

    ② Bot의 이름을 정합니다. 저는 Tech&Fin으로 하겠습니다. 자유롭게 정하시면 됩니다.

    ③ Bot의 ID를 정합니다. 특수문자는 언더스코어(_)가 입력 가능하며 끝은 반드시 bot으로 끝나야 합니다.

    ④ Bot이 생성되면 Token이 발급됩니다.

     

    채팅 ID 얻어오기

    조금전에 생성한 Bot ID를 검색하여 채팅방에 입장합니다. 자동으로 /start 명령어가 입력되지만 방금 생성한 봇에는 해당 명령어를 수행하는 기능이 없어 아무 반응이 없습니다.

     

    텔레그램으로 메세지를 보내기 위해서는 한 가지 정보가 더 필요합니다. 바로 채팅 ID입니다. 채팅 ID를 얻어오는 방법은 여러가지 방법이 있지만 웹브라우저에서 api를 호출하여 얻어오는 방법이 제일 간편합니다.

     

    https://api.telegram.org/bot토큰/getUpdates

    먼저 아까 BotFather로 부터 발급받은 토큰을 위의 주소 bot뒤에 붙여 넣고 웹브라우져에 호출하면 아래와 같은 결과가 나오게 됩니다.

     

    {"ok":true,"result":[]}

     

    채팅 ID를 얻어오기 위해서는 먼저 봇과 대화내역이 존재해야 합니다. 그래서 아무 메세지나 입력하여 봇과의 대화를 진행합니다.

     

    https://api.telegram.org/bot토큰/getUpdates

    그 다음 다시 브라우저에 getUpdates API를 호출하면 이번에는 대화 내용이 있기 때문에 메세지에 대한 Update 내역이 불러와 집니다. 여기서 id가 채팅 ID가 됩니다.

     

    메세지 발송하기

    파이썬으로 텔레그램을 보내기 위해서는 python-telegram-bot 모듈이 필요합니다. pip또는 파이참에서 해당 모듈을 설치 합니다.

     

    반응형
    import telegram
    
    telegram_token = 토큰
    telegram_id = Chat ID
    
    # -----------------------------------------------------------------------------
    # - Name : send_telegram_msg
    # - Desc : 텔레그램 메세지 전송
    # - Input
    #   1) message : 메세지
    # -----------------------------------------------------------------------------
    def send_telegram_message(message):
        try:
            # 텔레그램 메세지 발송
            bot = telegram.Bot(telegram_token)
            res = bot.sendMessage(chat_id=telegram_id, text=message)
    
            return res
    
        # ----------------------------------------
        # 모든 함수의 공통 부분(Exception 처리)
        # ----------------------------------------
        except Exception:
            raise

    기존 공통 모듈에 위의 부분을 추가합니다.

     

    import os
    import sys
    import logging
    import traceback
    
    # 공통 모듈 Import
    sys.path.append(os.path.dirname(os.path.dirname(__file__)))
    from module import upbit
    
    
    # -----------------------------------------------------------------------------
    # - Name : main
    # - Desc : 메인
    # -----------------------------------------------------------------------------
    if __name__ == '__main__':
    
        # noinspection PyBroadException
        try:
            upbit.send_telegram_message('테스트 메세지 입니다!')
    
        except KeyboardInterrupt:
            logging.error("KeyboardInterrupt Exception 발생!")
            logging.error(traceback.format_exc())
            sys.exit(-100)
    
        except Exception:
            logging.error("Exception 발생!")
            logging.error(traceback.format_exc())
            sys.exit(-200)

    위와 같이 upbit.send_telegram_message(메세지)를 이용해 원하는 로직에서 메세지를 보낼 수 있습니다.

     

    프로그램을 수행하면 위와 같이 메세지가 도착합니다.

     

    마치며

    텔레그램은 메세지를 화려하고 예쁘게 꾸밀수도 있고 이미지 등을 보낼 수도 있어서 비트코인 자동매매 프로그램에서 더 디자인이 좋은 메세지를 보내려면 라인 메세지 대신 텔레그램을 이용하면 더 좋습니다.

     

    또한 나중에 알아볼 대화형 봇을 만들 수 있어서 실시간으로 비트코인 자동매매 프로그래을 제어하는데 사용할 수도 있습니다. 이 부분에 대해서는 추후 다시 살펴 보도록 하겠습니다.

     

    블로그를 구독하면 소식을 조금 더 빨리 받아보실 수 있습니다. 감사합니다.

    반응형