파이썬으로 텔레그램 메시지 자동 발송하기
파이썬으로 텔레그램 메시지 자동 발송하기 (완성 코드 공개)
"주식 데이터 수집 완료되면 알림 받고 싶다", "파이썬 스크립트가 오류 없이 잘 실행됐는지 확인하고 싶다", "매일 아침 날씨·환율 요약을 자동으로 받고 싶다"…
텔레그램 봇(Bot)을 활용하면 파이썬 코드 몇 줄만으로 이 모든 것이 가능합니다. 이전 게시글에서 소개한 카카오톡 자동 발송보다 API 설정이 훨씬 간단하고, 메시지뿐 아니라 이미지·파일·표 형식 메시지까지 무료로 발송할 수 있습니다. 텔레그램 앱만 설치되어 있으면 바로 시작할 수 있습니다.
1단계: 텔레그램 봇 만들기 (최초 1회만)
텔레그램 봇은 텔레그램 앱 안에서 직접 만들 수 있습니다. 아래 순서대로 진행하세요.
- 텔레그램 앱에서 검색창에 @BotFather를 검색합니다.
- BotFather 채팅창에서 /newbot을 입력합니다.
- 봇 이름 입력(예: "업무자동화 알림") → 봇 사용자명 입력(영문, 반드시 bot으로 끝나야 함, 예: mywork_alert_bot)
- 생성 완료 메시지와 함께 HTTP API 토큰이 발급됩니다. 이 값을 복사해 둡니다.
💡 Chat ID 확인 방법: 토큰 발급 후 텔레그램에서 방금 만든 봇을 검색해 /start를 입력합니다. 그 다음 브라우저 주소창에 아래 URL을 입력하면 JSON 응답에서 "chat" → "id" 값을 확인할 수 있습니다. 이것이 코드에서 사용할 Chat ID입니다.
https://api.telegram.org/bot여기에_토큰입력/getUpdates
2단계: 준비물 설치
터미널(윈도우: CMD 또는 파워셸)을 열고 아래 명령어를 실행하세요:
pip install requests
텔레그램 봇 API는 HTTP 요청 방식으로 동작하기 때문에 requests 라이브러리만 있으면 됩니다. 이미 설치되어 있다면 넘어가도 됩니다.
3단계: 완성 코드
아래 코드를 그대로 복사해서 메모장에 붙여넣고, telegram_msg.py로 저장하세요. 저장 시 파일 형식은 "모든 파일", 인코딩은 UTF-8로 설정합니다.
import requests
from pathlib import Path
# ① 설정
BOT_TOKEN = "여기에_봇_토큰_입력" # ← 1단계에서 발급받은 토큰
CHAT_ID = "여기에_Chat_ID_입력" # ← 1단계에서 확인한 Chat ID
BASE_URL = f"https://api.telegram.org/bot{BOT_TOKEN}"
# ② 텍스트 메시지 발송 함수
def send_message(text, parse_mode="HTML"):
url = f"{BASE_URL}/sendMessage"
data = {
"chat_id": CHAT_ID,
"text": text,
"parse_mode": parse_mode, # HTML 또는 Markdown 서식 지원
}
res = requests.post(url, data=data)
if res.status_code == 200:
print(f" ✔ 메시지 발송 완료")
else:
print(f" ✘ 발송 실패: {res.status_code} / {res.text}")
# ③ 이미지 파일 발송 함수
def send_photo(image_path, caption=""):
url = f"{BASE_URL}/sendPhoto"
with open(image_path, "rb") as img:
res = requests.post(url, data={"chat_id": CHAT_ID, "caption": caption},
files={"photo": img})
if res.status_code == 200:
print(f" ✔ 이미지 발송 완료: {Path(image_path).name}")
else:
print(f" ✘ 발송 실패: {res.status_code} / {res.text}")
# ④ 파일 발송 함수
def send_document(file_path, caption=""):
url = f"{BASE_URL}/sendDocument"
with open(file_path, "rb") as f:
res = requests.post(url, data={"chat_id": CHAT_ID, "caption": caption},
files={"document": f})
if res.status_code == 200:
print(f" ✔ 파일 발송 완료: {Path(file_path).name}")
else:
print(f" ✘ 발송 실패: {res.status_code} / {res.text}")
# ⑤ 실행: 원하는 발송 함수 호출
# 텍스트 메시지 (HTML 서식 지원)
send_message("""📊 오늘의 업무 자동화 완료 알림
✅ 주식·환율 데이터 수집 완료
✅ 엑셀 보고서 차트 저장 완료
✅ 거래처 이메일 발송 완료
⏰ 완료 시각: 오후 3시 42분""")
# 이미지 발송 (차트 이미지 등)
# send_photo(r"C:\Users\내이름\Desktop\매출차트.png", caption="5월 매출 차트")
# 파일 발송 (엑셀, PDF 등)
# send_document(r"C:\Users\내이름\Desktop\보고서.xlsx", caption="5월 업무 보고서")
print("\n✅ 완료! 텔레그램으로 메시지를 발송했습니다.")
4단계: 실행 방법
- 코드 ① 설정의
BOT_TOKEN과CHAT_ID에 각각 발급받은 값을 입력합니다. - 코드 ⑤ 실행의
send_message()안 내용을 원하는 메시지로 수정합니다. - 이미지나 파일도 함께 보내고 싶다면 해당 줄의
#을 삭제하고 파일 경로를 입력합니다. - 터미널에서 아래 명령어로 실행합니다:
python telegram_msg.py
정상 실행 시 터미널에 이렇게 출력됩니다:
✔ 메시지 발송 완료 ✅ 완료! 텔레그램으로 메시지를 발송했습니다.
텔레그램 앱을 열면 만들어둔 봇 채팅방에 메시지가 도착해 있습니다. 굵은 글씨(<b>), 기울임(<i>), 코드 형식(<code>) 같은 HTML 서식도 그대로 렌더링됩니다.
5단계: 자주 발생하는 오류와 해결법
오류 1: 401 Unauthorized
봇 토큰이 잘못 입력된 경우입니다. BotFather에서 발급받은 토큰을 다시 확인하세요. 토큰 앞뒤에 공백이 없는지도 확인합니다.
오류 2: 400 Bad Request — chat not found
Chat ID가 잘못 입력된 경우입니다. 봇에게 /start 메시지를 보낸 후 getUpdates URL을 다시 호출해 Chat ID를 재확인하세요. /start를 보내지 않으면 Chat ID가 생성되지 않습니다.
오류 3: 메시지는 가는데 서식(굵기, 색상)이 적용 안 됨
parse_mode가 제대로 설정되어 있는지 확인하세요. HTML 서식을 사용하려면 parse_mode="HTML"이 반드시 포함되어야 합니다. 마크다운 방식을 선호하면 parse_mode="Markdown"으로 변경하고 *굵은글씨*, `코드` 형식으로 작성합니다.
응용: 파이썬 스크립트 오류 발생 시 자동 알림 받기
장시간 실행되는 자동화 스크립트에 텔레그램 알림을 추가하면, 오류가 발생했을 때 즉시 알림을 받을 수 있습니다. 기존 스크립트의 try/except 구문에 아래처럼 추가하면 됩니다.
from telegram_msg import send_message
import traceback
try:
# 기존 자동화 코드
pass
except Exception as e:
error_msg = f"""🚨 스크립트 오류 발생!
❌ 오류 내용: {str(e)}
📄 상세:
{traceback.format_exc()[:500]}"""
send_message(error_msg)
raise
💡 이전 게시글과 결합하면: 주식·환율 자동 수집 편의 스크립트 마지막에 이 코드를 붙이면 매일 장 마감 후 수집 결과와 차트 이미지를 텔레그램으로 자동 수신할 수 있습니다. 차트 자동 저장 편과 결합하면 차트 이미지 파일을 텔레그램으로 바로 발송하는 것도 가능합니다.
핵심 요약
- 준비물: 텔레그램 앱 + BotFather에서 봇 생성 + pip install requests
- 설정: BOT_TOKEN과 CHAT_ID 입력 후 메시지 내용 수정
- 실행: 터미널에서 python telegram_msg.py 입력
- 결과: 텍스트·이미지·파일 발송 모두 지원, HTML 서식 그대로 렌더링
이 코드를 응용하면 특정 조건(주가 급등락, 스크립트 오류)이 충족될 때만 알림을 발송하는 조건부 알림 시스템도 만들 수 있습니다.
