채널 & 라우팅¶
OpenClaw 는 메시지가 들어온 채널로 다시 응답을 라우팅합니다. 모델이 채널을 선택하지 않으며, 라우팅은 결정적이고 호스트 구성에 의해 제어됩니다.
핵심 용어¶
- 채널:
whatsapp,telegram,discord,slack,signal,imessage,webchat. - AccountId: 채널별 계정 인스턴스 (지원되는 경우).
- AgentId: 격리된 작업 공간 + 세션 저장소 ('brain').
- SessionKey: 컨텍스트를 저장하고 동시성을 제어하는 데 사용되는 버킷 키.
세션 키 형태 (예시)¶
다이렉트 메시지는 에이전트의 main 세션으로 병합됩니다:
agent:<agentId>:<mainKey>(기본값:agent:main:main)
그룹과 채널은 채널별로 격리된 상태를 유지합니다:
- 그룹:
agent:<agentId>:<channel>:group:<id> - 채널/룸:
agent:<agentId>:<channel>:channel:<id>
스레드:
- Slack/Discord 스레드는 기본 키에
:thread:<threadId>을 추가합니다. - Telegram 포럼 토픽은 그룹 키에
:topic:<topicId>를 포함합니다.
예시:
agent:main:telegram:group:-1001234567890:topic:42agent:main:discord:channel:123456:thread:987654
라우팅 규칙 (에이전트가 선택되는 방식)¶
라우팅은 각 인바운드 메시지에 대해 하나의 에이전트를 선택합니다:
- 정확한 피어 매칭 (
bindings와peer.kind+peer.id). - 길드 매칭 (Discord) —
guildId를 통해. - 팀 매칭 (Slack) —
teamId를 통해. - 계정 매칭 (채널의
accountId). - 채널 매칭 (해당 채널의 모든 계정).
- 기본 에이전트 (
agents.list[].default, 그렇지 않으면 목록의 첫 번째 항목, 최종 대안으로main).
매칭된 에이전트가 어떤 작업 공간과 세션 저장소가 사용되는지를 결정합니다.
브로드캐스트 그룹 (여러 에이전트 실행)¶
브로드캐스트 그룹을 사용하면 OpenClaw 가 일반적으로 응답을 보낼 상황에서 동일한 피어에 대해 여러 에이전트를 실행할 수 있습니다 (예: WhatsApp 그룹에서 멘션/활성화 게이팅 이후).
구성:
{
broadcast: {
strategy: "parallel",
"120363403215116621@g.us": ["alfred", "baerbel"],
"+15555550123": ["support", "logger"],
},
}
참고: Broadcast Groups.
구성 개요¶
agents.list: 명명된 에이전트 정의 (작업 공간, 모델 등).bindings: 인바운드 채널/계정/피어를 에이전트에 매핑.
예시:
{
agents: {
list: [{ id: "support", name: "Support", workspace: "~/.openclaw/workspace-support" }],
},
bindings: [
{ match: { channel: "slack", teamId: "T123" }, agentId: "support" },
{ match: { channel: "telegram", peer: { kind: "group", id: "-100123" } }, agentId: "support" },
],
}
세션 저장소¶
세션 저장소는 상태 디렉토리 아래에 위치합니다 (기본값 ~/.openclaw):
~/.openclaw/agents/<agentId>/sessions/sessions.json- JSONL 트랜스크립트는 저장소와 나란히 위치합니다
session.store 및 {agentId} 템플리팅을 통해 저장소 경로를 재정의할 수 있습니다.
WebChat 동작¶
WebChat 은 선택된 에이전트에 연결되며, 기본적으로 에이전트의 main 세션을 사용합니다. 이로 인해 WebChat 에서는 해당 에이전트의 크로스 채널 컨텍스트를 한 곳에서 확인할 수 있습니다.
응답 컨텍스트¶
인바운드 응답에는 다음이 포함됩니다:
- 사용 가능한 경우
ReplyToId,ReplyToBody,ReplyToSender. - 인용된 컨텍스트는
Body에[Replying to ...]블록으로 추가됩니다.
이는 모든 채널에서 일관되게 적용됩니다.