DOCS/troubleshooting/250907_company_x_news_zero_articles.md
2025-09-08 13:00:27 +09:00

100 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 (2025-09-08 수정)
- companyx_news_posting.json으로 전체 데이터 저장
- 수집/스크래핑/요약 단계별 업데이트
- 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 뉴스만 전달
- 중복 뉴스 자동 필터링
- 뉴스 없을 때 조용히 종료
## 추가 문제 해결 (2025-09-09)
### rb8001 타임아웃 문제
- **증상**: skill-news가 6개 기사 반환했지만 rb8001이 못 받음
- **원인**: httpx.AsyncClient timeout=30초 < 실제 처리 시간 210초
- **처리 시간**: 스크래핑(6개×30초) + 요약(6개×5초) = 210초
- **해결**: rb8001/app/skills/news_posting_skill.py:61 timeout=300.0으로 증가
- **확인**: 6개 기사 모두 받아서 Slack 전송 성공 (ts: 1757265893.014689)
- **상태**: 완전 해결됨