diff --git a/plan/250906_news_system_integration.md b/plan/250906_news_system_integration.md index 2126ba5..2c9c6ff 100644 --- a/plan/250906_news_system_integration.md +++ b/plan/250906_news_system_integration.md @@ -20,12 +20,12 @@ - **Gemini 요약**: gemini-2.5-flash-lite 모델 사용 중 - **JSON 상태 관리**: /app/data/news_state.json 파일 기반 -### 미구현 (확인됨) -- **Slack 인터랙티브 버튼**: Block Kit 미적용 -- **Button Callback 처리**: /slack/interactive 엔드포인트 없음 -- **rb8001↔skill-publish 연동**: HTTP 통신 코드 없음 -- **DB 저장**: rb_news 테이블 없음 (DB 작업 대기) -- **게시 결과 알림**: Slack 응답 메시지 미구현 +### 코드 수정 완료 (테스트 대기) +- **Slack 인터랙티브 버튼**: Block Kit 구현 완료 +- **Button Callback 처리**: /api/slack/interactive 엔드포인트 추가 +- **rb8001↔skill-publish 연동**: HTTP 통신 코드 구현 +- **게시 결과 알림**: response_url 통한 알림 구현 +- **DB 저장**: rb_news 테이블 없음 (Phase 3 대기) ## 2. 통합 플로우 @@ -54,14 +54,14 @@ rb8001 → POST skill-publish:8511/publish ## 3. 필요 구현 사항 -### 3.0 컴퍼니엑스 전용 검색 (skill-news) -**파일**: app/services/companyx_news_collector.py (신규) -**엔드포인트**: /api/news/google/companyx-search (news_endpoints.py:63) +### 3.0 컴퍼니엑스 전용 검색 (skill-news) ✅ +**파일**: app/services/companyx_news_collector.py (생성됨) +**엔드포인트**: /api/news/google/companyx-search (news_endpoints.py:64) **검색식**: `"컴퍼니 엑스" OR "컴퍼니엑스" -광고 -채용 -구인` **환경변수**: COMPANY_X_NEWS_KEYWORDS (기본값 내장) -### 3.1 Slack Block Kit 메시지 (rb8001) -**위치**: app/skills/news_posting_skill.py (신규 생성) +### 3.1 Slack Block Kit 메시지 (rb8001) ✅ +**위치**: app/skills/news_posting_skill.py (생성됨) **함수**: - `send_news_for_posting()`: 채널에 뉴스 전송 - `create_news_blocks()`: Block Kit 메시지 생성 @@ -82,19 +82,19 @@ blocks = [ ``` **참고**: naver_startup_news_service.py, dm_skill.py:384 (DM 전송 로직) -### 3.2 Interactive Endpoint (rb8001) -**위치**: main.py:248 (slack_events 아래 추가) +### 3.2 Interactive Endpoint (rb8001) ✅ +**위치**: main.py:249 (구현됨) ```python @app.post("/api/slack/interactive") async def slack_interactive(request: Request): return await handle_interactive(request) # slack_handler.py ``` -**핸들러**: slack_handler.py에 handle_interactive() 추가 +**핸들러**: slack_handler.py:274 handle_interactive() 구현됨 **구현 방식**: 기존 handle() 패턴 따라 payload 파싱, action_id 확인 **URL 설정**: Slack App에 https://ro-being.com/api/slack/interactive 등록 -### 3.3 skill-publish 연동 (rb8001) -**위치**: news_posting_skill.py 내부 함수 +### 3.3 skill-publish 연동 (rb8001) ✅ +**위치**: news_posting_skill.py:186 publish_to_squarespace() 구현됨 ```python async def publish_to_squarespace(news_data): async with httpx.AsyncClient() as client: @@ -176,8 +176,8 @@ docker logs rb8001 | grep postMessage ``` ## 10. 완료 기준 -- [ ] 뉴스에 게시 버튼 표시 -- [ ] 버튼 클릭시 게시 프로세스 시작 -- [ ] Squarespace 게시 완료 -- [ ] 사용자에게 결과 알림 -- [ ] 상태 저장 및 조회 가능 \ No newline at end of file +- [x] 코드 구현: 모든 Phase 1, 2 기능 구현 완료 +- [ ] 테스트: 실제 작동 확인 필요 +- [ ] Slack App 설정: Interactive URL 등록 필요 +- [ ] 환경변수 설정: .env 파일 업데이트 필요 +- [ ] 배포: Docker 재시작 후 검증 필요 \ No newline at end of file