Triển khai ClawBot với Claude Subscription dễ dàng bằng Docker Compose
Hướng dẫn từng bước triển khai AI chatbot Telegram sử dụng OpenClaw + Claude Max subscription qua Docker Compose - không cần API key, không tốn thêm chi phí.
Nguyễn Đỗ Cao Sơn
Triển khai ClawBot với Claude Subscription dễ dàng bằng Docker Compose
Bạn đang trả $20-200/tháng cho Claude subscription (Pro/Max) nhưng chỉ dùng qua giao diện web? Bài viết này hướng dẫn bạn biến subscription đó thành một con AI chatbot chạy 24/7 trên Telegram, phục vụ bạn hoặc cả team - mà không tốn thêm đồng
nào.
Chỉ cần Docker và khoảng 15 phút.
Tại sao lại cần làm thế này?
Claude subscription (Pro $20/tháng hoặc Max $100-200/tháng) cho bạn truy cập các model Claude (Opus, Sonnet, Haiku).
Nhưng bạn chỉ dùng được qua claude.ai (web) hoặc Claude Code CLI (terminal).
Muốn tích hợp Claude vào chatbot hay ứng dụng riêng? Anthropic bắt bạn mua API key, tính phí theo token - hoàn toàn tách biệt với subscription đang trả.
Giải pháp: Dùng một proxy để chuyển request API thành lệnh CLI, tận dụng quota subscription.
Cách hoạt động
┌──────────┐ ┌─── Docker Compose ──────────────────────────────────────┐
│ Telegram │───▶│ │
│ (User) │◀───│ ┌──────────┐ ┌──────────────────┐ ┌────────────┐ │
└──────────┘ │ │ OpenClaw │──▶│ Claude Proxy (Go)│──▶│ Claude CLI │ │
│ │ :18789 │ │ :8080 │ │ (claude -p)│ │
┌──────────┐ │ │ AI Agent │ │ OpenAI-compatible│ │ OAuth Max │ │
│ Dashboard│───▶│ │ Telegram │ │ FlexContent patch│ └─────┬──────┘ │
│ (Browser)│ │ └──────────┘ └──────────────────┘ │ │
└──────────┘ │ │ │
│ ┌─────────▼───────┐ │
│ │ Anthropic API │ │
│ │ (Claude Max │ │
│ │ quota, no API$)│ │
│ └─────────────────┘ │
└─────────────────────────────────────────────────────────┘
│
mount: ~/.claude/
(OAuth token từ host)
Flow rất đơn giản:
- Bạn nhắn tin cho bot trên Telegram
- OpenClaw (AI Agent) nhận tin, gửi request tới Claude Proxy
- Proxy chuyển request thành lệnh
claude -p(Claude Code CLI) - CLI dùng OAuth token từ Claude Max subscription để gọi Anthropic
- Response trả ngược về Telegram cho bạn
Tất cả gói trong Docker Compose, chỉ cần docker compose up -d.
Chuẩn bị
| Thứ cần có | Ghi chú |
|---|---|
| Docker + Docker Compose v2 | Cài sẵn trên máy |
| Claude subscription | Pro ($20), Max ($100/$200) |
| Tài khoản Telegram | Để tạo bot |
Bước 1: Cài Claude Code CLI và đăng nhập
Container Docker sẽ mount thư mục ~/.claude/ từ máy host (read-only) để dùng OAuth token. Nên bạn cần đăng nhập CLI trên máy trước.
Cài đặt:
# Linux / macOS
curl -fsSL https://claude.ai/install.sh | bash
# Windows (PowerShell)
irm https://claude.ai/install.ps1 | iex
Đăng nhập:
claude login
Terminal hiện một URL - copy URL đó, mở trên browser, đăng nhập tài khoản Claude (Pro hoặc Max), nhấn Authorize. Terminal tự nhận.
Test thử:
claude -p "Xin chào, trả lời ngắn gọn"
Thấy response là OK. Token lưu tại ~/.claude/, tự động refresh, không cần đăng nhập lại.
Bước 2: Tạo Telegram Bot
Mở Telegram, tìm @BotFather (có tick xanh xác thực), làm theo các bước:
- Nhắn
/newbot - Nhập tên hiển thị:
My AI Bot - Nhập username (kết thúc bằng
bot):my_ai_claw_bot - BotFather trả về token:
7123456789:AAHxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Lưu token này lại - dùng ngay bước sau.
Cấu hình thêm (tuỳ chọn, nhắn cho @BotFather):
/setdescription- mô tả bot/setuserpic- ảnh đại diện/setprivacy→Disable- cho bot đọc tin group mà không cần @mention
Bước 3: Cấu hình
cd docker/
cp .env.example .env
Sửa file .env:
# Bot token từ @BotFather
TELEGRAM_BOT_TOKEN=7123456789:AAHxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# Port proxy
PROXY_PORT=8080
# Port dashboard OpenClaw
GATEWAY_PORT=18789
# Token truy cập dashboard (tạo bằng: openssl rand -hex 24)
DASHBOARD_TOKEN=your-random-token-here
# Đường dẫn tới ~/.claude trên máy host
CLAUDE_CONFIG_HOST=~/.claude
# Thư mục chia sẻ file giữa host và ClawBot
SHARED_DIR=./shared
Chỉ cần điền 2 thứ quan trọng: bot token và dashboard token. Còn lại giữ mặc định.
Bước 4: Khởi động
docker compose up -d
Lần đầu mất 2-3 phút (build proxy Go + cài Claude CLI). Kiểm tra:
docker compose ps # xem status
docker compose logs -f # xem log
Test nhanh proxy:
curl http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer not-needed" \
-d '{
"model": "claude-sonnet-4-6-20250620",
"messages": [{"role": "user", "content": "Xin chào"}]
}'
Nhận JSON response với câu trả lời → proxy OK.
Bước 5: Kết nối Telegram
Mở Telegram, tìm bot, nhắn tin bất kỳ. Bot trả về pairing code:
To continue, ask your admin to approve pairing code: ABC12345
Approve:
docker compose exec openclaw openclaw pairing approve telegram ABC12345
Xong! Nhắn tin cho bot - Claude AI trả lời ngay trên Telegram.
Chia sẻ file giữa host và ClawBot
Thư mục docker/shared/ được mount vào container tại /home/node/shared/. Bạn có thể:
- Gửi file cho bot xử lý: Bỏ file vào
docker/shared/trên máy, bot đọc được - Nhận output từ bot: Bot ghi file ra
/home/node/shared/, bạn lấy ởdocker/shared/
Ví dụ: bỏ file CSV vào shared/, nhắn Telegram bảo bot "phân tích file /home/node/shared/data.csv" — bot đọc và trả kết quả.
Dashboard
OpenClaw có giao diện web quản lý:
http://localhost:18789/#token=<DASHBOARD_TOKEN>
Chọn model
Mặc định là Claude Sonnet 4.6. Bạn có thể đổi:
| Model | Đặc điểm |
|---|---|
claude-sonnet-4-6-20250620 |
Cân bằng tốc độ + chất lượng (mặc định) |
claude-opus-4-6-20250620 |
Mạnh nhất, phù hợp task phức tạp |
claude-haiku-4-5-20251001 |
Nhanh nhất, phù hợp chat thông thường |
Đổi model:
docker compose exec openclaw node -e "
const fs = require('fs');
const cfg = JSON.parse(fs.readFileSync('/home/node/.openclaw/openclaw.json','utf8'));
cfg.agents.defaults.model.primary = 'claude-max/claude-opus-4-6-20250620';
delete cfg.agents.defaults.models;
cfg.agents.defaults.models = {'claude-max/claude-opus-4-6-20250620': {streaming: false}};
fs.writeFileSync('/home/node/.openclaw/openclaw.json', JSON.stringify(cfg, null, 2));
console.log('Done');
"
docker compose restart openclaw
Các lỗi thường gặp và cách fix
Bot trả về [object Object]
Proxy Node.js (claude-max-api-proxy) có bug serialization. Repo này đã dùng proxy Go + patch sẵn, nên không gặp lỗi này.
HTTP 400: Invalid JSON
OpenClaw gửi content dạng array ([{"type":"text","text":"..."}]), proxy Go gốc chỉ xử lý string. Patch FlexContent trong repo đã fix - nếu gặp lại, rebuild:
docker compose build --no-cache claude-proxy
docker compose up -d
"No API key found for provider anthropic"
Config model đang dùng prefix anthropic/ thay vì claude-max/. Kiểm tra:
docker compose exec openclaw cat /home/node/.openclaw/openclaw.json | grep primary
Phải là claude-max/....
Token hết hạn (401)
claude login # re-login trên host
docker compose restart claude-proxy
So sánh nhanh: Claude Max vs API
| Subscription + Proxy | Anthropic API | |
|---|---|---|
| Chi phí | $20-200/tháng (flat) | Theo token (~$3-15/1M tokens) |
| Gói | Pro $20, Max $100/$200 | Pay-per-use |
| Setup | Docker Compose + OAuth | API key |
| Phù hợp | Cá nhân, team nhỏ | Production, scale lớn |
| Rate limit | Theo subscription tier | Theo API tier |
Gói Pro $20/tháng cũng dùng được - rate limit thấp hơn Max nhưng đủ cho chatbot cá nhân. Nếu đã trả subscription - cách này tiết kiệm hơn nhiều so với API.
Tổng kết
5 bước, 15 phút:
- Cài Claude CLI + đăng nhập Max
- Tạo Telegram bot qua @BotFather
- Copy
.env.example→.env, điền token docker compose up -d- Nhắn tin cho bot, approve pairing code
Kết quả: AI chatbot Claude chạy 24/7 trên Telegram, dùng quota subscription, có dashboard quản lý, hỗ trợ nhiều model.