Channel & 라우팅
OpenClaw는 메시지가 들어온 channel로 답장을 다시 라우팅합니다. model은 channel을 선택하지 않습니다; 라우팅은 결정론적이며 host 구성에 의해 제어됩니다.
주요 용어
- Channel: whatsapp, telegram, discord, slack, signal, imessage, webchat.
- AccountId: channel별 계정 인스턴스 (지원되는 경우).
- AgentId: 격리된 workspace + session 저장소 ("두뇌").
- SessionKey: 컨텍스트를 저장하고 동시성을 제어하는 데 사용되는 버킷 key.
Session key 형태 (예제)
직접 메시지는 agent의 main session으로 축소됩니다:
- agent:<agentId>:<mainKey> (기본값: agent:main:main)
그룹 및 channel은 channel당 격리된 상태로 유지됩니다:
- 그룹: agent:<agentId>:<channel>:group:<id>
- Channel/room: agent:<agentId>:<channel>:channel:<id>
스레드:
- Slack/Discord 스레드는 기본 key에 :thread:<threadId>를 추가합니다.
- Telegram 포럼 토픽은 그룹 key에 :topic:<topicId>를 포함합니다.
예제:
- agent:main:telegram:group:-1001234567890:topic:42
- agent:main:discord:channel:123456:thread:987654
라우팅 규칙 (agent 선택 방법)
라우팅은 각 인바운드 메시지에 대해 하나의 agent를 선택합니다:
- 정확한 peer 일치 (peer.kind + peer.id가 있는 bindings).
- Guild 일치 (Discord) guildId를 통해.
- Team 일치 (Slack) teamId를 통해.
- Account 일치 (channel의 accountId).
- Channel 일치 (해당 channel의 모든 계정).
- 기본 agent (agents.list[].default, 아니면 첫 번째 목록 항목, main으로 대체).
일치하는 agent는 사용할 workspace 및 session 저장소를 결정합니다.
브로드캐스트 그룹 (여러 agent 실행)
브로드캐스트 그룹을 사용하면 OpenClaw가 일반적으로 답장할 때 동일한 peer에 대해 여러 agent를 실행할 수 있습니다 (예: WhatsApp 그룹에서 mention/활성화 게이팅 후).
Config:
{
broadcast: {
strategy: "parallel",
"[email protected]": ["alfred", "baerbel"],
"+15555550123": ["support", "logger"]
}
}
참조: Broadcast Groups.
Config 개요
- agents.list: 명명된 agent 정의 (workspace, model 등).
- bindings: 인바운드 channel/계정/peer를 agent에 매핑합니다.
예제:
{
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" }
]
}
Session 저장소
Session 저장소는 state 디렉토리(기본값 ~/.openclaw) 아래에 있습니다:
- ~/.openclaw/agents/<agentId>/sessions/sessions.json
- JSONL transcript는 저장소와 함께 있습니다
session.store 및 {agentId} 템플릿을 통해 저장소 경로를 재정의할 수 있습니다.
WebChat 동작
WebChat은 선택된 agent에 연결되며 기본적으로 agent의 main session을 사용합니다. 이로 인해 WebChat을 사용하면 해당 agent에 대한 교차 channel 컨텍스트를 한 곳에서 볼 수 있습니다.
답장 컨텍스트
인바운드 답장에는 다음이 포함됩니다:
- 사용 가능한 경우 ReplyToId, ReplyToBody 및 ReplyToSender.
- 인용된 컨텍스트는 [Replying to ...] 블록으로 Body에 추가됩니다.
이는 모든 channel에서 일관됩니다.