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