소개
OpenClaw의 가장 강력한 기능 중 하나는 여러 채팅 플랫폼에 동시에 연결할 수 있다는 것입니다. 동일한 AI 어시스턴트를 WhatsApp, Telegram, Discord, Slack, Matrix 등의 플랫폼에 동시에 배치하고, 각 채널마다 다른 모델, 페르소나 및 동작 방식을 설정할 수 있습니다.
이 튜토리얼에서는 다중 채널 설정 방법과 모범 사례를 전반적으로 소개합니다.
다중 채널 아키텍처 개요
OpenClaw의 다중 채널 아키텍처는 다음과 같습니다:
┌─────────────┐
│ OpenClaw │
│ Gateway │
│ :18789 │
└──────┬──────┘
│
┌────────────────┼────────────────┐
│ │ │
┌─────┴─────┐ ┌─────┴─────┐ ┌─────┴─────┐
│ WhatsApp │ │ Telegram │ │ Discord │
│ Channel │ │ Channel │ │ Channel │
└───────────┘ └───────────┘ └───────────┘
각 채널은 독립적으로 실행되며, 동일한 Gateway 서비스를 공유하지만 독립적인 설정을 가질 수 있습니다.
기본 다중 채널 설정
~/.config/openclaw/openclaw.json5를 편집하여 channels에 여러 채널을 추가합니다:
{
// 전역 모델 설정 (각 채널의 기본값으로 사용)
model: {
provider: "claude",
name: "claude-sonnet-4-20250514",
apiKey: "sk-ant-xxxxx"
},
channels: {
// WhatsApp 채널
whatsapp: {
enabled: true,
phoneNumber: "+8613800138000",
responseMode: "all"
},
// Telegram 채널
telegram: {
enabled: true,
botToken: "123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11",
responseMode: "mention"
},
// Discord 채널
discord: {
enabled: true,
botToken: "MTIzNDU2Nzg5MDEy.xxxxx.xxxxx",
responseMode: "mention",
allowedServers: ["1234567890"]
},
// Matrix 채널
matrix: {
enabled: true,
homeserverUrl: "https://matrix.org",
userId: "@openclaw-bot:matrix.org",
accessToken: "syt_xxxxx",
responseMode: "mention"
},
// Slack 채널
slack: {
enabled: true,
botToken: "xoxb-xxxxx",
appToken: "xapp-xxxxx",
responseMode: "mention"
}
}
}
채널별 독립 설정
각 채널은 전역 설정을 재정의하여 독립적인 모델, 페르소나 및 언어 설정을 구현할 수 있습니다.
채널별 다른 모델 지정
{
// 전역 기본 모델
model: {
provider: "claude",
name: "claude-sonnet-4-20250514",
apiKey: "sk-ant-xxxxx"
},
channels: {
// Telegram은 기본 Claude 모델 사용
telegram: {
enabled: true,
botToken: "your-telegram-token"
},
// Discord는 Ollama 로컬 모델 사용 (비용 절감)
discord: {
enabled: true,
botToken: "your-discord-token",
model: {
provider: "ollama",
name: "llama3.1:70b",
baseUrl: "http://localhost:11434"
}
},
// WhatsApp은 OpenAI GPT-4o 사용
whatsapp: {
enabled: true,
phoneNumber: "+8613800138000",
model: {
provider: "openai",
name: "gpt-4o",
apiKey: "sk-xxxxx"
}
}
}
}
채널별 다른 페르소나 설정
{
channels: {
telegram: {
enabled: true,
botToken: "your-telegram-token",
persona: {
name: "작은 도우미",
systemPrompt: "你是一个友好的中文AI助手,语气轻松活泼,适当使用表情符号。"
}
},
slack: {
enabled: true,
botToken: "your-slack-token",
appToken: "your-app-token",
persona: {
name: "TechBot",
systemPrompt: "You are a professional technical assistant. Respond in English. Be concise and precise. Focus on code and technical solutions."
}
},
discord: {
enabled: true,
botToken: "your-discord-token",
persona: {
name: "게임 컨설턴트",
systemPrompt: "你是一个游戏领域的专家,熟悉各种游戏攻略和资讯。回答时可以用轻松幽默的语气。"
}
}
}
}
채널 설정 항목 일람
다음은 각 채널에서 독립적으로 설정할 수 있는 항목입니다:
| 설정 항목 | 설명 | 예시 |
|---|---|---|
model |
AI 모델 설정 | 전역 모델 재정의 |
persona |
페르소나 및 시스템 프롬프트 | 채널별 다른 성격 |
responseMode |
응답 모드 | all / mention |
language |
기본 언어 | zh-CN / en / ja |
maxTokens |
최대 응답 Token 수 | 2048 |
temperature |
모델 온도 | 0.7 |
skills |
활성화할 스킬 목록 | ["weather", "reminder"] |
rateLimit |
빈도 제한 | { maxPerMinute: 10 } |
메시지 라우팅 전략
공유 컨텍스트 vs 격리 컨텍스트
기본적으로 채널 간의 대화 컨텍스트는 서로 격리되어 있습니다. 설정을 통해 공유 컨텍스트를 활성화할 수 있습니다:
{
context: {
// 컨텍스트 격리 전략
// "channel": 채널별 격리 (기본값)
// "user": 사용자별 격리 (동일 사용자가 채널 간 컨텍스트 공유)
// "global": 전역 공유
isolation: "channel",
// 컨텍스트 윈도우 크기
maxMessages: 50,
// 컨텍스트 만료 시간 (초)
ttl: 3600
}
}
사용자별 격리 시나리오
isolation: "user"로 설정하면 동일 사용자가 다른 채널에서의 대화를 이어갈 수 있습니다. 예를 들어, Telegram에서 특정 주제를 논의한 사용자가 Discord로 전환한 후에도 대화를 계속할 수 있습니다.
사용자는 다음과 같은 방식으로 ID를 매핑합니다:
{
context: {
isolation: "user",
// 사용자 ID 매핑 (선택 사항, 크로스 플랫폼에서 동일 사용자 식별)
userMapping: {
"telegram:12345678": "user-alice",
"discord:98765432": "user-alice",
"whatsapp:+8613800138000": "user-alice"
}
}
}
채널별 스킬 설정
각 채널에서 다른 스킬을 활성화할 수 있습니다:
{
channels: {
telegram: {
enabled: true,
botToken: "your-token",
// 이 스킬만 활성화
skills: ["weather", "translate", "reminder"],
},
slack: {
enabled: true,
botToken: "your-token",
appToken: "your-app-token",
// 업무 시나리오 스킬
skills: ["jira", "github", "code-review"],
},
discord: {
enabled: true,
botToken: "your-token",
// 엔터테인먼트 시나리오 스킬
skills: ["trivia", "music-recommend", "game-wiki"],
}
}
}
상태 모니터링
Dashboard 모니터링
OpenClaw Dashboard를 시작하여 모든 채널의 실시간 상태를 확인합니다:
openclaw dashboard
Dashboard는 브라우저에서 열리며 다음을 표시합니다:
- 각 채널의 연결 상태 (온라인/오프라인/오류)
- 메시지 송수신 통계
- 모델 호출 횟수 및 Token 소비량
- 실시간 로그 스트림
명령줄 상태 확인
# 모든 채널 상태 확인
openclaw doctor
# 실시간 로그 보기 (모든 채널)
openclaw logs
# 특정 채널의 로그 보기
openclaw logs --channel telegram
일반적인 정상 출력:
OpenClaw Doctor Report
======================
Gateway: ✓ Running on port 18789
Node.js: ✓ v22.12.0
Channels:
whatsapp: ✓ Connected (uptime: 3d 14h)
telegram: ✓ Connected (uptime: 3d 14h)
discord: ✓ Connected (uptime: 3d 14h)
matrix: ✓ Connected (uptime: 2d 8h)
slack: ✗ Error: Invalid bot token
Models:
claude: ✓ API reachable
ollama: ✓ Running locally
빈도 제한 및 로드 밸런싱
여러 채널이 동시에 활성화된 경우, API 할당량 소진을 방지하기 위해 빈도 제한을 설정하는 것을 권장합니다:
{
// 전역 빈도 제한
rateLimit: {
// 분당 최대 요청 수 (모든 채널 합계)
globalMaxPerMinute: 60,
// 사용자당 분당 최대 요청 수
userMaxPerMinute: 10
},
channels: {
telegram: {
enabled: true,
botToken: "your-token",
// 채널 수준 빈도 제한
rateLimit: {
maxPerMinute: 30
}
},
discord: {
enabled: true,
botToken: "your-token",
rateLimit: {
maxPerMinute: 20
}
}
}
}
채널 활성화 및 비활성화
enabled 필드를 통해 설정을 삭제하지 않고 채널을 빠르게 활성화하거나 비활성화할 수 있습니다:
{
channels: {
whatsapp: {
enabled: true, // 실행 중
// ...
},
telegram: {
enabled: false, // 비활성화됨, 설정은 유지
// ...
}
}
}
설정 수정 후 OpenClaw를 재시작하여 적용합니다:
openclaw restart
실전: 팀 다중 채널 배포 방안
다음은 팀에서 실제로 사용하는 다중 채널 설정 방안입니다:
{
model: {
provider: "claude",
name: "claude-sonnet-4-20250514",
apiKey: "sk-ant-xxxxx"
},
channels: {
// 팀 내부 Slack 작업 채널
slack: {
enabled: true,
botToken: "xoxb-xxxxx",
appToken: "xapp-xxxxx",
responseMode: "mention",
persona: {
name: "팀 어시스턴트",
systemPrompt: "你是团队的技术助手,帮助回答技术问题、review代码、查找文档。"
},
skills: ["github", "jira", "code-review", "docs-search"],
language: "zh-CN"
},
// 고객 지원 Telegram 채널
telegram: {
enabled: true,
botToken: "your-token",
responseMode: "all",
persona: {
name: "고객 도우미",
systemPrompt: "你是产品客服助手,礼貌地回答用户关于产品的问题。遇到无法解决的问题,建议用户联系人工客服。"
},
skills: ["faq", "product-docs"],
model: {
provider: "openai",
name: "gpt-4o-mini",
apiKey: "sk-xxxxx"
}
},
// CEO의 개인 WhatsApp 어시스턴트
whatsapp: {
enabled: true,
phoneNumber: "+8613800138000",
responseMode: "all",
persona: {
name: "스마트 비서",
systemPrompt: "你是CEO的私人智能助手,帮助处理日程、提醒、信息汇总等任务。"
},
skills: ["calendar", "reminder", "news-summary", "weather"]
}
}
}
자주 묻는 질문
특정 채널 연결이 끊어지면 다른 채널에 영향을 미치나요?
영향을 미치지 않습니다. 각 채널은 독립적으로 실행되며, 한 채널의 이상이 다른 채널에 영향을 미치지 않습니다. OpenClaw에는 자동 재연결 메커니즘도 내장되어 있습니다.
다중 채널은 더 많은 메모리를 소비하나요?
추가 채널당 약 20-50MB의 메모리가 증가합니다. 5개 채널이 동시에 실행될 때 총 메모리는 보통 200-400MB 범위입니다.
채널 문제를 빠르게 진단하려면 어떻게 해야 하나요?
# 진단 실행
openclaw doctor
# 특정 채널 로그 보기
openclaw logs --channel discord
# Gateway 상태 확인
curl http://localhost:18789/health
마무리
다중 채널 설정을 통해 OpenClaw는 전 플랫폼 AI 허브가 될 수 있습니다. 각 채널에서 독립적으로 모델, 페르소나, 스킬을 설정할 수 있는 기능 덕분에 다양한 시나리오의 요구사항에 유연하게 대응할 수 있습니다. 상태 모니터링과 빈도 제한을 결합하면 프로덕션 환경에서도 안심하고 다중 채널 서비스를 배포할 수 있습니다.