From cb7e728349c2c99ea111e0c166167b2c4942ec76 Mon Sep 17 00:00:00 2001 From: happybell80 Date: Tue, 14 Oct 2025 21:33:22 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20Slack=20Lists=20=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EC=B2=A8=EB=B6=80=203=EB=8B=A8=EA=B3=84=20=EA=B5=AC=EC=B2=B4?= =?UTF-8?q?=ED=99=94=20=EB=B0=8F=2081=EC=A4=84=EB=A1=9C=20=EC=B6=95?= =?UTF-8?q?=EC=86=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../251014_slack_lists_file_attachment.md | 60 ++++++++----------- 1 file changed, 24 insertions(+), 36 deletions(-) diff --git a/troubleshooting/251014_slack_lists_file_attachment.md b/troubleshooting/251014_slack_lists_file_attachment.md index a17314c..783c290 100644 --- a/troubleshooting/251014_slack_lists_file_attachment.md +++ b/troubleshooting/251014_slack_lists_file_attachment.md @@ -45,49 +45,37 @@ coldmail_briefing.py:207에서 document_id를 attachment에 전달하지만, Sla - 13번 줄 이후: `router.include_router(files.router, tags=["Files"])` ### 3단계: coldmail_briefing.py 통합 -- coldmail_briefing.py:207 이전에 파일 변환 로직 추가: - 1. document_id → GET skill-rag-file/api/download/{document_id} - 2. 다운로드된 파일 → POST skill-slack/api/v1/files/upload - 3. file_id 받아서 attachment 필드에 전달 -- coldmail_briefing.py:207: `[f"document_{doc_id}"...]` → `[file_id]` 변경 + +**환경변수 추가** (coldmail_briefing.py:19 이후): +- `SKILL_RAG_FILE_URL = os.getenv("SKILL_RAG_FILE_URL", "http://localhost:8508")` + +**파일 변환 로직** (coldmail_briefing.py:189 이후, 191 이전): +- GET `{SKILL_RAG_FILE_URL}/api/download/{document_ids[0]}` → pdf_content +- aiohttp.FormData(): file, title 추가 +- POST `{SKILL_SLACK_URL}/api/v1/files/upload` → file_id +- 실패 시 file_id = None, logger.error() + +**attachment 필드 수정** (coldmail_briefing.py:207): +- 변경 전: `[f"document_{doc_id}" for doc_id in document_ids][:1]` +- 변경 후: `[file_id] if file_id else []` --- -## 테스트 완료 (2025-10-14) +## 테스트 완료 -### 테스트 환경 -- 워크스페이스: 로빙팀 (T0925SXPS4D), 리스트: F09J1HPPQJG -- 채널: C09HR9BMT51, 토큰: ROBEING_SLACK_BOT_TOKEN - -### 검증 결과 -- files_upload_v2(file, title) 성공 (channel 파라미터 없이 업로드) -- slackLists.items.create 성공, attachment: [file_id] 전달 확인 -- 테스트 파일: skill-slack/tests/test_lists_with_file.py, test_lists_all_fields.py - -### 테스트 리스트 컬럼 (F09J1HPPQJG) -- Col00: checkbox, Col01: user, Col02: date -- Col09HQTDUM0T: rich_text(name) -- Col09JATRA4GZ: email, Col09HGCGB45D: attachment, Col09JRU1U1FA: checkbox - -### 운영 환경 확인 필요 -- Company X 리스트 (F09L4S2C6BG) 컬럼 ID는 다를 수 있음 -- Slack App 재설치 후 lists:read/write 권한 확인 필요 +- 워크스페이스: T0925SXPS4D, 리스트: F09J1HPPQJG +- files_upload_v2(file, title) 성공 (channel 파라미터 불필요) +- attachment: [file_id] 전달 확인 +- 테스트: skill-slack/tests/test_lists_with_file.py --- ## 교훈 -### channel 파라미터 필수 여부 미확인 -- files_upload_v2는 channel 없이도 업로드 가능 -- 문서(test_slack_lists.py:192)에 명시되어 있었으나 미확인 -- 교훈: 테스트 코드 주석과 구현 예시 우선 확인 +### files_upload_v2 channel 파라미터 +- channel 없이도 업로드 가능하나 문서 미확인 +- 교훈: 테스트 코드 주석 우선 확인 -### 테스트/운영 환경 리스트 구조 차이 -- F09J1HPPQJG(테스트)와 F09L4S2C6BG(운영)는 별도 리스트 -- 컬럼 ID가 다를 가능성 있음 -- 교훈: 운영 배포 전 실제 리스트 구조 확인 필수 - -### Slack App scope 재설치 프로세스 -- scope 추가 시 각 워크스페이스별 재설치 필요 -- 앱 소유자만 api.slack.com/apps 접근 가능 -- 교훈: 멀티 워크스페이스 앱은 OAuth URL 생성하여 관리자에게 전달 +### 리스트 컬럼 구조 +- F09J1HPPQJG(테스트) ≠ F09L4S2C6BG(운영) +- 교훈: 운영 배포 전 실제 컬럼 ID 확인 필수