# Company-X 뉴스 시스템 구현 완료 ## 작성일: 2025-09-07 ## 작성자: Claude & happybell80 ## 목적: Company-X 뉴스 포스팅 시스템 구현 내역 기록 ## 1. 구현 완료 사항 ### 1.1 Slack Interactive 시스템 - news_posting_skill.py: Company-X 뉴스 채널 포스팅 기능 구현 - Block Kit 메시지 형식 (버튼 포함) - 홈페이지 게시 / 건너뛰기 버튼 - skill-publish 연동 코드 - JSON 기반 상태 관리 ### 1.2 Interactive Endpoint - main.py: /api/slack/interactive 엔드포인트 추가 - slack_handler.py: handle_interactive() 함수 구현 - Slack 서명 검증 - 버튼 액션 처리 - 3초 내 ACK 응답 ### 1.3 환경 설정 - 채널 ID 관리: 환경변수 방식 채택 - COMPANY_X_NEWS_CHANNEL_ID=C09CP4MDX71 - /home/heejae/rb8001/.env: 환경변수 추가 - /home/admin/ivada_project/rb8001/.env: 동일 설정 동기화 ### 1.4 중복 뉴스 방지 시스템 - sent_news_tracker.py: 전송된 뉴스 추적 - 30일 히스토리 유지 - JSON 파일 기반 저장 - 사용자별 중복 필터링 - Dockerfile 수정: sent_news_tracker.py 포함 ## 2. 해결한 문제들 ### 2.1 sent_news_tracker 모듈 에러 - 문제: No module named 'sent_news_tracker' - 원인: Docker 이미지에 파일 미포함 - 해결: Dockerfile에 COPY 명령 추가 ### 2.2 채널 ID 하드코딩 이슈 - 문제: 채널 ID가 코드에 하드코딩됨 - 초기 설계: DB 테이블 방식 - 최종 결정: 환경변수 방식 ### 2.3 Git 충돌 해결 - 충돌 파일: news_posting_skill.py, slack_handler.py, main.py - 해결 방식: 기존 코드 최대한 보존하며 새 기능 통합 ## 3. 테스트 방법 ### 수동 테스트 - Company-X 뉴스 즉시 실행: curl -X POST http://localhost:8001/api/test/companyx-news - 로그 확인: docker logs rb8001 ## 4. 환경 설정 요약 ### 필수 환경변수 - SLACK_BOT_TOKEN - SLACK_SIGNING_SECRET - COMPANY_X_NEWS_CHANNEL_ID=C09CP4MDX71 - SKILL_NEWS_URL=http://localhost:8505 - SKILL_PUBLISH_URL=http://localhost:8511 ## 5. 주의사항 - Docker 재시작시: docker compose down && up 사용 - 환경변수 변경시 두 곳 모두 수정 필요 - 운영 전환시 COMPANY_X_NEWS_CHANNEL_ID만 변경 ## 6. 향후 개선 사항 - Slack App Interactive URL 실제 설정 - skill-email 500 에러 해결 - 운영 채널 전환 테스트 - 게시 완료 후 메시지 업데이트 기능 ## 7. 2025-09-08 업데이트 ### 7.1 구현 완료 - Gateway /slack/interactive 프록시: 헤더 소문자 변환 문제 해결 (x-slack-signature) - skill-news GET /api/news/google/companyx/{article_id} 엔드포인트 추가 - skill-news PATCH /api/news/google/companyx/{article_id} 상태 업데이트 추가 - rb8001 news_id → article_id 변경 - rb8001 skill-news에서 전체 데이터 조회 후 skill-publish 전송 - 강원일보 스크래핑: div[itemprop='articleBody'] 셀렉터 추가 - 강원도민일보 스크래핑: #article-view-content-div 셀렉터 추가 - 날짜 추출: HTML 전체에서 "입력 2025.09.02" 패턴 검색 추가 - parsed_date 필드 스크래핑 후 업데이트 - Slack 메시지: 3개 제한 제거, 모든 뉴스 표시 - 버튼 상태: 에러시에도 버튼 유지, 성공시 상태 텍스트만 추가