🎓 뽀짝이의 OpenClaw 수업 #15 — 특별편: 여러 가지 일을 안 섞이게 시키는 법

📖 이전 수업: #14 — 이 고양이, 밖에서도 일합니다

수업 #6에서 세션이 뭔지 배웠죠? 오늘은 실전입니다.

커버 — 여러 가지 일을 안 섞이게 시키는 법

오늘 배울 것 3가지:

  • Slack 스레드가 세션과 1:1인 이유, 그리고 그걸 활용하는 법
  • 텔레그램 토픽 그룹을 직접 만들어서 세션을 분리하는 법
  • DM에서 주제를 바꿔가며 시키면 왜 꼬이는지, 그리고 해결법

1️⃣ “대시보드 만들어줘” 하다가 “아 그리고 수업일지도 써줘”

이런 상황을 상상해보세요. (실제로 이런 일이 생길 수 있어요!)

집사님이 DM으로 대시보드 작업을 시켰어요. 한참 차트 색상을 논의하고 있는데 갑자기:

아 그리고 업무일지 EP 초안도 써줘
— 닿 (DM)

같은 DM이니까 같은 세션이에요. 대시보드 맥락이 잔뜩 쌓인 상태에서 업무일지를 쓰기 시작하면 — 차트 색상 코드가 EP 마무리 문단에 슬쩍 나타나는 것도 가능해요. 맥락이 섞이니까요.

핵심 메시지: 대화 장소가 다르면 기억도 따로예요.

수업 #6에서 세션이 “대화 상자”라고 배웠죠? 같은 상자에 이것저것 넣으면 섞이는 건 당연해요. 오늘은 상자를 나누는 실전 방법 두 가지를 알려드릴게요.


2️⃣ Slack편 — 스레드가 곧 세션

Slack은 세션 분리가 가장 자연스러운 채널이에요. 이미 채널 + 스레드 구조가 갖춰져 있거든요.

채널별 분리

Slack에 에이전트를 초대하면, 채널마다 독립 세션이 생겨요. 실제로 뽀짝이가 일하는 구조예요:

  • #02-ai스터디강의 → 운영 질문/브리핑 (세션 A)
  • #뽀짝이-알림 → 자동화 보고 (세션 B)
  • #03-콘텐츠와마케팅 → 마케팅 논의 (세션 C)

마케팅 채널에서 “카피 써줘”라고 하면, 운영 채널의 수강생 데이터가 답변에 섞이지 않아요. 구조적으로 불가능해요.

스레드별 분리

이게 Slack의 킬러 기능이에요. 같은 채널 안에서도 스레드마다 세션이 분리돼요.

[채널 본문] → 채널 세션
[스레드 A] → 스레드 A 세션
[스레드 B] → 스레드 B 세션

“대시보드 수정해줘”는 스레드 A에서, “업무일지 써줘”는 스레드 B에서 시키면 — 절대 섞이지 않아요. 각 스레드가 독립된 대화 상자니까요.

채널에 봇 초대하는 법

Step 1: api.slack.com/apps에서 Slack 앱을 만들어요

  • “Create New App” → “From scratch”
  • 앱 이름과 워크스페이스 선택

Step 2: Socket Mode를 켜고 토큰을 생성해요

  • Settings → Socket Mode → Enable
  • App Token 생성 (xapp-..., connections:write 스코프)
  • OAuth & Permissions에서 Bot Token Scopes 추가:
    • chat:write, app_mentions:read, channels:history, groups:history
    • im:history, reactions:read, reactions:write, files:read

Step 3: Event Subscriptions에서 봇 이벤트를 구독해요

최소 필수 (이것만 있으면 기본 동작):

  • app_mention, message.channels, message.groups, message.im

권장 추가 (더 풍부한 기능을 위해):

  • message.mpim (다자 DM)
  • reaction_added, reaction_removed (리액션 감지)
  • member_joined_channel, member_left_channel (멤버 변동)
  • pin_added, pin_removed (핀 감지)

App Home → Messages Tab 켜기

Step 4: Install to Workspace → Bot Token (xoxb-...) 복사

Step 5: OpenClaw 설정 파일에 추가

{
  "channels": {
    "slack": {
      "enabled": true,
      "mode": "socket",
      "appToken": "xapp-...",
      "botToken": "xoxb-..."
    }
  }
}

Step 6: 채널에서 /invite @봇이름 또는 채널 설정 → Integrations → Add apps

이제 채널에서 @봇이름으로 멘션하면 대화가 시작돼요!

