docs: Company-X 뉴스 0개 문제 해결 과정 문서화
- 250907_company_x_news_zero_articles.md 생성 - 250906_news_skill_publish_separation.md 업데이트 - 중복 체크 로직 개선 및 파라미터 전달 문제 해결
This commit is contained in:
parent
d5e8fc1d4b
commit
1052281eee
@ -13,17 +13,17 @@
|
||||
|
||||
## 3. 구현 계획
|
||||
|
||||
### Phase 1: skill-news (✅ 운영 중)
|
||||
**기존 코드 재사용 (company-x_hompage/src/)**:
|
||||
- collectors/google_news_collector.py (100% 재사용)
|
||||
- collectors/scrape_news_playwright.py (100% 재사용)
|
||||
- collectors/summarize_news.py (✅ Gemini 2.5-flash-lite 전환)
|
||||
- utils/process_lock.py (완전 구현됨)
|
||||
- collectors/thumbnail_manager.py (이미지 처리)
|
||||
### Phase 1: skill-news (✅ 운영 중 - Company-X 개선)
|
||||
**2025-09-07 개선사항**:
|
||||
- ✅ rb8001 → skill-news POST 파라미터 전달
|
||||
- ✅ 중복 체크 collector 내부로 이동 (엔드포인트 제거)
|
||||
- ✅ Company-X 전용 봇 토큰 분리 (COMPANY_X_SLACK_BOT_TOKEN)
|
||||
- ✅ 뉴스 없을 때 메시지 비활성화
|
||||
- [상세: troubleshooting/250907_company_x_news_zero_articles.md]
|
||||
|
||||
**새로 구현**:
|
||||
- Slack 인터랙션 핸들러 (rb8001 DMSkill 참조)
|
||||
- ~~APScheduler 통합~~ (✅ rb8001에 이미 구현됨)
|
||||
**기존 구현**:
|
||||
- collectors/google_news_collector.py (companyx_news_collector로 분리)
|
||||
- Slack 인터랙션 핸들러 (rb8001 연동)
|
||||
|
||||
### Phase 2: skill-publish (✅ 완료)
|
||||
**구현 상세**: [트러블슈팅 문서](../troubleshooting/250906_skill_publish_implementation.md) 참조
|
||||
|
||||
91
troubleshooting/250907_company_x_news_zero_articles.md
Normal file
91
troubleshooting/250907_company_x_news_zero_articles.md
Normal file
@ -0,0 +1,91 @@
|
||||
# Company-X 뉴스 15개 찾았는데 0개 전달 문제
|
||||
|
||||
## 작성일: 2025-09-07
|
||||
## 작성자: happybell80
|
||||
## 환경: rb8001, skill-news, Docker
|
||||
|
||||
## 문제 증상
|
||||
- skill-news가 Google에서 15개 뉴스 수집 성공
|
||||
- rb8001이 받은 기사는 0개
|
||||
- "오늘은 Company-X 관련 뉴스가 없습니다" 메시지 전송
|
||||
|
||||
## 원인 분석
|
||||
|
||||
### 1. 잘못된 중복 체크 위치
|
||||
```python
|
||||
# skill-news/app/api/news_endpoints.py (문제 코드)
|
||||
# 엔드포인트에서 ChromaDB로 중복 체크
|
||||
for article in articles:
|
||||
if not news_manager.check_duplicate(article): # 15개 모두 필터링
|
||||
new_articles.append(article)
|
||||
```
|
||||
|
||||
### 2. 파라미터 전달 문제
|
||||
- rb8001이 GET 요청만 보냄 (파라미터 없음)
|
||||
- 환경변수 split() 방식 오류 (공백 vs 쉼표)
|
||||
- exclude_keywords 미처리
|
||||
|
||||
## 해결 과정
|
||||
|
||||
### 1. rb8001 → skill-news 파라미터 전달 (POST 변경)
|
||||
```python
|
||||
# rb8001/app/skills/news_posting_skill.py
|
||||
response = await client.post( # GET → POST
|
||||
f"{self.skill_news_url}/api/news/google/companyx-search",
|
||||
json={
|
||||
"keywords": os.getenv("COMPANY_X_NEWS_KEYWORDS").split(","),
|
||||
"exclude_keywords": os.getenv("COMPANY_X_EXCLUDE_KEYWORDS").split(","),
|
||||
"max_items": int(os.getenv("COMPANY_X_NEWS_MAX_ITEMS", "10")),
|
||||
"days_back": int(os.getenv("COMPANY_X_NEWS_DAYS_BACK", "7"))
|
||||
}
|
||||
)
|
||||
```
|
||||
|
||||
### 2. 중복 체크 collector로 이동
|
||||
```python
|
||||
# companyx_news_collector.py
|
||||
- JSON 파일로 히스토리 관리 (/app/data/companyx_history.json)
|
||||
- 최근 100개 기사 기록 유지
|
||||
- collector 내부에서 중복 필터링
|
||||
```
|
||||
|
||||
### 3. 엔드포인트 단순화
|
||||
```python
|
||||
# 삭제된 코드
|
||||
- news_manager.check_duplicate() 제거
|
||||
- news_manager.save_articles() 제거
|
||||
- new_articles → articles 직접 사용
|
||||
```
|
||||
|
||||
### 4. Company-X 전용 봇 토큰
|
||||
```python
|
||||
# COMPANY_X_SLACK_BOT_TOKEN 사용
|
||||
self.slack_client = WebClient(token=os.getenv("COMPANY_X_SLACK_BOT_TOKEN"))
|
||||
```
|
||||
|
||||
### 5. 뉴스 없을 때 메시지 비활성화
|
||||
```python
|
||||
if not articles:
|
||||
return {"success": True, "articles_count": 0, "messages_sent": 0}
|
||||
```
|
||||
|
||||
## 환경변수 정리
|
||||
```bash
|
||||
# rb8001
|
||||
COMPANY_X_NEWS_KEYWORDS=컴퍼니 엑스,컴퍼니엑스,Company X
|
||||
COMPANY_X_EXCLUDE_KEYWORDS=광고,채용,구인
|
||||
COMPANY_X_NEWS_MAX_ITEMS=10
|
||||
COMPANY_X_NEWS_DAYS_BACK=7
|
||||
COMPANY_X_SLACK_BOT_TOKEN=xoxb-9417291383105-...
|
||||
```
|
||||
|
||||
## 핵심 교훈
|
||||
1. **중복 체크는 collector 책임** - 엔드포인트는 전달만
|
||||
2. **파라미터 명시적 전달** - 환경변수 의존 대신 POST로 전송
|
||||
3. **서비스 간 독립성** - skill-news는 rb8001 환경변수 모름
|
||||
4. **적절한 계층 분리** - Controller/Service/Collector 역할 명확히
|
||||
|
||||
## 결과
|
||||
- 새로운 Company-X 뉴스만 전달
|
||||
- 중복 뉴스 자동 필터링
|
||||
- 뉴스 없을 때 조용히 종료
|
||||
Loading…
x
Reference in New Issue
Block a user