docs: 뉴스 시스템 통합 계획 업데이트 - companyx-search 엔드포인트 추가
This commit is contained in:
parent
742cc48642
commit
0aa1393058
@ -31,11 +31,11 @@
|
||||
|
||||
### 2.1 뉴스 수집 및 채널 전송
|
||||
```
|
||||
APScheduler → skill-news:8505/api/news/search
|
||||
APScheduler → skill-news:8505/api/news/google/companyx-search
|
||||
→ rb8001/app/skills/news_posting_skill.py
|
||||
→ Slack 채널 전송
|
||||
```
|
||||
**참고**: 고급 검색 기능 company-x_hompage에 구현됨
|
||||
**구현**: companyx_news_collector.py (OR 연산자, 제외 키워드 적용)
|
||||
|
||||
### 2.2 사용자 인터랙션 (목표)
|
||||
```
|
||||
@ -54,10 +54,18 @@ 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)
|
||||
**검색식**: `"컴퍼니엑스" OR "Company X" -광고 -채용 -구인`
|
||||
**환경변수**: COMPANY_X_NEWS_KEYWORDS (기본값 내장)
|
||||
|
||||
### 3.1 Slack Block Kit 메시지 (rb8001)
|
||||
**위치**: app/skills/news_posting_skill.py (신규)
|
||||
**함수**: send_news_for_posting(), create_news_blocks()
|
||||
**참고**: naver_startup_news_service.py
|
||||
**위치**: app/skills/news_posting_skill.py (신규 생성)
|
||||
**함수**:
|
||||
- `send_news_for_posting()`: 채널에 뉴스 전송
|
||||
- `create_news_blocks()`: Block Kit 메시지 생성
|
||||
- `process_news_batch()`: APScheduler에서 호출
|
||||
```python
|
||||
blocks = [
|
||||
{
|
||||
@ -72,20 +80,18 @@ blocks = [
|
||||
}
|
||||
]
|
||||
```
|
||||
**확인됨**: Block Kit 구조 (250828_slack_message_formatting_guide.md 참조)
|
||||
**참고**: naver_startup_news_service.py, dm_skill.py:384 (DM 전송 로직)
|
||||
|
||||
### 3.2 Interactive Endpoint (rb8001)
|
||||
**위치**: main.py 또는 slack_endpoint.py
|
||||
**위치**: main.py:248 (slack_events 아래 추가)
|
||||
```python
|
||||
@app.post("/slack/interactive")
|
||||
async def handle_interaction(request: Request):
|
||||
# payload 파싱
|
||||
# action_id 확인 (publish_news_*)
|
||||
# skill-publish 호출
|
||||
# 결과 응답
|
||||
@app.post("/api/slack/interactive")
|
||||
async def slack_interactive(request: Request):
|
||||
return await handle_interactive(request) # slack_handler.py
|
||||
```
|
||||
**구현 필요**: 엔드포인트 없음 (새로 구현 필요)
|
||||
**확인 필요**: Slack App 설정의 Interactive URL
|
||||
**핸들러**: slack_handler.py에 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 내부 함수
|
||||
@ -97,6 +103,7 @@ async def publish_to_squarespace(news_data):
|
||||
json=news_data
|
||||
)
|
||||
```
|
||||
**호출 위치**: slack_handler.handle_interactive() → publish_to_squarespace()
|
||||
**결정**: localhost 사용 (rb8001이 모든 스킬을 localhost로 호출 중)
|
||||
|
||||
### 3.4 데이터 저장 전략
|
||||
@ -109,9 +116,10 @@ async def publish_to_squarespace(news_data):
|
||||
### rb8001 (.env)
|
||||
```bash
|
||||
COMPANY_X_NEWS_CHANNEL_ID=C09CP4MDX71
|
||||
COMPANY_X_NEWS_KEYWORDS=컴퍼니엑스,COMPANY X,Company-X
|
||||
COMPANY_X_NEWS_KEYWORDS=컴퍼니엑스,컴퍼니 엑스,Company X
|
||||
COMPANY_X_NEWS_SCHEDULE=0 10 * * 1-5 # cron
|
||||
SKILL_PUBLISH_URL=http://localhost:8511
|
||||
SKILL_NEWS_URL=http://localhost:8505
|
||||
```
|
||||
|
||||
### skill-publish (.env)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user