Slack
상태: Slack 앱 통합을 통한 다이렉트 메시지 + 채널에 대해 프로덕션 준비 완료. 기본 모드는 소켓 모드이며, HTTP 이벤트 API 모드도 지원됩니다.Pairing
Slack 다이렉트 메시지는 기본적으로 페어링 모드를 사용합니다.
Slash commands
네이티브 명령어 동작 및 명령어 목록.
Channel troubleshooting
크로스 채널 진단 및 수리 플레이북.
빠른 설정
- Socket Mode (기본)
- HTTP Events API 모드
Slack 앱 및 토큰 생성
Slack 앱 설정에서:
- Socket Mode 활성화
connections:write권한의 App Token (xapp-...) 생성- 앱 설치 후 Bot Token (
xoxb-...) 복사
앱 이벤트 구독
봇 이벤트 구독:
app_mentionmessage.channels,message.groups,message.im,message.mpimreaction_added,reaction_removedmember_joined_channel,member_left_channelchannel_renamepin_added,pin_removed
토큰 모델
botToken+appToken은 소켓 모드에 필수입니다.- HTTP 모드는
botToken+signingSecret이 필요합니다. - 구성 토큰은 환경 변수 대체보다 우선합니다.
SLACK_BOT_TOKEN/SLACK_APP_TOKEN환경 변수 대체는 기본 계정에만 적용됩니다.userToken(xoxp-...)은 구성에서만 사용 가능하며 (환경 변수 대체 없음) 기본적으로 읽기 전용 동작 (userTokenReadOnly: true)을 가집니다.- 선택 사항: 발신 메시지를 활성 에이전트 신원(사용자 정의
username및 아이콘)을 사용하도록 하려면chat:write.customize를 추가하십시오.icon_emoji는:emoji_name:구문을 사용합니다.
접근 제어 및 라우팅
- DM 정책
- 채널 정책
- 멘션 및 채널 사용자
channels.slack.dmPolicy는 DM 접근을 컨트롤합니다 (기존: channels.slack.dm.policy):pairing(기본값)allowlistopen(channels.slack.allowFrom에"*"을 포함해야 함; 기존:channels.slack.dm.allowFrom)disabled
dm.enabled(기본값 true)channels.slack.allowFrom(선호됨)dm.allowFrom(기존)dm.groupEnabled(그룹 DM의 기본값 false)dm.groupChannels(선택 사항 MPIM allowlist)
openclaw pairing approve slack <code>를 사용합니다.명령어 및 슬래시 동작
- 네이티브 명령어 자동 모드는 Slack에 대해 비활성화되어 있습니다 (
commands.native: "auto"는 Slack 네이티브 명령어를 활성화하지 않음). channels.slack.commands.native: true(혹은 글로벌commands.native: true)로 Slack 네이티브 명령어 핸들러를 활성화하세요.- 네이티브 명령어가 활성화되면, Slack에 일치하는 슬래시 명령어를 등록하세요 (
/<command>이름). - 네이티브 명령어가 활성화되지 않은 경우,
channels.slack.slashCommand를 통해 단일 구성된 슬래시 명령어를 실행할 수 있습니다. - 네이티브 인수 메뉴는 다음과 같이 렌더링 전략에 적응합니다:
- 최대 5개 옵션: 버튼 블록
- 6-100개 옵션: 정적 선택 메뉴
- 100개를 초과하는 옵션: 상호작용 옵션 핸들러가 있는 경우 비동기 옵션 필터링과 함께 외부 선택 사용
- 인코딩된 옵션 값이 Slack 제한을 초과할 경우, 흐름은 버튼으로 되돌아갑니다
- 긴 옵션 페이로드에 대해, 슬래시 명령어 매개변수 메뉴는 값을 선택하기 전에 확인 대화를 사용합니다.
enabled: falsename: "openclaw"sessionPrefix: "slack:slash"ephemeral: true
agent:<agentId>:slack:slash:<userId>
CommandTargetSessionKey).
쓰레딩, 세션 및 응답 태그
- 다이렉트 메시지는
direct로 라우팅되고, 채널은channel, MPIM은group으로 라우팅됩니다. - 기본
session.dmScope=main으로, Slack 다이렉트 메시지는 에이전트 메인 세션에 통합됩니다. - 채널 세션:
agent:<agentId>:slack:channel:<channelId>. - 스레드 응답은 경우에 따라 스레드 세션 접미사 (
:thread:<threadTs>)를 생성할 수 있습니다. channels.slack.thread.historyScope기본값은thread;thread.inheritParent기본값은false입니다.channels.slack.thread.initialHistoryLimit는 새 스레드 세션이 시작될 때 가져올 기존 스레드 메시지 수를 제어합니다 (기본값20; 비활성화하려면0으로 설정).
channels.slack.replyToMode:off|first|all(기본값off)channels.slack.replyToModeByChatType:direct|group|channel별- 다이렉트 채팅에 대한 기존 대체:
channels.slack.dm.replyToMode
[[reply_to_current]][[reply_to:<id>]]
replyToMode="off"는 암시적 응답 쓰레딩을 비활성화합니다. 명시적 [[reply_to_*]] 태그는 여전히 허용됩니다.
미디어, 청킹 및 전달
수신 첨부 파일
수신 첨부 파일
Slack 파일 첨부 파일은 Slack에서 호스팅되는 개인 URL에서 다운로드되며 (토큰 인증이 필요한 요청 흐름), 가져오기가 성공하고 사이즈 제한이 허용되는 경우 미디어 저장소에 저장됩니다.런타임 수신 크기 제한 기본값은
20MB이며, channels.slack.mediaMaxMb로 재정의할 수 있습니다.발신 텍스트 및 파일
발신 텍스트 및 파일
- 텍스트 청크는
channels.slack.textChunkLimit를 사용합니다 (기본값 4000) channels.slack.chunkMode="newline"은 단락 우선 분할을 활성화합니다- 파일 전송은 Slack 업로드 API를 사용하며 스레드 응답을 포함할 수 있습니다 (
thread_ts) - 발신 미디어 제한은 설정된 경우
channels.slack.mediaMaxMb를 따르며, 그렇지 않으면 미디어 파이프라인의 MIME 종류 기본 값을 사용
전달 대상
전달 대상
선호하는 명시적 대상:
- 다이렉트 메시지는
user:<id> - 채널은
channel:<id>
조작 및 게이트
Slack 조작은channels.slack.actions.*로 제어됩니다.
현재 Slack 도구의 사용 가능한 조작 그룹:
| 그룹 | 기본값 |
|---|---|
| messages | enabled |
| reactions | enabled |
| pins | enabled |
| memberInfo | enabled |
| emojiList | enabled |
이벤트 및 운영 행동
- 메시지 수정/삭제/스레드 방송은 시스템 이벤트로 매핑됩니다.
- 반응 추가/삭제 이벤트는 시스템 이벤트로 매핑됩니다.
- 멤버 가입/탈퇴, 채널 생성/이름 변경, 핀 추가/제거 이벤트는 시스템 이벤트로 매핑됩니다.
- 어시스턴트 스레드 상태 업데이트 (스레드에서 “입력 중…” 표시기용)는
assistant.threads.setStatus를 사용하며 봇 범위assistant:write가 필요합니다. channel_id_changed는configWrites가 활성화되었을 때 채널 구성 키를 마이그레이션할 수 있습니다.- 채널 주제/목적 메타데이터는 신뢰할 수 없는 컨텍스트로 취급되며 라우팅 컨텍스트에 주입될 수 있습니다.
- 블록 작업 및 모달 상호작용은 구조화된
Slack interaction: ...시스템 이벤트와 풍부한 페이로드 필드를 방출합니다:- 블록 작업: 선택한 값, 레이블, 선택자 값,
workflow_*메타데이터 - 모달
view_submission및view_closed이벤트는 라우팅된 채널 메타데이터 및 양식 입력과 함께 제공됩니다.
- 블록 작업: 선택한 값, 레이블, 선택자 값,
Ack 반응
ackReaction은 OpenClaw가 수신 메시지를 처리하는 동안 수신 확인 이모지를 보냅니다.
해결 순서:
channels.slack.accounts.<accountId>.ackReactionchannels.slack.ackReactionmessages.ackReaction- 에이전트 신원 이모지 대체 (
agents.list[].identity.emoji, 없으면 ”👀”)
- Slack은 쇼트코드 (예:
"eyes")를 기대합니다. - 채널이나 계정에 대해 반응을 비활성화하려면
""를 사용하세요.
매니페스트 및 범위 체크리스트
Slack 앱 매니페스트 예
Slack 앱 매니페스트 예
선택적 사용자 토큰 범위 (읽기 작업)
선택적 사용자 토큰 범위 (읽기 작업)
channels.slack.userToken을 구성하는 경우, 전형적인 읽기 범위는 다음과 같습니다:channels:history,groups:history,im:history,mpim:historychannels:read,groups:read,im:read,mpim:readusers:readreactions:readpins:reademoji:readsearch:read(Slack 검색 읽기에 의존하는 경우)
문제 해결
채널에서 답장이 없음
채널에서 답장이 없음
확인할 사항, 순서대로:
groupPolicy- 채널 허용 목록 (
channels.slack.channels) requireMention- 채널별
users허용 목록
DM 메시지 무시됨
DM 메시지 무시됨
확인할 사항:
channels.slack.dm.enabledchannels.slack.dmPolicy(또는 기존channels.slack.dm.policy)- 페어링 승인 및 허용 목록 항목
소켓 모드 연결 안됨
소켓 모드 연결 안됨
Slack 앱 설정에서 봇 및 앱 토큰과 소켓 모드 활성화를 검증하십시오.
HTTP 모드에서 이벤트 수신 안됨
HTTP 모드에서 이벤트 수신 안됨
검증할 사항:
- 서명 비밀
- 웹훅 경로
- Slack 요청 URL (이벤트 + 상호작용 + 슬래시 명령어)
- HTTP 계정별 고유한
webhookPath
네이티브/슬래시 명령어 실행 안됨
네이티브/슬래시 명령어 실행 안됨
다음 중 의도된 작업인지 확인하십시오:
- 슬랙에 일치하는 슬래시 명령을 등록하는 네이티브 명령 모드 (
channels.slack.commands.native: true) - 또는 단일 슬래시 명령 모드 (
channels.slack.slashCommand.enabled: true)
commands.useAccessGroups 및 채널/사용자 허용 목록을 확인하십시오.텍스트 스트리밍
OpenClaw는 Agents and AI Apps API를 통해 Slack 네이티브 텍스트 스트리밍을 지원합니다.channels.slack.streaming은 실시간 미리보기 동작을 제어합니다:
off: 실시간 미리보기 스트리밍 비활성화.partial(기본값): 미리보기 텍스트를 최신 부분 출력으로 교체.block: 청크된 미리보기 업데이트를 추가.progress: 생성 중에 진행 상태 텍스트를 표시하고 최종 텍스트를 전송.
channels.slack.nativeStreaming은 streaming이 partial일 때 Slack의 네이티브 스트리밍 API (chat.startStream / chat.appendStream / chat.stopStream)를 제어합니다 (기본값: true).
네이티브 Slack 스트리밍 비활성화 (초안 미리보기 동작 유지):
channels.slack.streamMode(replace | status_final | append)는channels.slack.streaming으로 자동 마이그레이션됩니다.- boolean
channels.slack.streaming은channels.slack.nativeStreaming으로 자동 마이그레이션됩니다.
Requirements
- Slack 앱 설정에서 Agents and AI Apps를 활성화합니다.
- 앱에
assistant:write범위가 있는지 확인합니다. - 해당 메시지에 사용할 수 있는 응답 스레드가 있어야 합니다. 스레드 선택은 여전히
replyToMode를 따릅니다.
Behavior
- 첫 번째 텍스트 청크는 스트림을 시작합니다 (
chat.startStream). - 나중 텍스트 청크는 동일한 스트림에 추가됩니다 (
chat.appendStream). - 응답 종료는 스트림을 완료합니다 (
chat.stopStream). - 미디어 및 텍스트가 아닌 페이로드는 일반 전달로 대체됩니다.
- 스트리밍이 응답 중 실패하면, OpenClaw는 나머지 페이로드에 대해 일반 전달로 대체됩니다.
구성 참조 포인터
주요 참조:-
구성 참조 - Slack
신호 강도가 높은 Slack 필드:
- 모드/인증:
mode,botToken,appToken,signingSecret,webhookPath,accounts.* - DM 접근:
dm.enabled,dmPolicy,allowFrom(기존:dm.policy,dm.allowFrom),dm.groupEnabled,dm.groupChannels - 채널 접근:
groupPolicy,channels.*,channels.*.users,channels.*.requireMention - 쓰레딩/히스토리:
replyToMode,replyToModeByChatType,thread.*,historyLimit,dmHistoryLimit,dms.*.historyLimit - 전달:
textChunkLimit,chunkMode,mediaMaxMb,streaming,nativeStreaming - 운영/기능:
configWrites,commands.native,slashCommand.*,actions.*,userToken,userTokenReadOnly
- 모드/인증: