Get started
ClickClack
ClickClack은 일급 ClickClack 봇 토큰을 통해 OpenClaw를 자체 호스팅 ClickClack 워크스페이스에 연결합니다.
OpenClaw 에이전트를 ClickClack 봇 사용자로 표시하려면 이를 사용하세요. ClickClack은 독립 서비스 봇과 사용자 소유 봇을 지원합니다. 사용자 소유 봇은 owner_user_id를 유지하며 사용자가 부여한 토큰 범위만 받습니다.
빠른 설정
ClickClack 서버에서 봇 토큰을 생성합니다.
clickclack admin bot create \ --workspace <workspace_id> \ --name "OpenClaw" \ --handle openclaw \ --scopes bot:write \ --plain사용자 소유 봇의 경우 --owner <user_id>를 추가합니다.
OpenClaw를 구성합니다.
{ channels: { clickclack: { enabled: true, baseUrl: "https://clickclack.example.com", token: { source: "env", provider: "default", id: "CLICKCLACK_BOT_TOKEN" }, workspace: "default", defaultTo: "channel:general", }, },}그런 다음 실행합니다.
export CLICKCLACK_BOT_TOKEN="ccb_..."openclaw gatewaybaseUrl, token, workspace가 모두 설정된 경우에만 계정이 구성된 것으로 간주됩니다. workspace에는 워크스페이스 ID(wsp_...), 슬러그 또는 이름을 지정할 수 있으며, Gateway가 시작할 때 이를 ID로 해석합니다.
계정 구성 키
| 키 | 기본값 | 참고 |
|---|---|---|
baseUrl |
없음(필수) | ClickClack 서버 URL. |
token |
없음(필수) | 일반 문자열 또는 비밀 참조(source: "env" | "file" | "exec"). |
workspace |
없음(필수) | 워크스페이스 ID, 슬러그 또는 이름. |
replyMode |
"agent" |
"agent"는 전체 에이전트 파이프라인을 실행하고, "model"은 짧은 직접 모델 완성을 전송합니다. |
defaultTo |
"channel:general" |
아웃바운드 경로에 대상이 없을 때 사용하는 대상입니다. |
allowFrom |
["*"] |
인바운드 DM 및 채널 메시지에 대한 사용자 ID 허용 목록입니다. |
botUserId |
자동 감지 | 시작할 때 봇 토큰 ID에서 해석됩니다. |
agentId |
경로 기본값 | 이 계정의 인바운드 메시지를 하나의 에이전트에 고정합니다. |
toolsAllow |
없음 | 이 계정에서 보내는 에이전트 응답에 대한 도구 허용 목록입니다. |
model, systemPrompt |
없음 | replyMode: "model" 완성에서 사용합니다. |
reconnectMs |
1500 |
실시간 재연결 지연 시간(100~60000)입니다. |
plugins.allow가 비어 있지 않은 제한 목록인 경우 채널 설정에서
ClickClack을 명시적으로 선택하거나 openclaw plugins enable clickclack을
실행하면 해당 목록에 clickclack이 추가됩니다. 온보딩 설치에도 동일한
명시적 선택 동작이 적용됩니다. 이러한 경로는 plugins.deny 또는 전역
plugins.enabled: false 설정을 재정의하지 않습니다. 직접
openclaw plugins install @openclaw/clickclack을 실행하면 일반적인
Plugin 설치 정책을 따르며, 기존 허용 목록에도 ClickClack을 기록합니다.
여러 봇
각 계정은 자체 ClickClack 실시간 연결을 열고 자체 봇 토큰을 사용합니다.
{ channels: { clickclack: { enabled: true, baseUrl: "https://clickclack.example.com", defaultAccount: "service", accounts: { service: { token: { source: "env", provider: "default", id: "CLICKCLACK_SERVICE_BOT_TOKEN" }, workspace: "default", defaultTo: "channel:general", agentId: "service-bot", }, support: { token: { source: "env", provider: "default", id: "CLICKCLACK_SUPPORT_BOT_TOKEN" }, workspace: "default", defaultTo: "dm:usr_...", agentId: "support-bot", }, }, }, },}응답 모드
replyMode: "agent"(기본값)는 세션 기록 및 도구 정책을 포함한 일반 에이전트 파이프라인을 통해 인바운드 메시지를 전달합니다.replyMode: "model"은 에이전트 파이프라인을 건너뛰고 Plugin 런타임의llm.complete를 사용하여 짧은 직접 봇 응답을 생성합니다(model및systemPrompt로 선택적으로 조정 가능).
모델 모드는 해석된 봇 에이전트 ID를 대상으로 완성을 실행하므로
명시적인 plugins.entries.clickclack.llm.allowAgentIdOverride: true 신뢰
비트가 필요합니다.
{ plugins: { entries: { clickclack: { llm: { allowAgentIdOverride: true, }, }, }, },}기본 agent 응답 모드만 사용하는 경우에는 이 신뢰 비트를 끈 상태로
유지하세요. 이 모드에서는 필요하지 않습니다.
서비스 간 상관관계 증거에는 agent 모드를 사용하세요. 표준
msg_<ulid> 형식의 권위 있는 ClickClack 메시지 ID가 있으면 채널은
결정론적 OpenClaw 실행 ID clickclack:<message-id>를 파생합니다. 그러면
각 모델 호출은 진단에서 clickclack:<message-id>:model:<n>으로 표시됩니다.
해당 턴에서 ClawRouter를 사용하면 동일한 모델 호출 ID가 X-Request-ID로
전송됩니다. model 모드는 일반 에이전트 실행/세션 진단을 우회하므로 이
증거 경로에 적합하지 않습니다.
실시간 이벤트에 검증된 payload.correlation_id가 포함되어 있으면 채널은
권위 있는 메시지를 가져오는 요청과 그 결과인 ClickClack 응답 요청에서
이를 X-Correlation-ID로 전달합니다. 값에는 ClickClack의 안전한
128자 문자 집합(A-Z, a-z, 0-9, ., _, :, -)을 사용하며,
유효하지 않은 값은 생략됩니다. 이러한 연결에는 식별자만 포함되며 메시지
본문, 프롬프트, 완성, 자격 증명 또는 도구 출력은 절대 포함되지 않습니다.
에이전트 활동 행
기본적으로 에이전트 턴이 실행되는 동안 ClickClack 채널에는 아무것도 표시되지 않으며 최종 응답만 게시됩니다. 턴이 진행되는 동안 영구적인 agent_commentary 및 agent_tool 메시지 행을 게시하려면 계정에서 agentActivity: true를 설정하세요.
{ channels: { clickclack: { enabled: true, token: { source: "env", provider: "default", id: "CLICKCLACK_BOT_TOKEN" }, workspace: "default", agentActivity: true, }, },}요구 사항 및 동작:
- 기본적으로 꺼져 있습니다. 기본 설정과 이전 ClickClack 서버에는 영향을 주지 않습니다.
agent_activity:write토큰 범위가 필요합니다. 이 범위는bot:write와 별개이며 여기에서 상속되지 않습니다. 옵션을 활성화하기 전에--scopes bot:write,agent_activity:write로 봇 토큰을 생성하거나 기존 토큰에 해당 범위를 부여하세요.- 최선형 성능 저하. 토큰에
agent_activity:write가 없거나 서버가 활동 쓰기를 거부하면 실패가 기록되지만 최종 응답은 계속 정상적으로 전달되며 활동 행은 표시되지 않습니다. - 행은 턴별(
turn_id)로 그룹화되고, 논리적 단계 하나가 행 하나가 되도록 통합되며, 도구 행은 Discord/Slack/Telegram과 동일한 진행 형식(도구 이름과 명령 세부 정보)을 사용합니다. - 귀속 메타데이터. 에이전트가 작성한 게시물(활동 행과 최종 응답)에는 해당 턴에서 실제로 사용된 모델(대체 후 모델 포함)에서 해석된
author_model및author_thinking필드가 포함됩니다. 이러한 열을 정의하지 않은 서버는 알 수 없는 JSON 필드를 무시합니다. 이를 저장하는 서버는 메시지별로 "어떤 모델이 어느 사고 수준에서 이 내용을 말했는가"에 답할 수 있습니다.
대상
channel:<name-or-id>는 워크스페이스 채널로 전송합니다. 접두사 없는 대상은 기본적으로channel:로 간주됩니다.dm:<user_id>는 해당 사용자와의 직접 대화를 생성하거나 기존 대화를 재사용합니다.thread:<message_id>는 해당 메시지를 루트로 하는 스레드에 응답합니다.
명시적인 아웃바운드 대상에는 clickclack: 또는 cc: 공급자 접두사를 사용할 수도 있습니다.
예:
openclaw message send --channel clickclack --target channel:general --message "hello"openclaw message send --channel clickclack --target dm:usr_123 --message "hello"openclaw message send --channel clickclack --target thread:msg_123 --message "following up"권한
ClickClack 토큰 범위는 ClickClack API에서 적용됩니다.
bot:read: 워크스페이스/채널/메시지/스레드/DM/실시간/프로필 데이터를 읽습니다.bot:write:bot:read에 더해 채널 메시지, 스레드 응답, DM 및 업로드를 허용합니다.bot:admin:bot:write에 더해 채널 생성을 허용합니다.agent_activity:write: 영구적인 에이전트 활동 행(agent_commentary/agent_tool)을 허용합니다.bot:write또는bot:admin에서 상속되지 않으며agentActivity: true를 설정한 경우에만 필요합니다.
일반적인 에이전트 채팅에는 OpenClaw에 bot:write만 필요합니다. 에이전트 활동 행을 활성화할 때 agent_activity:write를 추가하세요.
문제 해결
ClickClack is not configured for account "<id>": 해당 계정에baseUrl,token(예:CLICKCLACK_BOT_TOKEN사용) 및workspace를 설정하세요.ClickClack workspace not found: <value>:workspace를 ClickClack이 반환한 워크스페이스 ID, 슬러그 또는 이름으로 설정하세요.- 인바운드 응답 없음: 토큰에 실시간 읽기 권한이 있는지 확인하고 봇이 자신의 메시지와 다른 봇의 메시지를 무시한다는 점에 유의하세요.
- 채널 전송 실패: 봇이 워크스페이스의 구성원이며
bot:write권한이 있는지 확인하세요.