Slack 앱 설치 가이드
CrewX Slack 봇을 워크스페이스에 연결하기 위한 단계별 지침입니다.
Quick Start
crewx-quickstart 사용 (권장):
npx crewx-quickstart
생성되는 파일:
crewx.yaml- 에이전트 설정.env.slack- 환경변수 템플릿start-slack.sh- Slack 봇 빠른 실행 스크립트slack-app-manifest.yaml- 사전 구성된 Slack 앱 설정
실행 후:
- 아래 Slack 앱 설정에서 자격증명 받기
.env.slack에 토큰 입력./start-slack.sh실행해서 봇 시작
Slack 앱 설정
통합을 위해 3개의 Slack 자격증명이 필요합니다. Slack 앱을 생성한 후 다음을 수집하여 안전하게 보관하세요:
- Bot User OAuth Token (
xoxb-…) - App-Level Token (
xapp-…) - Signing Secret
방법 1: 매니페스트 사용 (빠름)
범위와 이벤트를 수동으로 구성하고 싶지 않다면 이 저장소에 포함된 매니페스트를 가져올 수 있습니다.
- Slack 앱 대시보드로 이동합니다.
- Create New App → From an app manifest를 선택합니다.
- 워크스페이스를 선택하고 프로젝트 루트의
slack-app-manifest.yaml내용을 붙여넣습니다. - 요약을 검토하고 Create를 클릭합니다. 필요한 모든 범위, 이벤트 및 Socket Mode 설정이 미리 구성됩니다.
- 아래 섹션을 계속 진행하여 토큰을 발급하고 환경 변수를 구성합니다.
매니페스트에는 OAuth 범위, 이벤트 구독 및 Socket Mode 구성이 포함되어 있으므로 원하는 경우 수동 설정 단계를 건너뛸 수 있습니다.
방법 2: 수동 설정
단계 1: Slack 앱 생성
- https://api.slack.com/apps를 방문합니다.
- Create New App을 클릭합니다.
- From scratch를 선택합니다.
- 앱 이름으로
CrewX를 입력합니다. - 대상 워크스페이스를 선택합니다.
- Create App을 클릭합니다.
단계 2: Bot Token 범위 추가 ⚡
중요: 앱을 설치하고 토큰을 받기 전에 범위를 구성해야 합니다.
-
왼쪽 사이드바에서 OAuth & Permissions를 엽니다.
-
Scopes 섹션으로 스크롤합니다.
-
Bot Token Scopes 아래에서 Add an OAuth Scope를 클릭합니다.
-
다음 범위를 각각 추가합니다:
범위 목적 app_mentions:read봇이 언급될 때 메시지 읽기 chat:write봇으로 메시지 전송 channels:history채널 메시지 읽기 (스레드 기록) channels:read채널 메타데이터 보기 reactions:write이모지 반응 추가 (봇 상태 표시기) reactions:read기존 반응 읽기 im:history다이렉트 메시지 기록 읽기 groups:history비공개 채널 기록 읽기 (선택사항)
✅ 계속하기 전에 모든 범위가 추가되었는지 확인하세요.
반응이 필요한 이유는? 봇은 요청을 처리하는 동안 👀로 반응하고, 성공할 때 ✅로, 오류가 발생할 때 ❌로 반응합니다. 이를 통해 채널에서 한눈에 상태 업데이트를 볼 수 있습니다.
기록 범위가 필요한 이유는?
channels:history는 스레드 컨텍스트를 재구성하는 데 필요합니다.im:history는 다이렉트 메시지 내에서 동일한 동작을 활성화합니다.
단계 3: Socket Mode 활성화 🔌
- 사이드바에서 Socket Mode를 엽니다.
- Enable Socket Mode를 On으로 토글합니다.
- 프롬프트가 나타나면:
- 토큰 이름으로
crewx-socket을 입력합니다. - Add Scope를 클릭하고
connections:write를 선택한 후 Generate를 클릭합니다.
- 토큰 이름으로
- 생성된 App-Level Token (
xapp-…)을 복사하여 안전하게 보관합니다.나중에 다시 볼 수 없습니다.
예시: xapp-1-A01234567-1234567890123-abcdefghijklmnop
단계 4: 이벤트 구독 구성 📡
-
사이드바에서 Event Subscriptions를 엽니다.
-
Enable Events를 On으로 토글합니다.
-
Subscribe to bot events로 스크롤하고 Add Bot User Event를 클릭합니다.
-
다음 이벤트를 추가합니다:
이벤트 목적 app_mention누군가 @crewx를 언급할 때 트리거 message.channels채널 메시지 수신 (선택사항) -
Save Changes를 클릭합니다.
단계 5: 앱을 워크스페이스에 설치 🏢
- 사이드바에서 Install App을 엽니다.
- Install to Workspace를 클릭합니다.
- 요청된 권한 (메시지 액세스, 채널 정보, 메시지 전송)을 검토합니다.
- Allow를 클릭합니다.
- 설치 후 표시되는 Bot User OAuth Token (
xoxb-…)을 복사합니다.
예시: xoxb-XXXXXXXXXXXX-XXXXXXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXX
단계 6: Signing Secret 수집 🔐
- Basic Information으로 이동합니다.
- App Credentials 아래에서 Signing Secret을 찾습니다.
- Show를 클릭하고 값을 복사하여 비밀 관리자에 저장합니다.
3개 모두의 자격증명 (
xoxb,xapp,Signing Secret)을 보관하세요. 곧 로컬 환경 파일에 저장됩니다.
설정
환경 변수
프로젝트 루트에 .env.slack 파일을 생성합니다:
SLACK_BOT_TOKEN=xoxb-your-bot-token
SLACK_APP_TOKEN=xapp-your-app-level-token
SLACK_SIGNING_SECRET=your-signing-secret
# 선택적 설정
SLACK_LOG_LEVEL=info
SLACK_MAX_RESPONSE_LENGTH=400000
이 파일을 소스 제어에 커밋하지 마세요.
봇 실행
환경 변수가 준비되면 Slack 봇을 시작합니다:
# 한 번 빌드합니다 (아직 하지 않았다면)
npm run build
# 기본값: Claude 에이전트를 사용한 쿼리 전용 모드
source .env.slack && crewx slack
# 에이전트가 실행 작업을 수행하도록 허용 (파일 변경, 마이그레이션 등)
source .env.slack && crewx slack --mode execute
# Mention-Only 모드: @멘션했을 때만 봇이 응답
source .env.slack && crewx slack --mention-only
# 기본 에이전트 전환
source .env.slack && crewx slack --agent gemini
source .env.slack && crewx slack --agent copilot
# 상세 로깅 활성화
source .env.slack && crewx slack --log
source .env.slack && crewx slack --agent gemini --log
다음이 표시됩니다:
⚡️ CrewX Slack Bot is running!
📱 Socket Mode: Enabled
🤖 Using default agent for Slack: claude
⚙️ Slack bot mode: query
사용 옵션
Mention-Only 모드
기본적으로 CrewX Slack Bot은 초대된 채널의 모든 메시지에 응답합니다. Mention-Only 모드는 명시적으로 @멘션했을 때만 봇이 응답하도록 동작을 변경합니다.
사용 시기
Mention-Only를 사용해야 할 때:
- 봇이 모든 메시지에 AI 응답이 필요하지 않은 바쁜 채널에 있을 때
- 노이즈와 토큰 사용량을 줄이고 싶을 때
- 팀이 옵트인 AI 지원을 선호할 때
- 봇이 다른 봇이나 워크플로우와 공간을 공유할 때
기본 모드를 사용해야 할 때:
- 전용 AI 지원 채널
- AI 컨텍스트가 항상 유용한 소규모 팀 채널
- 원활하고 항상 사용 가능한 AI 지원을 원할 때
작동 방식
기본 모드 (항상 듣기):
사용자: "인증을 어떻게 구현하나요?"
봇: 🤖 [자동으로 응답]
Mention-Only 모드:
사용자: "인증을 어떻게 구현하나요?"
봇: [응답 없음]
사용자: "@crewx 인증을 어떻게 구현하나요?"
봇: 🤖 [멘션했을 때 응답]
Mention-Only 모드로 시작하기
# Mention-only로 쿼리 모드
source .env.slack && crewx slack --mention-only
# Mention-only로 실행 모드
source .env.slack && crewx slack --mode execute --mention-only
# 특정 에이전트와 함께
source .env.slack && crewx slack --agent gemini --mention-only
다이렉트 메시지
Mention-Only 모드는 다이렉트 메시지에 영향을 주지 않습니다. 봇은 이 설정과 관계없이 항상 DM에 응답합니다:
# 두 모드 모두에서 DM은 항상 작동
[@crewx에게 다이렉트 메시지]
사용자: "이 오류를 디버그하는 데 도움을 줘"
봇: 🤖 [DM에서 항상 응답]
비교표
| 기능 | 기본 모드 | Mention-Only 모드 |
|---|---|---|
| 채널 메시지 | 모든 메시지 | @멘션만 |
| 스레드 답변 | 스레드의 모든 메시지 | @멘션했을 때만 |
| 다이렉트 메시지 | ✅ 응답 | ✅ 응답 |
| 토큰 사용량 | 높음 (모든 메시지) | 낮음 (옵트인만) |
| 최적 사용처 | 전용 AI 채널 | 바쁜 다목적 채널 |
팁
- 워크스페이스별로 모드 선택 - 서로 다른 Slack 워크스페이스에는 서로 다른 모드가 필요할 수 있습니다
- 채널과 결합 -
#ai-help채널에서는 기본 모드 사용,#general에서는 mention-only 사용 - 팀 선호도 - 팀에게 어떤 모드를 선호하는지 물어보세요
- 둘 다 테스트 - 각 모드를 시도하여 워크플로우에 맞는 것을 확인하세요
테스트
- 채널에 봇을 초대합니다:
/invite @crewx - 메시지를 보냅니다:
@crewx Hello! What can you help me with? - 봇이 스레드에서 응답합니다 ✔️
문제 해결
봇이 응답하지 않음
- 봇이 채널에 초대되었는지 확인합니다 (
/invite @crewx). - 3개 모두의 토큰을 확인하고 앞뒤 공백이 없는지 확인합니다.
- Socket Mode가 https://api.slack.com/apps에서 활성화되어 있는지 확인합니다.
app_mention및 기타 필수 이벤트가 구독되어 있는지 확인합니다.
"Missing Scope" 오류
봇에 권한이 없습니다. 단계 2로 돌아가 모든 범위가 있는지 확인합니다:
app_mentions:readchat:writechannels:historychannels:readreactions:writereactions:readim:historygroups:history(선택사항)
범위를 추가한 후 앱을 다시 설치합니다:
- OAuth & Permissions을 엽니다.
- Install App → Reinstall to Workspace를 클릭합니다.
- 업데이트된 범위 목록을 승인합니다.
스레드 컨텍스트가 없음
- 기록 범위 (
channels:history,im:history)가 있는지 확인합니다. - 새 범위를 추가한 후 앱을 다시 설치하여 권한 부여를 새로 고칩니다.
상세 로그 보기
source .env.slack && crewx slack --log-level debug
다음 단계
보안
.env.slack을 소스 제어에 커밋하지 마세요.- 공개 채널이나 저장소에서 토큰을 공유하지 마세요.
- 자격증명이 유출된 경우 https://api.slack.com/apps에서 즉시 로테이션합니다.
모두 완료되었습니다! 🎉 CrewX는 Slack 내에서 작동할 준비가 되었습니다.