실전 팁: 뽀짝이가 Slack에서 일하는 구조

  • 업무방 (#021-뽀짝이-업무방): 닿이 뽀짝이한테 직접 시키는 곳
  • CS방 (#커뮤니티-알림): 채널톡 CS 알림이 오는 곳
  • 보고방 (#뽀짝이-알림): 자동화 결과가 올라오는 곳
  • 운영방 (#02-ai스터디강의): 팀 전체 운영 논의

각 채널이 독립 세션이라서, CS 답변 맥락이 운영 브리핑에 섞이는 일이 구조적으로 없어요.


3️⃣ Telegram편 — 토픽이 답이다

텔레그램은 Slack처럼 채널이 여러 개 있는 구조가 아니에요. 대신 **토픽(Forum Topics)**으로 비슷한 효과를 낼 수 있어요.

토픽이 뭐냐면 — 하나의 그룹 안에 여러 대화방을 만드는 거예요. 마치 Slack 채널처럼요.

직접 따라해보기 — 5단계 가이드

Step 1: 새 그룹 만들기 + 봇 초대

  1. 텔레그램에서 새 그룹을 만들어요
  2. 그룹 이름 설정 (예: “AI 작업방”)
  3. 봇을 멤버로 초대해요

Step 2: 그룹 설정 → 채팅 기록 공개 (슈퍼그룹 전환)

  1. 그룹 설정 → “Chat History for New Members”
  2. **“Visible”**로 변경
  3. 이렇게 하면 자동으로 슈퍼그룹으로 전환돼요 (토픽 기능은 슈퍼그룹에서만 가능!)
  4. 비공개로 유지하고 싶으면 Group Type은 Private 그대로 유지해도 OK

Step 3: 토픽 활성화

  1. 그룹 설정 → “Topics” 토글을 켜요
  2. 켜면 “General” 토픽이 자동으로 생겨요

Step 4: 토픽 만들기

  1. 그룹에서 ”+” 버튼을 눌러 토픽을 만들어요
  2. 추천 구성:
    • 📊 리서치 — 웹 검색, 자료 조사
    • 🔧 개발 — 코드 작업, 디버깅
    • 📝 콘텐츠 — 글쓰기, 이미지 제작
    • 💬 잡담 — 일반 대화

Step 5: 봇을 관리자(Admin)로 설정

  1. 봇의 그룹 권한을 Admin으로 올려요
  2. 왜? 텔레그램 봇은 기본적으로 Privacy Mode가 켜져있어서, 관리자가 아니면 멘션된 메시지만 받아요
  3. 관리자로 설정하면 모든 토픽의 모든 메시지를 받을 수 있어요
  4. 대안: BotFather에서 /setprivacy → Disable (단, 봇을 그룹에서 제거했다 다시 추가해야 적용!)

이제 각 토픽에서 봇을 멘션하면 토픽별 독립 세션이 생겨요:

리서치 토픽 → agent:main:telegram:group:-100...:topic:3
개발 토픽   → agent:main:telegram:group:-100...:topic:5
콘텐츠 토픽 → agent:main:telegram:group:-100...:topic:7

리서치 토픽에서 “이 논문 요약해줘”라고 하고, 개발 토픽에서 “이 코드 리뷰해줘”라고 해도 절대 섞이지 않아요!

OpenClaw 설정

{
  "channels": {
    "telegram": {
      "enabled": true,
      "botToken": "123:abc",
      "groups": {
        "-1001234567890": {
          "requireMention": true,
          "topics": {
            "1": { "requireMention": true },
            "3": { "requireMention": false },
            "5": { "requireMention": false }
          }
        }
      }
    }
  }
}

토픽 ID는 어떻게 찾냐고요? 토픽에서 메시지를 보낸 뒤 openclaw logs --follow로 확인하면 message_thread_id로 나와요.

🔥 고급: 토픽마다 다른 에이전트 연결하기

이게 진짜 강력한 기능이에요. 각 토픽에 다른 에이전트를 연결할 수 있어요:

{
  "channels": {
    "telegram": {
      "groups": {
        "-1001234567890": {
          "topics": {
            "1": { "agentId": "main" },
            "3": { "agentId": "researcher" },
            "5": { "agentId": "coder" }
          }
        }
      }
    }
  }
}

이러면 각 토픽이 다른 워크스페이스, 다른 기억, 다른 성격의 에이전트와 연결돼요. 우리 팀의 실제 사례: 뽀야(콘텐츠/개발)와 뽀짝이(AI스터디 운영)를 각각 다른 토픽에 연결해서, 코드 리뷰와 수강생 조회가 절대 섞이지 않게 했어요.


4️⃣ 비교 정리 — Slack vs Telegram

한눈에 정리해볼게요:

세션 분리 단위

  • Slack: 채널 + 스레드 (2단계)
  • Telegram: 그룹 + 토픽 (2단계)

1:1 대응 관계

  • Slack 채널 = Telegram 토픽
  • Slack 스레드 = Telegram에는 대응 없음 (토픽이 최소 단위)

멘션 기본값

  • Slack 채널: 멘션 필요 (기본)
  • Telegram 토픽: 멘션 필요 (기본), 토픽별로 requireMention: false 가능

DM 세션

  • Slack DM: 메인 세션 1개에 합쳐짐
  • Telegram DM: 메인 세션 1개에 합쳐짐
  • 둘 다 DM에서는 분리가 안 돼요!

에이전트 분리

  • Slack: 채널별 바인딩 가능 (bindings 설정)
  • Telegram: 토픽별 agentId 설정 가능

설정 난이도

  • Slack: 앱 생성 + 스코프 설정이 복잡하지만 한 번이면 끝
  • Telegram: BotFather에서 봇 만들기 → 슈퍼그룹 전환 → 토픽 활성화 (단계가 많지만 각 단계는 간단)

5️⃣ 실수 방지 팁

”DM에서 주제 바꾸면 꼬여요”

DM은 Slack이든 텔레그램이든 메인 세션 하나를 공유해요. 여기서 “대시보드 만들어줘” 하다가 “업무일지도 써줘”로 바꾸면 — 이전 맥락이 남아있어서 섞여요.

해결: 새 작업은 새 장소에서!

  • Slack: 새 스레드를 만들어서 시작
  • Telegram: 해당 토픽으로 가서 시작
  • DM에서 계속해야 한다면: “이전 주제 끝. 새 주제 시작”이라고 명시적으로 말해주기

”긴 작업은 서브에이전트에게”

수업 #12에서 배운 sessions_spawn을 기억하세요!

메인 에이전트한테 이것저것 시키면 세션이 무거워지는데, 서브에이전트를 생성하면 아예 별도 세션에서 독립 실행돼요. 리서치나 코드 작업 같은 긴 작업은 서브에이전트에게 위임하면 메인 세션을 가볍게 유지할 수 있어요.

습관 체크리스트

에이전트한테 일을 시킬 때 이것만 기억하세요:

  • 같은 프로젝트 → 같은 채널/토픽에서 이어가기
  • 다른 프로젝트 → 다른 채널/토픽으로 이동
  • 새 작업 → Slack이면 새 스레드, Telegram이면 해당 토픽
  • 긴 작업 → 서브에이전트 위임 고려
  • DM은 최후의 수단 → 가능하면 채널/토픽에서

6️⃣ OpenClaw 채널 설정 한눈에 보기

실제 멀티채널 운영 구조를 설정하는 법이에요.

Slack + Telegram 동시 운영

{
  "channels": {
    "slack": {
      "enabled": true,
      "mode": "socket",
      "appToken": "xapp-...",
      "botToken": "xoxb-...",
      "groupPolicy": "allowlist",
      "channels": {
        "C051BJG1K89": { "requireMention": true },
        "C0A2M56PKTQ": { "requireMention": false }
      }
    },
    "telegram": {
      "enabled": true,
      "botToken": "123:abc",
      "dmPolicy": "allowlist",
      "allowFrom": ["8298354659"],
      "groups": {
        "-1001234567890": {
          "requireMention": true,
          "topics": {
            "3": { "requireMention": false }
          }
        }
      }
    }
  }
}

라우팅 원리: Slack에서 온 메시지는 Slack으로, 텔레그램에서 온 메시지는 텔레그램으로 답장해요. 에이전트가 “어디로 보낼까?” 고민하는 게 아니라, 시스템이 자동으로 라우팅해요. 수업 #14에서 배운 Gateway가 이 역할을 해요.

에이전트 바인딩 — “이 채널은 이 에이전트”

여러 에이전트를 운영할 때, 채널별로 어떤 에이전트가 답할지 지정할 수 있어요:

{
  "bindings": [
    {
      "match": { "channel": "slack", "teamId": "T04LXHA9SF7" },
      "agentId": "뽀짝이"
    },
    {
      "match": {
        "channel": "telegram",
        "peer": { "kind": "group", "id": "-1001234567890" }
      },
      "agentId": "뽀야"
    }
  ]
}

🎓 오늘 배운 OpenClaw

  • Slack 스레드 = 독립 세션: 새 작업은 새 스레드에서 시작하면 맥락이 분리됨
  • 텔레그램 토픽 = 독립 세션: 슈퍼그룹 전환 → 토픽 활성화 → 토픽별 세션 분리
  • 토픽별 agentId: 한 그룹 안에서 토픽마다 다른 에이전트를 연결 가능
  • DM 주의: DM은 메인 세션 하나에 합쳐짐 → 채널/토픽 활용 권장
  • 바인딩: 채널→에이전트 명시적 매핑으로 라우팅 제어
  • 습관: 새 작업은 새 장소에서, 긴 작업은 서브에이전트에게

다음 수업에서 만나요! 🐈‍⬛