[Python] 텔레그램으로 자동 Push 메시지 전송 구현 | 텔레그램봇 활용
목차
파이썬으로 텔레그램 메시지 전송 방법
이번 포스트에서는 “파이선 활용” 편이 될꺼 같다. 파이썬을 사용하여 자신의 폰에 깔려있는 텔레그램 앱이나 텔레그램 데스크탑으로 메시지를 전송하는 방법에 대해 소개를 해보려고 한다.
텔레그램은?
우리는 “자주” 카카오톡 같은 메시지 전송 앱을 사용한다. 스마트폰이 등장하기 전에는 “문자메시지(SMS)” 를 통해서 간단한 메시지를 주고 받는데 주로 사용하였다. 당시만 해도 SMS 1건당 20~30원 정도 요금이 부과 되었는데 내 친구중에는 문자메시지만 보냈는데도 통신요금만 10만원이 넘게 나오기도 했다. 그만큼 한때는 “문자메시지” 전성 시대 였다.
하지만 스마트폰이 등장하고 “카카오톡” 이 등장하면서 우리의 일상을 완전히 바꿔놨다. 메시지 전송은 비용이 들지 않으며 문자메시지 사용이 굳이 필요없다는 것. 현재는 관공서나 기업의 알림 용도로 SMS를 활용하고 있는 상태다.
카카오톡과 비슷한 메시지 전송앱이 등장했지만 결국 카카오톡만 국내에서 살아남고 라인의 경우에는 일본에서 살아남았다. 그 외에 국내에서 사용되는 앱은 전멸하다시피 했지만, 카카오톡이 한때 “보안이슈” 가 터지면서 그 대안으로 급부상한 앱이 있다. “텔레그램(Telegram)” 이다.
텔레그램은 카카오톡 보다 몇년 늦게 출시가 되었으나 전세계인들이 많이 사용하고 있는 “메시지 전송 앱”이다. 특히 텔레그램은 “보안”이 정말 뛰어난 것으로 알려지면서 최근에 “N번방” 사건 주동자들이 범죄 용도로 사용하면서 화제가 되기도 했다.
특히 텔레그램은 “오픈소스” 메시지 전송 앱이다. 개발자는 러시아 태생의 두로프 형제라고 알려져 있으며 다양한 OS와 웹 브라우저까지 지원하는 꽤나 “프로그래머” 스러운 메신저이다.
나도 “보안” 이슈가 터진 이후에는 자주 주고받는 관계(와이프, 친한 지인)는 텔레그램을 사용하고 있다. 그 외에는 카카오톡을 병행하여 사용중이다.
텔레그램의 장점
최근에 나는 텔레그램을 “대화” 용도 외에도 다른 용도로도 사용하고 있는 중이다. 그것은 “업무 자동화”다.
텔레그램은 API가 공개되어 있는데 이 API를 활용하면 업무 자동화가 진행되면서 진행 사항을 내 텔레그램앱으로 전송하는게 가능해진다.
물론 타 메신저인 카카오톡, 라인 등에서도 API를 제공하지만 텔레그램이 비교적 API를 활용하기가 간편하기 때문에 텔레그램을 사용하고 있는 중이다.
파이썬으로 텔레그램 메시지 전송해보기
그럼 파이썬으로 텔레그램 메시지를 전송하는 방법에 대해 알아보자.
텔레그램봇 생성
텔레그램은 “텔레그램봇” 이라는 기능을 제공한다. 챗봇같은 기능으로 봇에 명령을 내리면 그 기능을 수행해준다. 파이썬으로 메시지를 전송하려면 이 “텔레그램봇”을 생성하여 텔레그램 봇에 메시지를 전송해주면 된다. 텔레그램 봇을 생성해야 API 키를 얻을 수 있다.
따라서 텔레그램봇을 잘 활용하면 업무자동화 진행 과정을 전송하게 할 수도 있고 IoT 장치의 실시간 상태를 체크할 수도 있다. 이 외에도 날씨, 기온, 교통정보, 주가 정보 등을 전송하여 활용할 수 있다.
그럼 텔레그램 봇을 생성해보자.
먼저 내 모바일 텔레그램앱에서 “BotFather” 를 검색해본다.
그러면 위와 같이 “BotFather” 라는 게 나타날 것이다. 클릭하여 선택해준다.
텔레그램봇은 BotFather 를 통해 생성이 가능하다. 또한 봇을 생성해야 텔레그램 API를 이용할 수 있다. 위와 같이 메시지가 나온다면 BotFather로 접근을 한것이다. 하단의 “시작” 버튼을 누른다.
BotFather 에서는 봇과 관련한 여러 명령어들이 있다. 일단 여기서는 봇을 새로 생성해야 하기 때문에 “/newbot” 을 입력하거나 선택해준다.
그럼 봇을 생성하기 위한 절차가 진행된다. 다음으로 봇의 이름을 입력한다. 봇 이름은 한글/영문 상관없이 자유롭게 입력하면 된다.
나의 경우에는 “코드도사봇” 이라고 한글로 입력하였다. 그 다음에는 봇의 계정이름을 입력하라고 묻는다. 이때는 반드시 영문으로 입력해야 한다. 계정으로 이름은 마지막에 “bot” 이 반드시 붙어야 한다. 나는 “codedosa_bot” 이라고 입력하였다.
그러면 위와 같이 봇 생성이 완료된다. 만약 계정 이름이 겹치고 관련 메시지가 뜨니 다시 유니크한 이름을 입력해야 한다. 그러면 정상적으로 봇이 생성이 될 것이다.
봇 생성이 완료되면 위 그림에서 빨간 네모로 표시된 “HTTP API” 키가 발급이 된다. 이 키를 잘 보관하고 있다가 파이썬으로 구현할때 사용하면 된다. (키는 보안에 유의해야 한다. 노출이 되지 않도록 주의할것)
파이썬으로 봇에 텔레그램 메시지 전송
봇 생성이 완료되었으면 이제 파이썬으로 텔레그램 메시지를 전송해보도록 하자. 먼저 파이썬 개발 환경이 구축이 안되어 있다면 Windows의 경우 “아나콘다” 같은 패키지를 설치한다. (아래 링크 참조)
리눅스의 경우에는 이미 파이썬이 설치가 되어 있기 때문에 별도로 파이썬을 설치할 필요는 없을 것이다. 참고로 파이썬은 3.8 이상의 최신 버전을 사용하는것을 권장한다.
일단 내 계정의 고유 chat_id 를 얻어와야 한다. 내 텔레그램봇을 검색하여 아무 메시지나 입력해준다. 내 텔레그램봇과의 대화 내역이 있어야 chat_id 를 얻어오는게 가능하다.
텔레그램앱에서 검색으로 “@내봇” 을 검색해본다.
좀전에 생성한 “코드도사봇”이 검색이 된다. 클릭하여 들어간다.
그런 다음에 시작하여 아무 메시지나 날린다. 이 상태가 반드시 진행되어야 chat_id 를 얻어올 수 있다.
import telegram TELEGRAM_TOKEN = '생성한 봇 HTTP API 토큰' bot = telegram.Bot(token=TELEGRAM_TOKEN) updates = bot.getUpdates() for update in updates: print(update.message)
위 소스는 내 텔레그램의 chat id 를 확인하는 소스이다. 위의 소스에서 봇 HTTP API 키를 넣고 실행을 시켜준다.
그런데 위와 같이 에러가 발생할 수 있다. 그 이유는 telegram 이라는 파이썬 모듈이 설치되어 있지 않기 때문이다.
pip install python-telegram-bot
그럼 위의 명령어로 telegram 모듈을 설치해주면 된다. 그런 다음에 다시 실행해보자.
그러면 생성한 텔레그램봇의 메시지 전송 내역이 위와 같이 출력이 된다. 여기서 id 가 바로 내 텔레그램의 chat id 이다.
그런 다음에 작성해 아래 소스로 실제로 내 텔레그램 봇에 메시지를 전송해보자.
#-*- coding: utf-8 -*- import argparse import requests BOT_TOKEN = "내 HTTP Bot 토큰" CHAT_ID = "내 Chat ID" def send_message(message): response = requests.post( 'https://api.telegram.org/bot%s/%s' % (BOT_TOKEN, 'sendMessage'), data={ "chat_id": CHAT_ID, "text": message, } ) #if response.status_code > 200: #print "Error:", response def main(): parser = argparse.ArgumentParser("Send messages to my phone") parser.add_argument("messages", nargs="+") args = parser.parse_args() for message in args.messages: send_message(message) if __name__ == "__main__": main()
위 소스는 실제 텔레그램봇에 메시지를 전송하는 소스이다. 위 소스를 python send.py “메시지” 형태로 실행해도 되고 send_message( ) 함수에 메시지를 호출해줘도 된다.
예시로 “안녕” 이라는 메시지를 보내봤다. 텔레그램 앱을 확인해 보자.
텔레그램 봇에 좀전에 실행한 파이썬 코드로 보낸 메시지가 보이는 것을 알 수 있다. chat id 의 경우에는 나만의 고유 아이디 이므로 이후에 여러 봇을 생성하여 HTTP 봇 토큰만 가져와서 활용하면 된다.
이후에는 파이썬으로 자신의 원하는 코드를 구현하여 활용하면 된다. 나의 경우에는 파이썬으로 업무 자동화의 진행 과정을 텔레그램 메시지로 받아보고 있는 중이다.