Codex Steam 할인 알림봇은 관심 게임 가격이 내려갔을 때 텔레그램으로 알려주는 작은 봇입니다. Steam 찜 목록을 매번 여는 것도 귀찮고, 세일 끝나고 나서 보는 날이 꼭 있거든요.
이번에는 게임 이름 몇 개와 원하는 가격만 적어두면 됩니다. 봇이 Steam 가격을 확인하고, 조건에 맞으면 텔레그램으로 게임명, 현재 가격, 할인율을 보내요. 첫 알림은 5분 안에 볼 수 있게 작게 갑니다.
Codex는 터미널에서 내 폴더 안 파일을 읽고, 고치고, 실행할 수 있습니다. AGENTS.md도 시작할 때 읽으니까 봇 말투와 금지어를 한 번 적어두면 결과가 덜 흔들리구요. Claude Code를 쓰는 분은 같은 내용을 CLAUDE.md에 적으면 됩니다. 오늘 글은 Codex 기준으로 갑니다.
준비물은 딱 세 개
Codex 하나만 있으면 됩니다. 텔레그램 봇 토큰, 내 텔레그램 chat_id, 그리고 알림 받을 Steam 게임 이름 3개면 충분해요. 토큰 만드는 과정은 BotFather에서 새 봇 만들고 받은 문자열을 복사하면 끝입니다.
폴더는 아무 데나 하나 만들면 됩니다. 예를 들어 steam-sale-bot 폴더를 만들고 그 안에서 Codex를 켜면 됩니다. 이건 외우지 말고 그냥 이렇게 해.
1
Codex가 헷갈리지 않게 규칙부터 박기
AI에게 보낸 프롬프트
steam-sale-bot 폴더에 AGENTS.md를 만들어줘. 이 프로젝트 규칙은 아래처럼 해줘.
- 결과물은 초보가 실행할 수 있어야 함
- 첫 버전은 Node.js 파일 하나로 만들기
- 알림 문구는 짧고 담백하게
- 이모지 금지
- 과장 금지: 급등, 대박, 무조건 같은 표현 쓰지 않기
- 실행 방법을 README.md에 5줄 이내로 적기
왜 이렇게 시켰나: Codex는 AGENTS.md를 먼저 읽고 움직입니다. 이걸 안 만들면 알림 문구가 갑자기 광고 문구처럼 튈 때가 있어요.
이렇게 나오면 OK: AGENTS.md와 README.md가 생기고, README에 실행 명령이 짧게 적혀 있으면 됩니다. 여기서 이렇게 하면 안 돼요. 처음부터 게임 20개, 차트, 웹 화면까지 한 번에 시키면 Codex가 길을 잃습니다.
2
Steam 가격 확인만 먼저 만들기
AI에게 보낸 프롬프트
Node.js로 app.js 하나를 만들어줘. Steam Store의 appdetails 응답을 써서 게임 appid 3개의 현재 가격과 할인율을 콘솔에 출력해줘. 예시는 Stardew Valley 413150, Cyberpunk 2077 1091500, Hades 1145360으로 넣어줘. 텔레그램 전송은 아직 붙이지 말고 가격 확인만 되게 해줘.
왜 이렇게 시켰나: 첫 결과는 작아야 합니다. 콘솔에 가격이 찍히면 나머지는 붙이는 일이라 마음이 편해져요.
이렇게 나오면 OK: 터미널에 게임 이름, 원래 가격, 현재 가격, 할인율이 보이면 됩니다. 가격이 null로 나오면 한국 지역 가격이 안 잡힌 경우가 많으니까 country 값을 KR로 넣어달라고 Codex에 말하면 돼요.
3
원하는 가격 밑으로 내려오면 텔레그램 보내기
AI에게 보낸 프롬프트
app.js에 텔레그램 sendMessage 전송을 붙여줘. .env에서 TELEGRAM_BOT_TOKEN, TELEGRAM_CHAT_ID를 읽게 해줘. 각 게임마다 targetPrice를 두고 현재 가격이 targetPrice 이하이거나 할인율이 50 이상이면 알림을 보내줘. 알림 문구는 게임명, 현재 가격, 할인율, Steam 링크만 포함해줘.
왜 이렇게 시켰나: 가격 조건과 할인율 조건을 같이 두면 더 편합니다. 어떤 게임은 50퍼 할인이어도 비싸고, 어떤 게임은 30퍼만 내려도 살 만하니까요.
이렇게 나오면 OK: 텔레그램에 Stardew Valley 현재 가격 같은 메시지가 한 줄로 도착합니다. 여기서 이렇게 하면 안 돼요. 토큰을 코드에 직접 넣으면 나중에 GitHub에 올릴 때 그대로 새어 나갑니다. .env에 넣고 app.js에서는 읽기만 해야 합니다.
4
같은 알림 계속 오는 문제 막기
AI에게 보낸 프롬프트
이미 보낸 알림이 계속 반복되지 않게 sent.json 파일을 추가해줘. 같은 게임이 같은 가격이면 다시 보내지 말고, 가격이 더 내려가면 다시 보내게 해줘. 실행할 때마다 sent.json을 읽고 저장해줘.
왜 이렇게 시켰나: 이 한 줄이 진짜 중요합니다. 이거 빼면 터미널 한 번 돌릴 때마다 같은 게임 알림이 계속 와요. 처음엔 웃긴데 세 번째부터 바로 짜증납니다.
이렇게 나오면 OK: 첫 실행에는 알림이 오고, 바로 다시 실행하면 같은 가격은 조용해야 합니다. 가격 기준을 바꿨는데도 안 오면 sent.json을 지우고 다시 돌려보면 됩니다.
5
마지막으로 Codex한테 검수만 시키기
AI에게 보낸 프롬프트
방금 만든 Steam 할인 알림봇을 초보 기준으로 검수해줘. 실행이 막힐 만한 곳 3개만 찾아줘. 코드는 바로 고치지 말고, 문제와 고치는 프롬프트를 같이 써줘.
왜 이렇게 시켰나: 검수까지 바로 고치라고 하면 Codex가 멀쩡한 구조를 바꿀 때가 있습니다. 먼저 문제만 보게 하면 우리가 필요한 것만 골라서 고칠 수 있어요.
이렇게 나오면 OK: .env 누락, appid 오류, 텔레그램 chat_id 문제처럼 실제로 막히는 지점이 나와야 합니다. 여기서 이렇게 하면 안 돼요. 전체 리팩토링 해줘 같은 말은 금지입니다. 오늘 목표는 Codex Steam 할인 알림봇 첫 버전입니다.
여기서 막히면 거의 이 셋
현상: 터미널에 가격이 0 또는 null로 나옵니다. 원인: Steam 응답에서 한국 가격이 빠졌거나 appid가 틀렸을 수 있습니다. 해결: Steam 상점 URL 숫자를 다시 확인하고, Codex에 country=KR로 요청하게 고쳐달라고 말하면 됩니다.
현상: 텔레그램 메시지가 안 옵니다. 원인: TELEGRAM_CHAT_ID가 틀린 경우가 많습니다. 해결: 내 봇에게 아무 말이나 보낸 뒤 getUpdates로 chat_id를 다시 확인하고 .env 값을 바꿔주세요. 토큰 앞뒤 공백도 같이 봐야 합니다.
현상: 알림이 너무 자주 옵니다. 원인: sent.json 저장이 안 됐거나 가격 비교가 매번 새 알림으로 처리되는 겁니다. 해결: sent.json 파일이 생겼는지 보고, 게임 appid와 현재 가격을 묶어서 저장하게 Codex에 다시 시키면 됩니다.
다음엔 위시리스트처럼 굴리기
한 걸음 더
오늘 만든 Codex Steam 할인 알림봇은 일단 3개 게임만 봅니다. 여기까지 해도 세일 놓치는 일은 꽤 줄어요. 매달 게임 사는 사람 입장에선 1만 원 할인 한 번만 잡아도 만든 값은 바로 나옵니다.
다음에 붙일 건 CSV입니다. wishlist.csv에 게임명, appid, 목표 가격만 줄줄이 적어두면 봇이 알아서 읽게 만들 수 있거든요. 그때부터는 진짜 위시리스트 관리가 됩니다.