개요
Slack 커넥터는 Slack 워크스페이스의 채널 메시지를 가져와서 Fess 인덱스에 등록하는 기능을 제공합니다.
이 기능을 사용하려면 fess-ds-slack 플러그인이 필요합니다.
지원 콘텐츠
퍼블릭 채널 메시지
프라이빗 채널 메시지
파일 첨부(옵션)
전제조건
플러그인 설치가 필요합니다
Slack App 생성과 권한 설정이 필요합니다
OAuth Access Token 취득이 필요합니다
플러그인 설치
관리 화면의 “시스템” → “플러그인”에서 설치합니다:
Maven Central에서 ``fess-ds-slack-X.X.X.jar``를 다운로드
플러그인 관리 화면에서 업로드하여 설치
Fess 재시작
또는 자세한 내용은 플러그인 를 참조하세요.
설정 방법
관리 화면에서 “크롤러” → “데이터 스토어” → “새로 만들기”에서 설정합니다.
기본 설정
| 항목 | 설정 예 |
|---|---|
| 이름 | Company Slack |
| 핸들러 이름 | SlackDataStore |
| 활성화 | 켬 |
파라미터 설정
token=xoxp-your-token-here
channels=general,random
file_crawl=false
include_private=false
파라미터 목록
| 파라미터 | 필수 | 설명 |
|---|---|---|
token | 예 | Slack 앱의 OAuth Access Token |
channels | 예 | 크롤링 대상 채널(쉼표 구분 또는 *all) |
file_crawl | 아니오 | 파일도 크롤링(기본값: false) |
include_private | 아니오 | 프라이빗 채널도 포함(기본값: false) |
스크립트 설정
title=message.user + " #" + message.channel
digest=message.text + "\n" + message.attachments
content=message.text
created=message.timestamp
timestamp=message.timestamp
url=message.permalink
사용 가능한 필드
| 필드 | 설명 |
|---|---|
message.text | 메시지 텍스트 콘텐츠 |
message.user | 메시지 발신자의 표시 이름 |
message.channel | 메시지가 전송된 채널명 |
message.timestamp | 메시지 전송 일시 |
message.permalink | 메시지의 퍼머링크 |
message.attachments | 첨부 파일의 폴백 정보 |
Slack App 설정
1. Slack App 생성
https://api.slack.com/apps 에 접속:
“Create New App” 클릭
“From scratch” 선택
앱 이름 입력(예: Fess Crawler)
워크스페이스 선택
“Create App” 클릭
2. OAuth & Permissions 설정
“OAuth & Permissions” 메뉴에서:
**Bot Token Scopes**에 다음을 추가:
퍼블릭 채널만의 경우:
channels:history- 퍼블릭 채널 메시지 읽기channels:read- 퍼블릭 채널 정보 읽기
프라이빗 채널도 포함하는 경우(include_private=true):
channels:historychannels:readgroups:history- 프라이빗 채널 메시지 읽기groups:read- 프라이빗 채널 정보 읽기
파일도 크롤링하는 경우(file_crawl=true):
files:read- 파일 콘텐츠 읽기
3. 앱 설치
“Install App” 메뉴에서:
4. 채널에 추가
크롤링 대상 채널에 App을 추가:
Slack에서 채널 열기
채널 이름 클릭
“통합” 탭 선택
“앱 추가” 클릭
생성한 앱 추가
사용 예
특정 채널 크롤링
파라미터:
token=xoxb-your-slack-bot-token-here
channels=general,random,tech-discussion
file_crawl=false
include_private=false
스크립트:
title=message.user + " #" + message.channel
digest=message.text + "\n" + message.attachments
content=message.text
created=message.timestamp
timestamp=message.timestamp
url=message.permalink
모든 채널 크롤링
파라미터:
token=xoxb-your-slack-bot-token-here
channels=*all
file_crawl=false
include_private=false
스크립트:
title=message.user + " #" + message.channel
content=message.text
created=message.timestamp
url=message.permalink
프라이빗 채널 포함 크롤링
파라미터:
token=xoxb-your-slack-bot-token-here
channels=*all
file_crawl=false
include_private=true
스크립트:
title=message.user + " #" + message.channel
digest=message.text
content=message.text + "\n첨부: " + message.attachments
created=message.timestamp
url=message.permalink
파일 포함 크롤링
파라미터:
token=xoxb-your-slack-bot-token-here
channels=general,random
file_crawl=true
include_private=false
스크립트:
title=message.user + " #" + message.channel
content=message.text
created=message.timestamp
url=message.permalink
상세 메시지 정보 포함
스크립트:
title="[" + message.channel + "] " + message.user
content=message.text
digest=message.text.substring(0, Math.min(200, message.text.length()))
created=message.timestamp
timestamp=message.timestamp
url=message.permalink
문제 해결
인증 오류
증상: invalid_auth 또는 not_authed
확인 사항:
채널을 찾을 수 없음
증상: channel_not_found
확인 사항:
채널명이 올바른지 확인(#은 불필요)
앱이 채널에 추가되어 있는지 확인
프라이빗 채널인 경우
include_private=true설정채널이 존재하고 아카이브되지 않았는지 확인
메시지를 가져올 수 없음
증상: 크롤링은 성공하지만 메시지가 0개
확인 사항:
필요한 범위가 부여되어 있는지 확인:
channels:historychannels:read프라이빗 채널인 경우:
groups:history,groups:read
채널에 메시지가 존재하는지 확인
앱이 채널에 추가되어 있는지 확인
Slack 앱이 활성화되어 있는지 확인
권한 부족 오류
증상: missing_scope
해결 방법:
Slack App 설정에서 필요한 범위 추가:
퍼블릭 채널:
channels:historychannels:read
프라이빗 채널:
groups:historygroups:read
파일:
files:read
앱 재설치
Fess 재시작
파일을 크롤링할 수 없음
증상: ``file_crawl=true``인데도 파일이 가져와지지 않음
확인 사항:
files:read범위가 부여되어 있는지 확인채널에 실제로 파일이 게시되어 있는지 확인
파일의 액세스 권한 확인
API 속도 제한
증상: rate_limited
해결 방법:
크롤링 간격을 늘림
채널 수를 줄임
데이터 스토어를 여러 개로 분할하여 스케줄 분산
Slack API 제한:
Tier 3 메서드: 50+ 요청/분
Tier 4 메서드: 100+ 요청/분
대량의 메시지가 있는 경우
증상: 크롤링에 시간이 오래 걸리거나 타임아웃됨
해결 방법:
채널을 분할하여 여러 데이터 스토어 설정
크롤링 스케줄 분산
오래된 메시지를 제외하는 설정 고려
스크립트 고급 사용 예
메시지 필터링
특정 사용자의 메시지만 인덱싱:
if (message.user == "홍길동") {
title=message.user + " #" + message.channel
content=message.text
created=message.timestamp
url=message.permalink
}
키워드를 포함하는 메시지만:
if (message.text.contains("중요") || message.text.contains("장애")) {
title="[중요] " + message.user + " #" + message.channel
content=message.text
created=message.timestamp
url=message.permalink
}
메시지 가공
긴 메시지 요약:
title=message.user + " #" + message.channel
content=message.text
digest=message.text.length() > 100 ? message.text.substring(0, 100) + "..." : message.text
created=message.timestamp
url=message.permalink
채널명 정리:
title="[Slack: " + message.channel + "] " + message.user
content=message.text
created=message.timestamp
url=message.permalink
참고 정보
데이터스토어 커넥터 개요 - 데이터 스토어 커넥터 개요
Atlassian 커넥터 - Atlassian 커넥터
데이터 저장소 크롤링 - 데이터 스토어 설정 가이드