Xây dựng trợ lý cá nhân với OpenClaw

OpenClaw là gateway WhatsApp + Telegram + Discord + iMessage cho các agent Pi. Plugin bổ sung Mattermost. Hướng dẫn này dành cho thiết lập “trợ lý cá nhân”: một số WhatsApp chuyên dụng hoạt động như agent luôn trực tuyến của bạn.

⚠️ Bảo mật trước tiên

Bạn đang cho agent khả năng:

  • chạy lệnh trên máy của bạn (tùy thuộc thiết lập công cụ Pi)
  • đọc/ghi file trong workspace
  • gửi tin nhắn qua WhatsApp/Telegram/Discord/Mattermost (plugin)

Bắt đầu thận trọng:

  • Luôn đặt channels.whatsapp.allowFrom (đừng bao giờ chạy mở cho cả thế giới trên Mac cá nhân).
  • Dùng số WhatsApp chuyên dụng cho trợ lý.
  • Heartbeat mặc định chạy mỗi 30 phút. Tắt cho đến khi bạn tin tưởng thiết lập bằng cách đặt agents.defaults.heartbeat.every: "0m".

Yêu cầu

  • OpenClaw đã cài đặt và onboard — xem Bắt đầu nếu chưa thực hiện
  • Số điện thoại thứ hai (SIM/eSIM/trả trước) cho trợ lý

Thiết lập hai điện thoại (khuyến nghị)

Bạn muốn đạt được thế này:

flowchart TB
    A["<b>Your Phone (personal)<br></b><br>Your WhatsApp<br>+1-555-YOU"] -- message --> B["<b>Second Phone (assistant)<br></b><br>Assistant WA<br>+1-555-ASSIST"]
    B -- linked via QR --> C["<b>Your Mac (openclaw)<br></b><br>Pi agent"]

Nếu bạn liên kết WhatsApp cá nhân vào OpenClaw, mọi tin nhắn gửi cho bạn đều trở thành “đầu vào cho agent”. Hiếm khi đó là điều bạn muốn.

Bắt đầu nhanh 5 phút

  1. Ghép nối WhatsApp Web (hiện QR; quét bằng điện thoại trợ lý):
openclaw channels login
  1. Khởi động Gateway (để chạy):
openclaw gateway --port 18789
  1. Đặt cấu hình tối thiểu vào ~/.openclaw/openclaw.json:
{
  channels: { whatsapp: { allowFrom: ["+15555550123"] } },
}

Giờ gửi tin nhắn đến số trợ lý từ điện thoại trong allowlist.

Khi onboarding hoàn tất, hệ thống tự động mở dashboard và hiển thị link sạch (không token). Nếu yêu cầu xác thực, dán token từ gateway.auth.token vào cài đặt Control UI. Để mở lại sau: openclaw dashboard.

Cho agent một workspace (AGENTS)

OpenClaw đọc hướng dẫn vận hành và “bộ nhớ” từ thư mục workspace.

Mặc định, OpenClaw dùng ~/.openclaw/workspace làm workspace agent và sẽ tự tạo (cùng các file khởi đầu AGENTS.md, SOUL.md, TOOLS.md, IDENTITY.md, USER.md, HEARTBEAT.md) khi setup/chạy agent lần đầu. BOOTSTRAP.md chỉ được tạo khi workspace hoàn toàn mới (không xuất hiện lại sau khi xóa). MEMORY.md là tùy chọn (không tự tạo); khi có mặt, nó được tải cho session bình thường. Session sub-agent chỉ inject AGENTS.mdTOOLS.md.

Mẹo: coi thư mục này như “bộ nhớ” của OpenClaw và biến nó thành git repo (tốt nhất là private) để AGENTS.md cùng các file bộ nhớ được backup. Nếu git đã cài, workspace mới được tự động khởi tạo.

openclaw setup

Cấu trúc workspace đầy đủ + hướng dẫn backup: Workspace của agent Workflow bộ nhớ: Bộ nhớ

Tùy chọn: chọn workspace khác bằng agents.defaults.workspace (hỗ trợ ~).

{
  agent: {
    workspace: "~/.openclaw/workspace",
  },
}

Nếu bạn đã cung cấp file workspace riêng từ repo, có thể tắt hoàn toàn việc tạo file bootstrap:

