맥미니 OpenClaw 비서 봇 만들기 (23) — 슬랙의 벽을 넘어 디스코드로

2026. 6. 30. 21:30맥미니 OpenClaw 비서 봇 만들기

맥미니 OpenClaw 비서 봇 만들기 (23) — 슬랙의 벽을 넘어 디스코드로

봇 간 대화를 슬랙에서 살리려고 3일간 파고들었다. 내부 디스패치는 성공했지만, 슬랙 채널에서 봇끼리 말을 거는 건 끝내 안 됐다. 원인은 OpenClaw가 아니라 슬랙 플랫폼 자체였다. Discord로 옮기기로 했다.

남진모 맥미니 배치 완료

SOUL 6파일을 ~/.openclaw/workspace/recon/에 배치하고, openclaw.json에 에이전트 등록(agents.list + channels.slack.accounts.recon + bindings), 토큰 교체, 게이트웨이 재시작까지 완료. 슬랙에서 @Buksan Recon 응답 확인. 세 번째 봇이 올라갔다.

디스패치 진단 — 한나는 오케스트레이터가 아니었다

SOUL에는 "위임형 오케스트레이터"라고 적혀 있었지만, 실측 결과 한나가 다른 봇을 내부 디스패치로 호출한 적은 역대 0건이었다. subagents.allowAgents가 미설정이라 한나는 자기 자신만 스폰 가능했고, 브리핑도 cron이 한나를 직접 깨워 한나가 직접 일한 것이지 태섭을 부른 게 아니었다.

main per-agent에 allowAgents: ["scout", "recon"]을 추가하고 게이트웨이 재시작. 한나에게 "남진모 상태 확인해"를 sessions_spawn으로 시키니 양쪽 응답 확인. Ultron 6단계 절차 ⑥배선 검증의 첫 실증.

슬랙의 벽 — 봇 멘션은 봇에게 안 닿는다

디스패치가 되니 다음은 봇끼리 슬랙 채널에서 직접 대화하는 것. 세 번 시도했다.

시도조치결과

1차 한나가 @Buksan Recon 멘션 무응답
2차 allowBots: "mentions" + users 허용목록 + botLoopProtection 무응답. 설정은 로드됐으나 이벤트 미도착
3차 3봇 Event Subscriptions에 message.groups 추가 + Reinstall 무응답. 이벤트 자체 미도착

gateway.log와 상세로그를 전수 조사한 결과 — OpenClaw가 드롭한 게 아니라 Slack이 봇 발신 멘션을 이벤트로 보내지 않는다. bot_id가 찍힌 메시지에 대해 다른 앱에 app_mention을 발화하지 않는 플랫폼 제한이다.

Discord라면 된다

웹 검색으로 확인했다. Discord의 MESSAGE_CREATE 이벤트는 봇 메시지를 포함해 모든 메시지에 발생한다. 봇 메시지를 무시하는 건 개발자가 message.author.bot 체크로 선택하는 코드 컨벤션이지, 플랫폼이 강제하는 게 아니다. OpenClaw도 Discord 채널을 지원하고, Slack에는 없었던 네이티브 exec 승인 클라이언트까지 Discord에는 구현돼 있다.

Discord 전환 결정

슬랙 무료 전환(~7/22) 전 20일 내 Discord로 이전하기로 했다. 4단계 진행:

단계기간내용

1 2~3일 Discord 서버 + 3봇 앱 생성
2 5일 openclaw.json 재배선 + send_briefing.py 수정 + 봇↔봇 대화 테스트
3 7일 슬랙·Discord 병행 운용
4 이후 슬랙 종료 + 미배치 6봇 Discord 신설

send_briefing.py는 슬랙 코드를 지우지 않고 config에 send.platform 필드를 넣어 "slack" → "both" → "discord" 단계 전환하는 구조로 간다.

SOUL 6종 수신

Ultron에서 서태웅·강백호·권준호·정대만·채소연·채치수 SOUL이 도착했다. 안 감독만 골격 상태로 남았다. 9봇 중 8봇 SOUL 완성.

봇 분류 최종 확정

A형(LLM만, 송태섭), B형(외부 엔진, B-1 상주/B-2 온디맨드), C형 신설(엔진 없음, 비정기 참견, 봉투 면제, 보고 없음). C형은 채치수(회의론자)와 채소연(윤활제)으로 같은 메커니즘 위에 임계치만 다르게.

교훈

  • SOUL에 "오케스트레이터"라고 적는 것과 실제 디스패치 배선은 다르다. measure-first.
  • 설정 문제와 플랫폼 제한을 구분하려면 3회 이상 실측이 필요했다. 1회 실패로 단정하면 안 된다.
  • 매몰비용(allowBots·users·botLoopProtection 등)은 진짜 원인을 드러내준 값어치가 있었다.
  • 플랫폼 선택은 기능의 근본 한계를 결정한다. 설정으로 안 되는 건 코드로도 안 된다.

→ Discord 마이그레이션 착수. 봇↔봇 대화 테스트 통과가 진짜 마일스톤.