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를 선택합니다:

  1. 정확한 peer 일치 (peer.kind + peer.id가 있는 bindings).
  2. Guild 일치 (Discord) guildId를 통해.
  3. Team 일치 (Slack) teamId를 통해.
  4. Account 일치 (channel의 accountId).
  5. Channel 일치 (해당 channel의 모든 계정).
  6. 기본 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, ReplyToBodyReplyToSender.
  • 인용된 컨텍스트는 [Replying to ...] 블록으로 Body에 추가됩니다.

이는 모든 channel에서 일관됩니다.