From ed5f890fdae89b45bf5ea966b9b434a76b3708a7 Mon Sep 17 00:00:00 2001 From: Claude-51124 Date: Mon, 16 Mar 2026 12:46:16 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20slack=5Fcanvas=20=ED=85=8C=EC=9D=B4?= =?UTF-8?q?=EB=B8=94=20=EC=A0=95=EC=9D=98=20=EB=B0=8F=20Canvas=20=EA=B2=80?= =?UTF-8?q?=EC=A6=9D=20=EA=B2=B0=EA=B3=BC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Made-with: Cursor --- book/300_architecture/database/tables.md | 13 +++++++++++++ journey/ideas/slack_canvas_integration.md | 12 +++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/book/300_architecture/database/tables.md b/book/300_architecture/database/tables.md index ae55b91..d76a992 100644 --- a/book/300_architecture/database/tables.md +++ b/book/300_architecture/database/tables.md @@ -149,6 +149,19 @@ **제약조건**: `UNIQUE(slack_workspace_id, channel_id)` - 워크스페이스 내 채널 ID 중복 방지 +### slack_canvas +| 컬럼명 | 타입 | NULL | 설명 | +|--------|------|------|------------| +| id | UUID | NO | PK | +| slack_channel_id | UUID | NO | FK → slack_channel | +| canvas_id | VARCHAR(32) | NO | Slack Canvas/파일 ID (예: F0AL6L34CV9) | +| title | VARCHAR(255) | YES | Canvas 제목 (예: 온보딩 회의) | +| metadata | JSONB | YES | 추가 메타데이터 | +| created_at | TIMESTAMPTZ | NO | | +| updated_at | TIMESTAMPTZ | NO | | + +**제약조건**: `UNIQUE(canvas_id)` - Slack에서 canvas_id는 전역 고유 + --- ## 4. 사용자 설정 및 토큰 테이블 diff --git a/journey/ideas/slack_canvas_integration.md b/journey/ideas/slack_canvas_integration.md index 0e60129..fa384b8 100644 --- a/journey/ideas/slack_canvas_integration.md +++ b/journey/ideas/slack_canvas_integration.md @@ -152,7 +152,17 @@ settings: - **이미지 첨부**: 이미지는 외부 공개 URL을 사용하거나, Slack에 먼저 업로드한 후 `permalink`를 통해 참조해야 합니다. Base64 인코딩 방식 등은 지원되지 않습니다. - **데이터 보관 정책**: 로빙이 캔버스 내용을 외부 DB에 장기 보관하거나 인덱싱할 경우, Slack의 데이터 보관 및 사용 정책을 준수해야 합니다. 민감 정보 처리 시 특히 주의가 필요합니다. -## 5. 빠른 구현을 위한 체크리스트 +## 5. 검증 결과 (2025-03) + +**채널 탭 Canvas 읽기**: `files:read`만으로 가능함. + +- 채널: C0ALCV5S0FL (ir컨설팅서비스-및-랜딩페이지) +- Canvas "온보딩 회의": `files.list(types=canvas, channel=...)` → `files.info` → `url_private` GET으로 본문(HTML) 다운로드 가능 +- canvas_id: F0AL6L34CV9 +- `canvases.sections.lookup` / `canvases.edit`은 `canvases:read`/`canvases:write` 스코프 추가 필요 (현재 Company-X 봇에 없음) +- 검증 스크립트: `rb8001/scripts/test_canvas_access.py` + +## 6. 빠른 구현을 위한 체크리스트 1. **[ ]** 로빙의 Slack 앱 매니페스트에 `canvases:write`, `canvases:read`, `files:read` 스코프를 추가하고 앱을 재설치합니다. 2. **[ ]** `canvases.create`를 호출하여 첫 캔버스를 생성하고, 반환된 `canvas_id`를 저장하는 로직을 구현합니다.