Add: 뉴스 시스템 통합 계획 문서
- 현재 구현 상태 명확히 기록 - Slack 인터랙티브 버튼 구현 계획 - rb8001 ↔ skill-publish 연동 방안 - 확인 필요/결정 필요 사항 명시 - 150줄 제한 준수
This commit is contained in:
parent
800ce99039
commit
1de9764aa8
162
plan/250906_news_system_integration.md
Normal file
162
plan/250906_news_system_integration.md
Normal file
@ -0,0 +1,162 @@
|
||||
# 뉴스 시스템 통합 계획
|
||||
|
||||
## 작성일: 2025-09-06
|
||||
## 작성자: happybell80
|
||||
## 목적: skill-news, rb8001, skill-publish 통합 연동
|
||||
|
||||
## 1. 현재 구현 상태
|
||||
|
||||
### 구현 완료 (확인됨)
|
||||
- **skill-news** (포트 8505): 뉴스 수집, 스크래핑, 요약 API 운영 중
|
||||
- **skill-publish** (포트 8511): Squarespace 게시 서비스 준비 완료
|
||||
- **APScheduler**: rb8001/main.py:207 평일 09:00 자동 실행
|
||||
- **DM 전송**: rb8001/app/skills/dm_skill.py:384 텍스트 메시지 전송
|
||||
- **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 응답 메시지 미구현
|
||||
|
||||
## 2. 통합 플로우
|
||||
|
||||
### 2.1 뉴스 수집 및 DM 전송 (09:00)
|
||||
```
|
||||
APScheduler → skill-news:8505/api/news/search
|
||||
→ rb8001 dm_skill.get_news_content()
|
||||
→ Slack DM 전송 (현재: 텍스트만)
|
||||
```
|
||||
|
||||
### 2.2 사용자 인터랙션 (목표)
|
||||
```
|
||||
사용자 버튼 클릭 → rb8001/slack/interactive
|
||||
→ 검증 및 처리
|
||||
→ skill-publish 호출
|
||||
```
|
||||
|
||||
### 2.3 게시 프로세스 (목표)
|
||||
```
|
||||
rb8001 → POST skill-publish:8511/publish
|
||||
→ Squarespace 자동 게시
|
||||
→ 결과 반환
|
||||
→ Slack DM 알림
|
||||
```
|
||||
|
||||
## 3. 필요 구현 사항
|
||||
|
||||
### 3.1 Slack Block Kit 메시지 (rb8001)
|
||||
**위치**: dm_skill.py:send_daily_summary_dm()
|
||||
```python
|
||||
blocks = [
|
||||
{
|
||||
"type": "section",
|
||||
"text": {"type": "mrkdwn", "text": f"*{title}*\n{summary}"},
|
||||
"accessory": {
|
||||
"type": "button",
|
||||
"text": {"type": "plain_text", "text": "게시"},
|
||||
"action_id": f"publish_news_{news_id}",
|
||||
"value": news_id
|
||||
}
|
||||
}
|
||||
]
|
||||
```
|
||||
**확인 필요**: Block Kit 권한, 메시지 구조
|
||||
|
||||
### 3.2 Interactive Endpoint (rb8001)
|
||||
**위치**: main.py 또는 slack_endpoint.py
|
||||
```python
|
||||
@app.post("/slack/interactive")
|
||||
async def handle_interaction(request: Request):
|
||||
# payload 파싱
|
||||
# action_id 확인 (publish_news_*)
|
||||
# skill-publish 호출
|
||||
# 결과 응답
|
||||
```
|
||||
**확인 필요**: Slack App 설정의 Interactive URL
|
||||
|
||||
### 3.3 skill-publish 연동 (rb8001)
|
||||
**위치**: 새 파일 app/skills/publish_integration.py
|
||||
```python
|
||||
async def publish_to_squarespace(news_data):
|
||||
async with httpx.AsyncClient() as client:
|
||||
response = await client.post(
|
||||
"http://skill-publish:8511/publish",
|
||||
json=news_data
|
||||
)
|
||||
```
|
||||
**결정 필요**: 내부 통신 방식 (Docker network vs localhost)
|
||||
|
||||
### 3.4 데이터 저장 전략
|
||||
**현재**: JSON 파일 (/app/data/news_state.json)
|
||||
**향후**: PostgreSQL rb_news 테이블
|
||||
**결정 필요**: 마이그레이션 시점, 스키마 설계
|
||||
|
||||
## 4. 환경변수 설정
|
||||
|
||||
### rb8001 (.env)
|
||||
```bash
|
||||
SKILL_PUBLISH_URL=http://skill-publish:8511 # 확인 필요
|
||||
SLACK_APP_TOKEN=xapp-... # Interactive 필요시
|
||||
```
|
||||
|
||||
### skill-publish (.env)
|
||||
```bash
|
||||
# 이미 설정됨 (포트 8511)
|
||||
```
|
||||
|
||||
## 5. Slack App 설정
|
||||
**확인 필요**:
|
||||
- Interactivity & Shortcuts 활성화 여부
|
||||
- Request URL: https://ro-being.com/api/slack/interactive
|
||||
- OAuth Scopes: chat:write, commands, im:history
|
||||
|
||||
## 6. 구현 우선순위
|
||||
|
||||
### Phase 1 (즉시)
|
||||
1. Slack Block Kit 메시지 구현
|
||||
2. Interactive endpoint 추가
|
||||
3. 테스트 (버튼 클릭 → 로그 확인)
|
||||
|
||||
### Phase 2 (다음 주)
|
||||
1. skill-publish 연동 코드
|
||||
2. 게시 결과 Slack 알림
|
||||
3. 상태 추적 (JSON 기반)
|
||||
|
||||
### Phase 3 (DB 준비 후)
|
||||
1. rb_news 테이블 생성
|
||||
2. JSON → DB 마이그레이션
|
||||
3. 이력 조회 API
|
||||
|
||||
## 7. 테스트 시나리오
|
||||
1. 수동 트리거: POST rb8001:8001/api/cron/daily-summary
|
||||
2. 버튼 표시 확인
|
||||
3. 클릭 이벤트 수신 확인
|
||||
4. skill-publish 호출 확인
|
||||
5. 게시 완료 확인
|
||||
|
||||
## 8. 리스크 및 대안
|
||||
- **Slack 권한 부족**: App 재설치 필요할 수 있음
|
||||
- **Docker 네트워크**: 통신 실패시 localhost 사용
|
||||
- **DB 지연**: JSON 파일로 충분히 운영 가능
|
||||
|
||||
## 9. 모니터링
|
||||
```bash
|
||||
# Interactive 이벤트 확인
|
||||
docker logs rb8001 | grep interactive
|
||||
|
||||
# 게시 요청 확인
|
||||
docker logs skill-publish | grep publish
|
||||
|
||||
# Slack 전송 확인
|
||||
docker logs rb8001 | grep postMessage
|
||||
```
|
||||
|
||||
## 10. 완료 기준
|
||||
- [ ] 뉴스에 게시 버튼 표시
|
||||
- [ ] 버튼 클릭시 게시 프로세스 시작
|
||||
- [ ] Squarespace 게시 완료
|
||||
- [ ] 사용자에게 결과 알림
|
||||
- [ ] 상태 저장 및 조회 가능
|
||||
Loading…
x
Reference in New Issue
Block a user