- 7-8월 초기 구축 문서 12개를 _archive/troubleshooting/2025_07-08_initial_setup/로 이동 - book/300_architecture/390_human_in_the_loop_intent_learning.md를 journey/research/intent_classification/로 이동 (개발 여정 문서) - 빈 폴더 제거 (journey/assets/*)
109 lines
4.5 KiB
Markdown
109 lines
4.5 KiB
Markdown
# skill-publish 거짓 성공 메시지 문제
|
|
|
|
## 문제 정의
|
|
skill-publish가 큐에만 추가하고 200 OK 반환하는데, rb8001이 이를 실제 게시 성공으로 착각해 사용자에게 거짓 성공 메시지를 보내는 문제
|
|
|
|
## 발생일: 2025-09-08
|
|
## 작성자: Claude & happybell80
|
|
|
|
## 1. 증상
|
|
- Slack에 "✅ '뉴스제목' 게시 완료!" 메시지 표시
|
|
- 실제로는 Squarespace 로그인 실패로 게시 안 됨
|
|
- 큐에 4개 대기 중, 모두 queued 상태
|
|
- 사용자는 게시됐다고 믿음
|
|
|
|
## 2. 현재 동작 흐름
|
|
1. 사용자가 Slack에서 "홈페이지 게시" 버튼 클릭
|
|
2. rb8001이 skill-publish POST /publish 호출
|
|
3. skill-publish가 큐에 추가 후 즉시 200 OK + "success: true" 반환
|
|
4. rb8001이 200 받고 "✅ 게시 완료!" 메시지 (Line 336)
|
|
5. 백그라운드에서 실제 게시 시도 → Squarespace 타임아웃
|
|
6. 게시 실패했지만 사용자는 모름
|
|
|
|
## 3. 코드 위치
|
|
### rb8001/app/skills/news_posting_skill.py
|
|
- Line 298-311: skill-publish 호출
|
|
- Line 313: if response.status_code == 200
|
|
- Line 336: "✅ '{title}' 게시 완료!" 메시지
|
|
|
|
### skill-publish/app/main.py
|
|
- Line 70: await publisher_service.add_to_queue()
|
|
- Line 73-76: background_tasks.add_task()
|
|
- Line 79-82: 즉시 성공 응답 반환
|
|
|
|
### skill-publish/app/services/publisher_service.py
|
|
- Line 81-86: 큐에 'queued' 상태로 추가
|
|
- Line 97: 'processing' 상태로 변경
|
|
- Line 123: 'published' 상태 (성공 시)
|
|
- Line 131: 'failed' 상태 (실패 시)
|
|
- Line 145-156: get_status() 개별 상태 조회 존재
|
|
- Line 159: get_queue_info() 전체 큐 정보
|
|
|
|
### skill-publish/app/main.py
|
|
- Line 89-99: GET /status/{news_id} 엔드포인트 존재
|
|
|
|
## 4. 문제점
|
|
1. rb8001이 상태 확인 없이 즉시 "게시 완료" 메시지
|
|
2. rb8001이 큐 추가를 게시 성공으로 오해
|
|
3. 실패 시 사용자 알림 없음
|
|
4. /status/{news_id} API 있지만 rb8001이 사용 안 함
|
|
5. skill-publish Line 136-138: failed를 다시 queued로 바꿈 (재시도 로직)
|
|
|
|
## 5. 해결 방향
|
|
1. 메시지 변경: "게시 완료" → "게시 요청됨 (처리중)" ✅
|
|
2. rb8001이 /status/{news_id} 사용해 상태 체크 ✅
|
|
3. 30초마다 최대 3회 체크 (published/failed 될 때까지) ✅
|
|
4. response_url로 Slack 메시지 업데이트, 버튼 유지 ✅
|
|
5. rb8001 Line 378: error 필드 체크 추가 ✅
|
|
|
|
## 6. 2025-01-09 추가 수정사항
|
|
|
|
### 6.1 Slack 빈 ephemeral 응답 에러
|
|
- **문제**: rb8001/app/router/slack_handler.py Line 363에서 `{"response_type": "ephemeral", "text": ""}` 반환
|
|
- **증상**: "이 앱이 오류를 반환했습니다" 메시지
|
|
- **해결**: 빈 JSON `{}` 반환으로 변경
|
|
- **원인**: 0914eagle이 Sep 7에 추가한 코드
|
|
|
|
### 6.2 response_url 30초 만료 문제
|
|
- **문제**: Slack response_url이 30초 후 404 에러
|
|
- **해결**:
|
|
- 초기 메시지: "⏳ '제목' 게시 작업 진행중... (약 3분 소요)"
|
|
- 체크 간격: 10초 → 60초 (1분)
|
|
- 체크 횟수: 18회 → 3회
|
|
- 진행 메시지 제거, 성공/실패만 알림
|
|
|
|
### 6.3 company_name 필드 누락
|
|
- **문제**: skill-publish text_editor.py에서 company_name KeyError
|
|
- **해결**: NewsFormatter 모듈 추가
|
|
- 한글→영문 회사명 매핑 딕셔너리 (10개 회사)
|
|
- 요약문에서 회사명 추출 로직
|
|
- 조사 제거 처리 ('가', '는', '이' 등)
|
|
|
|
### 6.4 진행 상황 메시지 추가
|
|
- **추가 위치**: skill-publish 모든 서비스 모듈
|
|
- squarespace_editor.py: 네비게이션 단계
|
|
- squarespace_duplicator.py: 섹션 복제
|
|
- image_uploader.py: 이미지 업로드
|
|
- text_editor.py: 텍스트 편집
|
|
- content_saver.py: 저장 작업
|
|
|
|
### 6.5 Squarespace 편집 URL 수정
|
|
- **문제**: `https://www.company-x.partners/config` 접속 시 30초 타임아웃
|
|
- **원인**: 잘못된 URL 사용
|
|
- **해결**:
|
|
- 올바른 URL: `https://dodecahedron-hexahedron-pytp.squarespace.com/config/`
|
|
- config.py에 SQUARESPACE_EDIT_URL 추가
|
|
- networkidle → domcontentloaded 변경
|
|
|
|
### 6.6 게시 완료 URL 수정
|
|
- **변경**: news_id 기반 URL → 고정 URL
|
|
- **이전**: `https://www.company-x.partners/news/{news_id}`
|
|
- **이후**: `https://www.company-x.partners/news` (고정)
|
|
|
|
### 6.7 Gemini 요약 길이 초과 문제
|
|
- **문제**: 280-300자 제한 무시, 407자 요약 생성
|
|
- **해결**:
|
|
- 3회 재시도 로직 추가
|
|
- 2차 시도: "300자 초과시 패널티 1,000,000점" 경고
|
|
- 3차 시도: "최종 경고" 메시지
|
|
- 강제 자르기 제거 (내용 보존) |