{
  agent: {
    skipBootstrap: true,
  },
}

Cấu hình biến nó thành “trợ lý”

OpenClaw mặc định đã cấu hình tốt cho trợ lý, nhưng bạn thường muốn tinh chỉnh:

  • persona/hướng dẫn trong SOUL.md
  • mặc định thinking (nếu cần)
  • heartbeat (khi đã tin tưởng)

Ví dụ:

{
  logging: { level: "info" },
  agent: {
    model: "anthropic/claude-opus-4-6",
    workspace: "~/.openclaw/workspace",
    thinkingDefault: "high",
    timeoutSeconds: 1800,
    // Bắt đầu với 0; bật sau.
    heartbeat: { every: "0m" },
  },
  channels: {
    whatsapp: {
      allowFrom: ["+15555550123"],
      groups: {
        "*": { requireMention: true },
      },
    },
  },
  routing: {
    groupChat: {
      mentionPatterns: ["@openclaw", "openclaw"],
    },
  },
  session: {
    scope: "per-sender",
    resetTriggers: ["/new", "/reset"],
    reset: {
      mode: "daily",
      atHour: 4,
      idleMinutes: 10080,
    },
  },
}

Session và bộ nhớ

  • File session: ~/.openclaw/agents/<agentId>/sessions/{{SessionId}}.jsonl
  • Metadata session (lượng token dùng, route cuối, v.v.): ~/.openclaw/agents/<agentId>/sessions/sessions.json (legacy: ~/.openclaw/sessions/sessions.json)
  • /new hoặc /reset bắt đầu session mới cho cuộc trò chuyện đó (cấu hình qua resetTriggers). Nếu gửi riêng lẻ, agent phản hồi bằng lời chào ngắn xác nhận reset.
  • /compact [instructions] nén context session và báo cáo ngân sách context còn lại.

Heartbeat (chế độ chủ động)

Mặc định, OpenClaw chạy heartbeat mỗi 30 phút với prompt: Read HEARTBEAT.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK. Đặt agents.defaults.heartbeat.every: "0m" để tắt.

  • Nếu HEARTBEAT.md tồn tại nhưng thực chất rỗng (chỉ có dòng trống và header markdown như # Heading), OpenClaw bỏ qua lần chạy heartbeat để tiết kiệm API call.
  • Nếu file không tồn tại, heartbeat vẫn chạy và model quyết định làm gì.
  • Nếu agent phản hồi HEARTBEAT_OK (tùy chọn với phần đệm ngắn; xem agents.defaults.heartbeat.ackMaxChars), OpenClaw chặn việc gửi đi cho heartbeat đó.
  • Mặc định cho phép gửi heartbeat đến mục tiêu kiểu DM user:<id>. Đặt agents.defaults.heartbeat.directPolicy: "block" để chặn gửi trực tiếp trong khi vẫn giữ chạy heartbeat.
  • Heartbeat chạy toàn bộ lượt agent — khoảng cách ngắn hơn đốt nhiều token hơn.
{
  agent: {
    heartbeat: { every: "30m" },
  },
}

Media vào và ra

Đính kèm đến (hình ảnh/audio/tài liệu) có thể được hiển thị cho lệnh qua template:

  • {{MediaPath}} (đường dẫn file tạm cục bộ)
  • {{MediaUrl}} (pseudo-URL)
  • {{Transcript}} (nếu bật phiên âm audio)

Đính kèm đi từ agent: đặt MEDIA:<path-or-url> trên dòng riêng (không có khoảng trắng). Ví dụ:

Here's the screenshot.
MEDIA:https://example.com/screenshot.png

OpenClaw trích xuất và gửi chúng dưới dạng media cùng văn bản.

Checklist vận hành

openclaw status          # trạng thái cục bộ (thông tin đăng nhập, session, sự kiện chờ)
openclaw status --all    # chẩn đoán đầy đủ (chỉ đọc, có thể dán)
openclaw status --deep   # thêm health probe gateway (Telegram + Discord)
openclaw health --json   # ảnh chụp health gateway (WS)

Log nằm ở /tmp/openclaw/ (mặc định: openclaw-YYYY-MM-DD.log).

Bước tiếp theo