오늘 만들 건 HuggingFace 텔레그램 알림봇이다. 허깅페이스에 새 모델이 올라오면 모델 이름, 만든 사람, 링크를 텔레그램으로 바로 보내는 거다. 지난 편에서 결과물을 직접 뽑았다면 오늘은 그 재료가 먼저 들어오게 만드는 쪽으로 가보자.
완성 모습은 단순하다. 폰에 메시지 하나가 오고, 거기에 모델 이름이랑 링크가 찍힌다. 눌러서 바로 모델 페이지로 가면 끝. 이게 별거 아닌데, AI 뉴스나 글감 찾는 사람 입장에선 진짜 편해진다.
준비는 가볍게
하나만 고르면 된다. Codex 쓰는 분은 새 폴더에서 `codex --search`로 시작하면 되고, Claude Code 쓰는 분은 같은 프롬프트를 그대로 붙여넣으면 된다. 오늘 글은 Codex 기준으로 적을게요.
텔레그램 봇 토큰 하나만 있으면 된다. BotFather에서 토큰 만들고, 내 봇이랑 대화 한 번 열어두면 된다. 몰라도 괜찮아 그냥 복사만 해오면 된다.
일단 첫 알림부터 받자
1
모델 목록 먼저 찍기
AI에게 보낸 프롬프트
새 폴더에서 파이썬 한 파일짜리 HuggingFace 텔레그램 알림봇 초안을 만들어줘. 파일 이름은 `watch_hf.py`. `huggingface_hub`의 `HfApi.list_models`를 써서 환경변수 `HF_KEYWORD`로 받은 검색어 기준 최근 모델 5개를 가져오고, 모델 이름, 작성자, 수정 시각, 링크를 터미널에 보기 좋게 출력해줘. 아직 텔레그램 전송은 넣지 말고 실행 방법도 같이 적어줘.
왜 이렇게 시켰나: 처음부터 알림까지 붙이면 어디서 틀렸는지 안 보인다. 목록만 찍히면 반은 끝난 거다. 허깅페이스 공식 문서도 `list_models`, `search`, `sort`, `limit` 정도만 쓰면 충분하다고 보면 된다.
이렇게 나오면 OK: 터미널에 모델 5개가 줄줄이 뜨고 각 줄에 허깅페이스 링크가 보이면 된다.
⚠여기서 이렇게 하면 안 돼요: Step 1에서 저장, 스케줄, 예쁜 출력까지 한 번에 달라고 하면 AI가 괜히 길어진다.
2
텔레그램으로 하나만 보내기
AI에게 보낸 프롬프트
방금 만든 `watch_hf.py`에 텔레그램 전송만 추가해줘. `TELEGRAM_BOT_TOKEN`과 `TELEGRAM_CHAT_ID`를 환경변수로 받고, 방금 찾은 5개 중 첫 번째 모델만 `sendMessage`로 보내줘. 토큰이 없으면 안내문만 출력하고 종료해줘.
왜 이렇게 시켰나: 한 개만 보내야 도착 여부를 바로 본다. 다섯 개를 한꺼번에 보내면 실패했을 때 더 헷갈린다.
이렇게 나오면 OK: 내 폰에 모델 이름 하나와 링크 하나가 먼저 온다. 여기까지 오면 첫 결과는 본 거다.
⚠여기서 이렇게 하면 안 돼요: 봇이랑 대화 한 번도 안 연 상태에서 chat id를 대충 넣으면 거의 안 간다.
3
같은 알림 반복 막기
AI에게 보낸 프롬프트
같은 모델을 매번 다시 보내지 않게 `seen.json`을 붙여줘. 이미 보낸 `model id`는 저장하고, 새 `model id`만 텔레그램으로 보내게 바꿔줘. 파일이 없으면 자동으로 만들고, 파일이 깨졌으면 빈 목록으로 다시 시작하게 해줘.
왜 이렇게 시켰나: HuggingFace 텔레그램 알림봇에서 제일 짜증나는 게 같은 알림 반복이다. 이거 하나 막으면 바로 실사용 느낌이 난다.
이렇게 나오면 OK: 첫 실행에만 몇 개가 오고, 바로 다시 돌리면 조용해야 한다.
⚠여기서 이렇게 하면 안 돼요: 메모리를 변수로만 들고 있으면 창 닫는 순간 다 잊어버린다.
4
말투를 짧게 고정하기
AI에게 보낸 프롬프트
프로젝트 루트에 `AGENTS.md`를 만들어줘. 규칙은 세 개만 넣어줘. 1) 텔레그램 문구는 짧게 2) 모델 이름은 원문 유지 3) 과장 표현 금지. 그리고 `watch_hf.py` 메시지 포맷을 그 규칙에 맞춰 다시 다듬어줘.
왜 이렇게 시켰나: Codex 공식 문서대로 `AGENTS.md`를 먼저 읽게 해두면 다음 수정 때 말투가 덜 흔들린다. 작은 봇일수록 규칙도 짧아야 한다.
이렇게 나오면 OK: 알림 문구가 담백하고, 괜히 설명이 길어지지 않는다.
⚠여기서 이렇게 하면 안 돼요: 규칙을 20줄 넘게 적으면 작은 봇인데도 말이 길어진다.
5
실행 파일 하나 만들기
AI에게 보낸 프롬프트
윈도우에서 바로 돌릴 수 있게 `run_bot.bat`도 만들어줘. 현재 폴더로 이동한 뒤 `python watch_hf.py`를 실행하고, 실패하면 어떤 값이 비었는지 한 줄로 알려줘.
왜 이렇게 시켰나: HuggingFace 텔레그램 알림봇은 한 번 만들어놓고 자주 누르게 되는 게 중요하다. 실행 파일 하나 있으면 작업 스케줄러에도 바로 붙인다.
이렇게 나오면 OK: 배치 파일 더블클릭 한 번으로 실행되고, 에러가 나도 이유가 짧게 보인다.
⚠여기서 이렇게 하면 안 돼요: 전체 경로를 하드코딩하면 폴더 옮기는 순간 다시 고쳐야 한다.
6
마지막으로 검수 돌리기
AI에게 보낸 프롬프트
/review focus on duplicate alerts, env var handling, and broken seen.json recovery
왜 이렇게 시켰나: Codex CLI 공식 문서에 있는 `/review`는 작업 트리를 건드리지 않고 위험한 부분만 먼저 잡아준다. 여기서 잡히는 지적이 은근히 쓸모 있다.
이렇게 나오면 OK: chat id 없을 때 종료, json 깨졌을 때 복구, 중복 알림 이 세 군데를 먼저 봐준다.
⚠여기서 이렇게 하면 안 돼요: 잘 되니까 그냥 끝내면 다음날 같은 알림이 여러 번 오는 경우가 있다.
여기서 막히는 셋
1) 알림이 안 온다. 대부분 `TELEGRAM_CHAT_ID`가 틀렸거나 봇과 대화를 안 연 상태다. 봇에게 아무 말이나 한 번 보내고 `getUpdates`로 chat id를 확인한 뒤 다시 넣으면 바로 풀리는 경우가 많다.
2) 실행할 때마다 같은 모델이 또 온다. 원인은 `seen.json`이 다른 폴더에 만들어졌거나 저장 전에 스크립트가 끝나기 때문이다. `watch_hf.py`와 `seen.json`이 같은 폴더에 있는지 보고, 배치 파일에서도 먼저 그 폴더로 이동하게 하면 된다.
3) 모델이 하나도 안 잡힌다. 검색어를 너무 좁게 넣으면 그렇다. 처음엔 `qwen`, `flux`, `llama`, `audio`처럼 짧은 단어로 시작하고, 브라우저에서 같은 검색어로 한 번 확인한 뒤 줄여가는 게 덜 헤맨다.
다음에 하나만 더 붙여보자
한 걸음 더
여기서 한 단계만 더 가면 좋아요 수나 다운로드 수 기준을 붙여서 진짜 글감 필터처럼 쓸 수 있다. 다음엔 이 HuggingFace 텔레그램 알림봇에 한 줄 요약까지 붙여서, 들어온 모델을 바로 콘텐츠 후보로 넘기는 쪽이 재밌겠다. 그다음부터는 새 모델이 올라올 때마다 휴대폰이 먼저 알려줄 겁니다.