# Coldmail Workflow LangGraph 테스트 **날짜**: 2025-10-15 **작성자**: Claude **관련 파일**: - `rb8001/app/services/workflows/coldmail_workflow.py` - `rb8001/app/services/coldmail_processor.py:73` - `rb8001/.env:43,98-99,139` --- ## 배경 LangGraph 기반 coldmail workflow 테스트 (Priority 2,3,4 완료 후) - 코드 단순화: 316줄 → 114줄 - 노드: fetch → filter → process → send --- ## 문제 1: Docker 빌드 타임아웃 **증상**: `INFO: pip is looking at multiple versions of langchain-openai...` **원인**: - requirements.txt:20 `openai==1.6.1` (구버전) - langchain-openai는 `openai>1.109.1` 필요 - 버전 불일치로 dependency resolver 타임아웃 **해결**: requirements.txt:20,40-42 - openai>=1.110.0 - langchain==0.3.27 - langchain-openai==0.3.35 - langgraph==0.6.10 --- ## 문제 2: PDF 업로드 중복 에러 **증상**: `Failed to upload [공문]...pdf: 400 - File already exists for this team` **원인**: - 이전 테스트 파일이 team_document 테이블에 남아있음 - file_hash 중복 체크로 재업로드 차단 **해결**: PostgreSQL 직접 접속하여 삭제 ```bash ssh -i ~/.ssh/id_rsa_deploy -p 51123 admin@192.168.219.45 \ "PGPASSWORD=robeings psql -h localhost -U robeings -d main_db -c \ \"DELETE FROM team_document WHERE id IN (...);\"" ``` --- ## 문제 3: Slack 401 Unauthorized **증상**: ``` Failed to upload file to Slack: 401 Failed to create list item: 401 ``` **원인 1**: 토큰 워크스페이스 불일치 - 테스트 List F09J1HPPQJG는 Robeing 워크스페이스 (T0925SXPS4D) - .env:98 SLACK_BOT_TOKEN이 Company-X 토큰 사용 중 **해결 1**: .env:98-99 - SLACK_BOT_TOKEN을 Robeing 토큰으로 변경 (xoxb-9073915808149...) - SLACK_LIST_ID=F09J1HPPQJG 유지 **원인 2**: API Key 누락 - `{"detail":"API key is missing"}` - SKILL_SLACK_API_KEY 환경변수 없음 **해결 2**: .env:43 - SKILL_SLACK_API_KEY=skill-slack-api-key-2025 추가 **재시작**: `docker compose down && docker compose up -d` (restart 불가) --- ## 문제 4: Lists API invalid_arguments **증상**: `Failed to create list item: 400 - invalid_arguments` **원인**: IR 분석 실패로 모든 필드 "N/A" 반환 - coldmail_processor.py:73에서 business_area="N/A" 가져옴 - company_name="" → Lists API 거부 **상태**: 미해결 (IR 분석 개선 필요) --- ## 검증 결과 **성공**: - ✅ LangGraph 워크플로우 정상 동작 - ✅ Lists API 통합 성공 (테스트 아이템 Rec09LJQYLAH2 생성) - ✅ Robeing 토큰 인증 성공 **실패**: - ❌ IR 분석 실패 (모든 필드 "N/A") - ❌ company_name="" → Lists API 에러 --- ## 교훈 ### 테스트 환경 설정 - List ID와 SLACK_BOT_TOKEN의 워크스페이스 일치 필수 확인 - 환경변수 체크리스트 작성 (SKILL_SLACK_API_KEY 등) - 테스트 전 DB 중복 데이터 정리 ### 에러 핸들링 - IR 분석 실패 시 "N/A" 대신 유효한 기본값 사용 - Lists API 전송 전 필드 검증 필요 ### 배포 프로세스 - .env 수정 후 `docker compose down && up -d` (restart 불가) - 로그 확인 순서: rb8001 → skill-slack → skill-rag-file --- ## 남은 작업 1. IR 분석 개선 (ChromaDB 검색/LLM 프롬프트) 2. coldmail_processor.py:73 필드 검증 추가 3. 부분 실패 시 에러 핸들링 강화