728x90
반응형
결과화면

FastAPI로 텔레그램 Bot을 연동하여 알람이 오게 만들었따.
1. 텔레그램 봇 만들기
BotFather
BotFather is the one bot to rule them all. Use it to create new bot accounts and manage your existing bots.
telegram.me
텔레그램에서 BotFather을 검색하게 되면, 봇 생성을 할 수 있다.


/start
/newbot
위 명령어를 순서대로 친 후, 이름을 지정해주면 Token을 발급해준다.
2. 나의 chat_id 얻기

https://api.telegram.org/bot<토큰>/getUpdates
해당 사이트에 가서, 나의 chat id를 확인할 수 있다.
"chat": {
"id": 123456789,
}
3. FastAPI에 텔레그램 전송 함수 만들기
telegram_bot.py

BOT_TOKEN = "여기에_나의_텔레그램_봇_토큰"
CHAT_ID = "여기에_나의_chat_id"
import requests
BOT_TOKEN = "~~~~~~~~~~~~~~"
CHAT_ID = "~~~~~~~~~~~~~~"
def send_telegram(message: str):
url = f"https://api.telegram.org/bot{BOT_TOKEN}/sendMessage"
payload = {
"chat_id": CHAT_ID,
"text": message,
}
requests.post(url, json=payload)
4. WebSocket에서 가격 조건 체크하기
from fastapi import APIRouter, WebSocket
import websockets # 업비트 WebSocket 연결용
import json # JSON 파싱용
from telegram.telegram_bot import send_telegram # 텔레그램 전송 함수
router = APIRouter()
# 업비트 공식 WebSocket 주소
UPBIT_WS_URL = "wss://api.upbit.com/websocket/v1"
# ===============================
# 🔔 알림 관련 설정
# ===============================
TARGET_PRICE = 50000000 # 알림을 받을 목표 가격 (예: 5천만 원)
alert_sent = False # 중복 알림 방지용 플래그
@router.websocket("/chart")
async def ticker(ws: WebSocket):
"""
1️⃣ React에서 /chart WebSocket으로 접속
2️⃣ 서버가 업비트 WebSocket에 연결
3️⃣ 업비트 데이터를 받아서
- React로 그대로 전달
- 동시에 서버에서 가격 조건 체크
"""
# React 클라이언트 WebSocket 연결 승인
await ws.accept()
# 업비트 WebSocket 서버에 연결
async with websockets.connect(UPBIT_WS_URL) as upbit_ws:
# 업비트에 구독 메시지 전송
subscribe = [
{"ticket": "proxy"}, # 연결 식별용 (아무 문자열 가능)
{"type": "ticker", "codes": ["KRW-BTC"]}, # BTC 실시간 시세
]
await upbit_ws.send(json.dumps(subscribe))
global alert_sent # 함수 안에서 전역 변수 사용
while True:
# ===============================
# 1️⃣ 업비트에서 데이터 수신
# ===============================
raw = await upbit_ws.recv() # bytes 형태
text = raw.decode("utf-8") # JSON 문자열로 변환
data = json.loads(text) # dict로 변환
# ===============================
# 2️⃣ React로 실시간 데이터 전달
# ===============================
await ws.send_text(text)
# ===============================
# 3️⃣ 가격 조건 체크 (서버에서)
# ===============================
price = data["trade_price"] # 현재 체결가
# 목표 가격 돌파 + 아직 알림 안 보냈을 때
if price >= TARGET_PRICE and not alert_sent:
send_telegram(f"🚨 BTC 가격 도달!\n현재가: {price:,}원")
alert_sent = True # 중복 알림 방지
# 가격이 다시 내려오면 → 다음 알림 가능하게 리셋
if price < TARGET_PRICE:
alert_sent = False
https://bright-landscape.tistory.com/468
[FastAPI, React] 차트 골든크로스, 데드크로스 표시 ( Telegram Bot)
결과화면 전체 아키텍쳐 요약업비트 WebSocket ↓FastAPI 중계 ↓React 실시간 분봉 생성 ↓이동평균 계산 ↓골든 / 데드 감지 ↓FastAPI 알림 API ↓Telegram BotReact 구조CandleChart.jsimport React, { useState, useEffec
bright-landscape.tistory.com
텔레그램에 봇과 연동을 했으니, 이제 이동평균선 MA에 따라 골크 같은거를 나타내봐야겠다.
728x90
반응형
'✨ python > FastAPI' 카테고리의 다른 글
| [FastAPI, Recat] 차트에 볼린저밴드 추가하기 (0) | 2026.01.04 |
|---|---|
| [FastAPI, React] 골든크로스, 데드크로스 ( Telegram Bot) (1) | 2025.12.21 |
| [FastAPI, Recat] 이전 데이터 + 실시간 데이터(WebSocket) 합하기 (3) (0) | 2025.12.14 |
| [FastAPI, Recat] 이전 데이터 + 실시간 데이터(WebSocket) 합하기 (2) (0) | 2025.12.12 |
| [FastAPI, Recat] 이전 데이터 + 실시간 데이터(WebSocket) 합하기 (1) (0) | 2025.12.12 |
댓글