OpenAI나 Anthropic 요금표는 한번 바뀌고 나서 알면 괜히 손해 본 기분이 남더라구요. 매달 구독료 내는 입장에선 몇 달러 차이도 은근 크니까, 오늘은 Claude Code로 AI 구독료 알림봇을 만들어서 가격표 문구가 바뀌는 순간 텔레그램으로 받게 해볼게요.
완성 모습은 단순합니다. `python price_watch.py --test` 한 번 돌리면 현재 가격 문구가 터미널에 찍히고, 변경이 생기면 텔레그램에 짧은 알림이 옵니다. 알림 캡처 한 장이면 오늘 만든 결과가 끝까지 보일 겁니다.
준비물은 하나만 고르자
Claude Code 하나면 됩니다. Claude 쓰는 분은 아래 프롬프트를 그대로 넣고, Codex 쓰는 분은 같은 문장을 거의 그대로 옮기면 돼요. 본문은 Claude Code 기준으로 갈게요.
텔레그램 봇 토큰, 내 채팅 ID, 빈 폴더 하나만 있으면 출발 가능합니다. 이건 외우지 말고 그냥 붙여넣어도 돼요.
바로 만들기
1
규칙부터 짧게 박아두기
터미널에서 먼저 `/init` 한 번 치세요. `CLAUDE.md`가 생기면 아래 느낌으로 짧게 적어두면 됩니다. 감시 대상은 OpenAI pricing, Anthropic pricing. 알림 말투는 짧게. 숫자 먼저. 못 읽은 페이지는 과장하지 말고 `확인 필요`라고만 쓰기.
AI에게 보낸 프롬프트
이 폴더에 AI 구독료 알림봇 첫 버전을 만들어줘. 파일은 `price_watch.py` 하나만 먼저 쓰고, OpenAI pricing 페이지와 Anthropic pricing 페이지에서 월 요금 관련 문구를 읽어서 터미널 표로 출력해줘. `python price_watch.py --test`로 바로 확인 가능하게 해줘. `CLAUDE.md`에는 숫자 먼저, 과장 금지, 못 읽으면 `확인 필요`라고 쓰는 규칙을 넣어줘.
왜 이렇게 시켰나: 첫 결과를 5분 안에 보려면 텔레그램부터 붙이면 안 됩니다. 일단 읽히는지부터 보는 게 빨라요.
이렇게 나오면 OK: 두 사이트 이름과 가격 문구가 한 줄씩 찍힙니다.
⚠여기서 이렇게 하면 안 돼요: Step 1부터 데이터 저장, 알림, 예외 처리까지 한 번에 다 넣지 마세요. 처음부터 무거워지면 AI도 흔들립니다.
2
텔레그램으로 보내기
AI에게 보낸 프롬프트
좋아. 이제 `requirements.txt`와 `.env.example`을 추가하고, `TELEGRAM_BOT_TOKEN`과 `TELEGRAM_CHAT_ID`를 읽어서 `--test` 실행 때 현재 가격 문구를 텔레그램으로 보내줘. 실행 방법은 `README.md` 없이 터미널 명령 3줄만 파일 맨 아래 주석으로 남겨줘.
왜 이렇게 시켰나: 초보자는 문서보다 실행 줄 3개가 더 잘 먹힙니다. `pip install -r requirements.txt`, `.env` 채우기, `python price_watch.py --test` 이 정도면 충분하거든요.
이렇게 나오면 OK: 터미널에도 찍히고 텔레그램에도 같은 내용이 옵니다. 여기까지 했으면 반은 끝난 셈입니다.
⚠여기서 이렇게 하면 안 돼요: 봇 토큰을 코드에 직접 박아넣지 마세요. 나중에 캡처 올리다가 그대로 새는 경우가 진짜 많습니다.
3
진짜 알림처럼 만들기
AI에게 보낸 프롬프트
이제 `data.json` 파일에 마지막으로 본 가격 문구를 저장하고, 다음 실행에서 달라졌을 때만 텔레그램 알림을 보내줘. `--test`일 때는 항상 보내고, 기본 실행은 변경이 없으면 조용히 끝나게 해줘. 파일이 없으면 첫 실행으로 처리해줘.
왜 이렇게 시켰나: AI 구독료 알림봇은 조용해야 오래 씁니다. 매번 울리면 하루 만에 음소거당합니다.
이렇게 나오면 OK: 첫 실행은 저장만 하고, 문구를 일부러 바꿔 테스트하면 변경 알림이 옵니다.
⚠여기서 이렇게 하면 안 돼요: 페이지 전체 HTML을 그대로 비교하면 헛알림이 쏟아집니다. 가격과 플랜 이름이 들어간 줄만 뽑아 비교해야 합니다.
4
헛알림 줄이기
AI에게 보낸 프롬프트
지금 스크립트에서 비교 대상을 더 줄여줘. `monthly`, `annual`, `$`, `Pro`, `Max`, `Team` 같은 가격 관련 줄만 남기고 공백은 정리해서 저장해줘. 읽은 결과가 너무 적으면 알림 대신 `확인 필요`만 보내게 바꿔줘.
왜 이렇게 시켰나: 이 한 줄이 제일 중요합니다. 가격표 주변 안내 문구가 바뀌었다고 AI 구독료 알림봇이 울리면 바로 귀찮아져요.
이렇게 나오면 OK: 문장 몇 개만 남고, 가격이 안 바뀌면 며칠 조용합니다.
여기서 이렇게 하면 안 돼요: 사이트 문장 전체를 요약해달라고 하면 안 됩니다. 우리는 뉴스레터가 아니라 감지봇을 만드는 중이니까요.
5
6시간마다 자동으로 돌리기
AI에게 보낸 프롬프트
/loop 6h python price_watch.py
왜 이렇게 시켰나: Claude Code 문서에 나온 `/loop`는 세션 안에서 같은 작업을 반복 돌릴 때 제일 빠릅니다. 지금은 복잡한 서버보다 이게 편해요.
이렇게 나오면 OK: Claude가 6시간 간격 작업을 잡았다고 알려주고, 세션이 살아 있는 동안 계속 체크합니다.
여기서 이렇게 하면 안 돼요: 노트북 덮어두고도 계속 돌 거라고 생각하면 안 됩니다. `/loop`는 세션이 열려 있고 기계가 켜져 있을 때만 갑니다.
6
마지막 30초 검수
AI에게 보낸 프롬프트
방금 만든 스크립트에서 잘못 울릴 만한 부분만 3개 찾아줘. 기능 추가 말고, 오탐이나 빈 알림이 날 상황만 짚어줘.
왜 이렇게 시켰나: 마지막엔 더 만들지 말고 덜 망가지는지만 보는 게 낫습니다. 여기서 욕심내면 끝이 안 나요.
이렇게 나오면 OK: `페이지 구조 변경`, `환경변수 비어 있음`, `가격 줄이 하나도 안 잡힘` 같은 지적이 나옵니다.
⚠여기서 이렇게 하면 안 돼요: 검수 단계에서 갑자기 Discord, Slack, 이메일까지 붙이지 마세요. 오늘 목표는 AI 구독료 알림봇 하나입니다.
여기서 막히면
1. 현상: `--test`를 돌렸는데 텔레그램이 조용합니다. 원인: `TELEGRAM_CHAT_ID`를 숫자 그대로 안 넣었거나, 봇이 아직 나와 대화를 시작하지 않은 경우가 많습니다. 토큰은 맞는데 채팅방을 못 찾는 상황도 자주 나와요. 해결: 텔레그램에서 봇에게 아무 말이나 한 번 보내고 다시 돌리세요. `.env`에 공백이 끼지 않았는지 보고, Claude Code에 `환경변수가 비어 있을 때 에러 문장을 더 직접적으로 보여줘`라고 한 줄 더 주면 확인이 빨라집니다.
2. 현상: 알림은 오는데 매번 바뀌었다고 뜹니다. 원인: 가격표 말고 주변 문장이나 날짜 문구까지 같이 저장한 경우가 대부분입니다. 사이트는 안내 문구를 자주 만지는데 가격은 그대로인 날이 더 많거든요. 해결: Step 4 프롬프트를 다시 써서 가격 관련 줄만 남기세요. `data.json`을 열어봤을 때 숫자보다 긴 문단이 보이면 비교 대상이 너무 넓은 겁니다.
3. 현상: 어제는 돌았는데 오늘은 아무 일도 안 합니다. 원인: `/loop`는 서버가 아니라 현재 세션에 매달려 있습니다. 터미널을 닫았거나 노트북이 잠들면 같이 멈춥니다. 해결: 매일 켜두는 컴퓨터라면 같은 세션을 이어 쓰고, 아니면 나중에 Claude Code의 더 오래가는 스케줄 방식으로 옮기면 됩니다. 오늘은 먼저 돌아가는 맛부터 보는 게 맞습니다.
다음에 붙여볼 것
한 걸음 더
다음엔 이 알림에 환율 한 줄만 붙여도 재밌습니다. 달러 요금표가 바뀌었는지, 내 카드값이 체감상 얼마나 달라지는지 같이 보여주면 이 AI 구독료 알림봇이 훨씬 자주 열리거든요.