텔레그램은 강력한 API를 제공하여 자동화, 알림 시스템, 챗봇 등 다양한 서비스를 구축할 수 있습니다. 이 글에서는 텔레그램 API의 종류와 사용 방법을 단계별로 정리합니다.
텔레그램 API의 두 가지 종류
텔레그램은 목적에 따라 두 가지 API를 제공합니다.
| 구분 | Bot API | Telegram API (MTProto) |
|---|---|---|
| 용도 | 봇 개발 | 사용자 클라이언트 개발 |
| 인증 | Bot Token | api_id + api_hash |
| 난이도 | 쉬움 | 어려움 |
| 권한 | 봇 기능만 | 전체 기능 |
| 추천 대상 | 대부분의 자동화 작업 | 커스텀 클라이언트 개발 |
대부분의 자동화 작업(알림 전송, 챗봇, 채널 관리 등)은 Bot API만으로 충분합니다.
1. Bot API 시작하기
1.1 봇 생성 및 토큰 발급
- 텔레그램에서 @BotFather 검색 후 대화 시작
/newbot명령어 입력- 봇 이름 입력 (예: “My Notification Bot”)
- 봇 username 입력 (반드시
bot으로 끝나야 함)- 예:
my_notification_bot,jackerlab_alert_bot
- 예:
- 발급된 API 토큰 저장
Use this token to access the HTTP API:
123456789:ABCdefGHIjklMNOpqrsTUVwxyz
⚠️ 주의: 토큰은 절대 외부에 노출하지 마세요. 노출된 경우 BotFather에서
/revoke로 재발급 받으세요.
1.2 봇 설정 (선택사항)
BotFather에서 추가 설정이 가능합니다:
/setdescription– 봇 설명 설정/setabouttext– 봇 소개 설정/setuserpic– 봇 프로필 사진 설정/setcommands– 명령어 목록 설정
2. Bot API 기본 사용법
2.1 API 엔드포인트 구조
모든 Bot API 요청은 다음 형식을 따릅니다:
https://api.telegram.org/bot<TOKEN>/<METHOD>
예시:
https://api.telegram.org/bot123456789:ABCdef.../sendMessage
2.2 Chat ID 확인하기
메시지를 보내려면 대상의 Chat ID가 필요합니다.
방법 1: getUpdates 사용
봇에게 아무 메시지나 보낸 후:
curl "https://api.telegram.org/bot<TOKEN>/getUpdates"
응답에서 chat.id 값을 확인합니다:
{
"result": [{
"message": {
"chat": {
"id": 123456789,
"type": "private"
}
}
}]
}
방법 2: 채널/그룹의 경우
- 채널:
@채널username또는-100으로 시작하는 숫자 ID - 그룹: 봇을 그룹에 추가 후 getUpdates로 확인
2.3 메시지 전송하기
기본 텍스트 메시지
curl -X POST "https://api.telegram.org/bot<TOKEN>/sendMessage" \
-H "Content-Type: application/json" \
-d '{
"chat_id": 123456789,
"text": "안녕하세요! 첫 번째 메시지입니다."
}'
마크다운 포맷 사용
curl -X POST "https://api.telegram.org/bot<TOKEN>/sendMessage" \
-H "Content-Type: application/json" \
-d '{
"chat_id": 123456789,
"text": "*굵게* _기울임_ `코드` [링크](https://example.com)",
"parse_mode": "Markdown"
}'
HTML 포맷 사용
curl -X POST "https://api.telegram.org/bot<TOKEN>/sendMessage" \
-H "Content-Type: application/json" \
-d '{
"chat_id": 123456789,
"text": "<b>굵게</b> <i>기울임</i> <code>코드</code>",
"parse_mode": "HTML"
}'
3. 주요 Bot API 메서드
3.1 메시지 관련
| 메서드 | 설명 |
|---|---|
sendMessage | 텍스트 메시지 전송 |
sendPhoto | 사진 전송 |
sendDocument | 파일 전송 |
sendLocation | 위치 전송 |
editMessageText | 메시지 수정 |
deleteMessage | 메시지 삭제 |
3.2 봇 정보
| 메서드 | 설명 |
|---|---|
getMe | 봇 정보 조회 |
getUpdates | 새 메시지/이벤트 조회 |
setWebhook | 웹훅 설정 |
getWebhookInfo | 웹훅 정보 조회 |
3.3 사진 전송 예시
curl -X POST "https://api.telegram.org/bot<TOKEN>/sendPhoto" \
-F "chat_id=123456789" \
-F "photo=@/path/to/image.jpg" \
-F "caption=이미지 설명"
3.4 파일 전송 예시
curl -X POST "https://api.telegram.org/bot<TOKEN>/sendDocument" \
-F "chat_id=123456789" \
-F "document=@/path/to/file.pdf"
4. 프로그래밍 언어별 예제
4.1 Python
import requests
TOKEN = "YOUR_BOT_TOKEN"
CHAT_ID = "YOUR_CHAT_ID"
def send_message(text):
url = f"https://api.telegram.org/bot{TOKEN}/sendMessage"
payload = {
"chat_id": CHAT_ID,
"text": text,
"parse_mode": "HTML"
}
response = requests.post(url, json=payload)
return response.json()
# 사용
send_message("<b>알림</b>: 작업이 완료되었습니다!")
4.2 JavaScript (Node.js)
const TOKEN = "YOUR_BOT_TOKEN";
const CHAT_ID = "YOUR_CHAT_ID";
async function sendMessage(text) {
const url = `https://api.telegram.org/bot${TOKEN}/sendMessage`;
const response = await fetch(url, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
chat_id: CHAT_ID,
text: text,
parse_mode: "HTML"
})
});
return response.json();
}
// 사용
sendMessage("<b>알림</b>: 작업이 완료되었습니다!");
4.3 n8n 워크플로우
n8n에서 Telegram 노드 설정:
- Credentials 설정
- Telegram API 선택
- Bot Token 입력
- 노드 설정
- Resource: Message
- Operation: Send Message
- Chat ID: 대상 Chat ID 입력
- Text: 보낼 메시지
5. 웹훅(Webhook) 설정
실시간으로 메시지를 수신하려면 웹훅을 설정합니다.
5.1 웹훅 등록
curl "https://api.telegram.org/bot<TOKEN>/setWebhook?url=https://your-domain.com/webhook"
5.2 웹훅 정보 확인
curl "https://api.telegram.org/bot<TOKEN>/getWebhookInfo"
5.3 웹훅 삭제
curl "https://api.telegram.org/bot<TOKEN>/deleteWebhook"
5.4 웹훅 수신 서버 예제 (Python Flask)
from flask import Flask, request
app = Flask(__name__)
@app.route('/webhook', methods=['POST'])
def webhook():
data = request.json
if 'message' in data:
chat_id = data['message']['chat']['id']
text = data['message'].get('text', '')
print(f"받은 메시지: {text} (from: {chat_id})")
return 'OK', 200
if __name__ == '__main__':
app.run(port=5000)
6. Telegram API (MTProto)
Bot API로 충분하지 않은 경우(사용자 계정 기능 필요 시) MTProto API를 사용합니다.
6.1 API 자격 증명 발급
- https://my.telegram.org 접속
- 전화번호로 로그인
- “API development tools” 클릭
- 앱 정보 입력 후 생성
api_id와api_hash저장
6.2 Python 라이브러리 사용 (Telethon)
from telethon import TelegramClient
api_id = 12345
api_hash = 'your_api_hash'
client = TelegramClient('session_name', api_id, api_hash)
async def main():
await client.start()
# 메시지 전송
await client.send_message('username', '안녕하세요!')
# 채널 메시지 읽기
async for message in client.iter_messages('channel_name', limit=10):
print(message.text)
with client:
client.loop.run_until_complete(main())
7. 실전 활용 예시
7.1 서버 모니터링 알림
import requests
import psutil
def send_alert(message):
url = f"https://api.telegram.org/bot{TOKEN}/sendMessage"
requests.post(url, json={
"chat_id": CHAT_ID,
"text": f"🚨 서버 알림\n{message}",
"parse_mode": "HTML"
})
# CPU 사용량 체크
cpu_percent = psutil.cpu_percent()
if cpu_percent > 80:
send_alert(f"CPU 사용량 경고: {cpu_percent}%")
7.2 트레이딩 알림 시스템
def send_trading_signal(signal_type, symbol, price, reason):
emoji = "🟢" if signal_type == "BUY" else "🔴"
message = f"""
{emoji} <b>{signal_type} 신호</b>
코인: {symbol}
가격: ${price:,.2f}
근거: {reason}
시간: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}
"""
send_message(message)
8. API 제한 및 주의사항
8.1 요청 제한
- 같은 채팅: 초당 1개 메시지
- 전체: 초당 30개 메시지
- 그룹: 분당 20개 메시지
8.2 메시지 제한
- 텍스트: 최대 4096자
- 캡션: 최대 1024자
- 파일: 최대 50MB (봇), 2GB (MTProto)
8.3 보안 권장사항
- 토큰을 코드에 직접 넣지 말고 환경 변수 사용
- HTTPS 웹훅만 사용
- 주기적으로 토큰 재발급 고려
- 불필요한 권한은 부여하지 않기
마무리
텔레그램 Bot API는 간단하면서도 강력한 기능을 제공합니다. 알림 시스템, 자동화 봇, 모니터링 도구 등 다양한 용도로 활용할 수 있으니 필요에 맞게 적용해 보세요.
참고 자료