OTT 신작 알림봇은 진짜 체감이 빠릅니다. 디스코드 채널 하나 만들어두면 새로 올라오는 영화나 시리즈가 포스터, 공개일, 한 줄 소개까지 붙어서 톡 오듯이 들어오거든요. 오늘 만들 버전은 좋아하는 키워드만 골라서 보내는 작은 봇이고, 첫 결과는 5분 안에 터미널 미리보기로 바로 볼 수 있습니다.
지난 편이 Bluesky 알림이었다면, 이번엔 일상 쪽으로 확 꺾습니다. AI 뉴스보다 더 자주 열게 되는 게 이런 개인 취향 알림봇이더라구요.
시작 전에 딱 이것만
준비물은 Codex 하나면 됩니다. Claude Code 쓰는 분도 아래 프롬프트를 거의 그대로 넣으면 되구요, 여기서는 Codex 기준으로 적을게요. 디스코드 채널 하나와 TMDb API 키 하나만 있으면 끝입니다. Webhook은 디스코드 채널로 메시지 보내는 주소라고 생각하면 돼요.
공식 문서 기준으로 지금 Codex는 웹 검색을 바로 붙일 수 있고, `codex exec --output-schema`로 마지막 출력을 JSON 모양에 맞춰 고정할 수 있습니다. 또 `AGENTS.md`로 프로젝트 규칙을 읽고, `/review`로 수정본만 따로 점검하는 흐름이 붙어 있더라구요. 오늘은 그 네 가지만 씁니다.
먼저 껍데기부터 띄우자
1
가짜 데이터로 알림 모양 보기
AI에게 보낸 프롬프트
OTT 신작 알림봇을 만들 거야. 파일은 `ott_alert.py` 하나와 `AGENTS.md` 하나만 먼저 만들어줘. `AGENTS.md`에는 알림 규칙을 적어줘: 말투는 담백하게, 한 줄 소개는 45자 이내, 금지어는 역대급/무조건/필수. `ott_alert.py`는 샘플 작품 3개를 사용해서 Discord embed 미리보기 JSON을 터미널에 예쁘게 출력해줘. 아직 실제 전송은 하지 마.
왜 이렇게 시켰나: 첫 프롬프트에서 진짜 전송까지 넣으면 초보가 어디서 막혔는지 헷갈립니다. 일단 OTT 신작 알림봇 모양부터 보면 마음이 편해져요.
이렇게 나오면 OK: 터미널에 작품 제목, 공개일, 포스터 URL, 한 줄 소개가 3개 묶음으로 보이면 됩니다.
⚠여기서 이렇게 하면 안 돼요: Step 1에서 스케줄, 상태 저장, API 키 처리까지 한 번에 넣지 마세요. AI도 한 번에 많이 시키면 말이 길어지고 결과가 흔들립니다.
2
OTT 신작 알림봇에 실제 데이터 붙이기
AI에게 보낸 프롬프트
이제 `ott_alert.py`를 실제 동작 버전으로 바꿔줘. TMDb upcoming 데이터를 읽고 공개일이 오늘부터 7일 안인 항목만 고른 뒤 Discord incoming webhook으로 embed 1~3개를 보내줘. 환경변수는 `TMDB_API_KEY`와 `DISCORD_WEBHOOK_URL`만 쓰고, 값이 없으면 무엇이 비었는지 한국어로 알려줘. 포스터 이미지도 embed에 넣어줘.
왜 이렇게 시켰나: 외우기 귀찮은 필드 이름은 Codex가 웹에서 다시 확인하면 됩니다. 헷갈리면 `codex exec --search`로 같은 요구를 돌리면 최신 문서 반영이 빨라서 편합니다.
이렇게 나오면 OK: 디스코드 채널에 포스터가 붙은 카드가 1개라도 오면 반은 끝입니다. 이 순간이 제일 재밌어요.
⚠여기서 이렇게 하면 안 돼요: Discord bot을 새로 만들 필요 없습니다. 이번 버전은 webhook URL만 있으면 됩니다.
3
같은 작품 두 번 안 오게 막기
AI에게 보낸 프롬프트
`sent_ids.json` 파일을 추가해서 이미 보낸 TMDb id는 다시 보내지 않게 해줘. 파일 맨 위에는 `KEYWORDS = ['netflix','anime','sf']` 같은 리스트를 두고 제목이나 overview에 키워드가 들어간 작품만 보내줘. 이번 실행에서 몇 개를 보냈는지도 마지막에 출력해줘.
왜 이렇게 시켰나: 알림봇은 처음보다 둘째 날이 중요합니다. 같은 작품이 또 오면 바로 꺼버리게 되거든요.
이렇게 나오면 OK: 한 번 보낸 뒤 다시 실행했을 때 같은 카드가 안 오고, 터미널에는 `이번 실행 0개 전송` 같은 문장이 찍히면 됩니다.
⚠여기서 이렇게 하면 안 돼요: 여기서 DB 붙이겠다고 커지면 금방 귀찮아집니다. `sent_ids.json`이면 오늘 목표엔 충분해요.
4
마지막 다듬기와 점검
AI에게 보낸 프롬프트
Windows에서 바로 돌리기 쉽게 `run_ott_alert.bat`를 만들어줘. `python ott_alert.py`만 실행하면 되게 하고, 파일 맨 아래에는 실행 순서를 3줄 주석으로 남겨줘. 빈 overview일 때 대체 문구를 넣고, 공개일 형식이 이상하면 건너뛰게도 보강해줘.
왜 이렇게 시켰나: 여기까지 오면 손이 덜 갑니다. 그리고 Codex에서 `/review` 한 번 치면 날짜 비교, 빈 값 처리, 중복 파일 쪽을 따로 읽고 위험한 부분만 짚어줘서 마무리가 빨라요.
이렇게 나오면 OK: 배치 파일 더블클릭으로 실행되고, 빈 소개문이 와도 카드가 깨지지 않으면 됩니다.
⚠여기서 이렇게 하면 안 돼요: 스케줄러 설명을 길게 늘어놓지 마세요. 오늘은 눌렀을 때 돌아가는 OTT 신작 알림봇까지만 끝내면 충분합니다.
여기서 막히는 셋
현상: 디스코드에 아무 메시지도 안 옵니다. 원인: webhook URL 끝이 잘렸거나 다른 채널 주소를 넣은 경우가 많습니다. 해결: 브라우저에서 webhook 만든 채널 이름을 다시 확인하고, 테스트용으로 샘플 제목 하나만 보내는 짧은 전송 코드를 먼저 돌려보면 바로 걸립니다.
현상: TMDb 쪽에서 401이나 인증 오류가 뜹니다. 원인: API 키 앞뒤 공백이 붙었거나 `.env` 이름을 Codex가 다르게 읽은 경우가 흔합니다. 해결: 키를 다시 복사해서 붙여넣고, `print(os.getenv('TMDB_API_KEY'))` 한 줄로 값이 실제로 읽히는지만 먼저 확인하세요.
현상: 같은 작품이 계속 오거나 아예 아무것도 안 옵니다. 원인: `sent_ids.json`이 비어 있지 않은데 키워드 필터가 너무 빡빡하거나, 날짜 비교를 UTC 기준으로 잡아서 하루가 밀리는 경우가 있습니다. 해결: 키워드를 잠깐 하나만 남기고, 오늘 날짜와 `release_date`를 같이 출력해서 어떤 항목이 걸러지는지 눈으로 보면 금방 풀립니다.
다음엔 여기 하나만 더
한 걸음 더
다음엔 채널을 두 개로 나눠서 애니 채널, 영화 채널 따로 보내면 진짜 쓰게 됩니다. 오늘 만든 OTT 신작 알림봇이 돌아가기 시작하면 그다음부터는 취향만 더 붙이면 되거든요.