Skip to main content

Cài Discord Bot cho OpenClaw

Mục tiêu

Cấu hình Discord Bot để chat với OpenClaw qua DM.

Kết quả sau khi cài:

  • Có một Bot Discord online.
  • Có thể DM và nhận phản hồi từ Bot.

Điều kiện trước khi làm

OpenClaw Gateway đã chạy bằng Docker/Portainer.

Đã cài đặt backend bất kỳ, có thể chat với OpenClaw thông qua web hoặc nền tảng khác.

Tóm tắt nhanh

Các bước chính:

  1. Tạo Discord Application 
  2. Tạo Bot và copy Bot Token
  3. Bật Message Content Intent + Server Members Intent 
  4. Cấu hình Installation → Guild Install → bot + applications.commands 
  5. Invite bot vào server riêng 
  6. Thêm DISCORD_BOT_TOKEN vào Portainer 
  7. Cài plugin @openclaw/discord 
  8. Bật channels.discord trong OpenClaw config 
  9. Restart OpenClaw Gateway 
  10. Pair Discord DM với OpenClaw 
  11. Chat với OpenClaw qua DM bot

Tạo Discord Application và Bot

Vào Discord Developer Portal > New Application > Đặt tên (Ex: OClaw) 

Ở menu bên trái chọn Bot > Reset Token > Copy Bot Token (lưu lại token này để dùng sau)

Bật Gateway Intents cho Bot

Vẫn trong tab Bot > Privileged Gateway Intents

  • Message Content Intent: ON → Cho phép bot đọc nội dung tin nhắn.
  • Server Members Intent: ON → Hữu ích nếu sau này muốn allowlist theo user/role/server.
  • Presence Intent: OFF

Save Changes

Cấu hình Installation

Chuyển sang tab Installation

Installation Contexts

  • Guild Install: ON
  • User Install: optional
  • Chọn Discord Provided Link

Default Install Settings

  • Với Guild Install, thêm scopes:
    • bot
    • applications.commands

Khi chọn bot, Discord sẽ hiện phần quyền cho bot. Chọn tối thiểu:

  • View Channels
  • Send Messages
  • Read Message History
  • Embed Links
  • Attach Files
  • Add Reactions

Nếu muốn dùng thread/forum channel, bật thêm:

  • Send Messages in Threads

Sau đó copy Install Link, mở bằng trình duyệt và mời bot vào server riêng của bạn.

Bật Developer Mode và lấy ID


Trong Discord app > User Settings > Advanced > Developer Mode: ON

Lấy các ID cần thiết:

  • Right-click server icon → Copy Server ID
  • Right-click avatar của bạn → Copy User ID

Các giá trị cần có:

  • DISCORD_BOT_TOKEN=... // → Không gửi cho người khác.
  • DISCORD_SERVER_ID=... // → Dùng nếu sau này muốn cấu hình bot trong server/channel.
  • DISCORD_USER_ID=... // → Dùng để kiểm soát ai được phép chat với bot.

Thêm Discord Bot Token vào Portainer stack

Vào Portainer > Stacks > openclaw > Editor

Trong phần Environment variables, thêm:

  • DISCORD_BOT_TOKEN=token_bot_discord_của_bạn

Trong compose, ở service openclaw-gateway, thêm vào phần environment:

  • DISCORD_BOT_TOKEN: ${DISCORD_BOT_TOKEN}

Bấm Update the stack

Test Discord Bot Token

Chạy:

docker exec -it openclaw-gateway sh -lc '
node -e "
fetch(\"https://discord.com/api/v10/users/@me\", {
  headers: { Authorization: \"Bot \" + process.env.DISCORD_BOT_TOKEN }
})
.then(async r => {
  console.log(\"status\", r.status);
  console.log(await r.text());
})
.catch(e => {
  console.error(e);
  process.exit(1);
});
"
'

Kết quả mong muốn:

status 200
{"id":"...","username":"...","bot":true,...}

Nếu ra:

status 401

thì token sai hoặc đã bị reset.

Cài plugin Discord cho OpenClaw

Chỉ cấu hình channels.discord là chưa đủ. OpenClaw cần plugin Discord.

Kiểm tra trạng thái channel:

docker exec -it openclaw-gateway \
  node dist/index.js channels list --all | grep -i discord

Nếu thấy:

Discord: not installed, configured, disabled, run openclaw plugins install @openclaw/discord

thì cài plugin:

docker exec -it openclaw-gateway \
  node dist/index.js plugins install @openclaw/discord

Sau đó kiểm tra lại:

docker exec -it openclaw-gateway \
  node dist/index.js channels list --all | grep -i discord

Bật Discord channel trong OpenClaw config

Ghi config Discord:

docker exec -it openclaw-gateway \
  node dist/index.js config set --batch-json '[
    {
      "path": "channels.discord.enabled",
      "value": true
    },
    {
      "path": "channels.discord.token",
      "value": {
        "source": "env",
        "provider": "default",
        "id": "DISCORD_BOT_TOKEN"
      }
    },
    {
      "path": "channels.discord.groupPolicy",
      "value": "allowlist"
    }
  ]'

Kiểm tra config:

docker exec -it openclaw-gateway \
  node dist/index.js config get channels.discord --json

Kết quả mong muốn:

{
  "enabled": true,
  "token": {
    "source": "env",
    "provider": "default",
    "id": "DISCORD_BOT_TOKEN"
  },
  "groupPolicy": "allowlist"
}

Restart gateway:

docker restart openclaw-gateway

Bot trên Discord nên chuyển sang Online là thành công.

Pair Discord DM với OpenClaw

Mở DM với bot Discord, gửi hello hoặc pair > Bot sẽ trả về pairing code.

Trên Docker host, kiểm tra pairing request:

docker exec -it openclaw-gateway \
  node dist/index.js pairing list discord

Approve pairing code:

docker exec -it openclaw-gateway \
  node dist/index.js pairing approve discord <CODE>

Sau đó quay lại Discord DM và test:

Bạn đang hoạt động chưa? Trả lời ngắn gọn.

Nếu bot trả lời được, Discord DM đã hoạt động.

Phụ lục

Bot vẫn Offline

Kiểm tra:

docker exec -it openclaw-gateway \
  node dist/index.js channels list --all | grep -i discord

Nếu thấy not installed, cài plugin:

docker exec -it openclaw-gateway \
  node dist/index.js plugins install @openclaw/discord

Restart:

docker restart openclaw-gateway

Token rỗng trong container

Kiểm tra:

docker exec -it openclaw-gateway sh -lc '
if [ -n "$DISCORD_BOT_TOKEN" ]; then
  echo "OK"
else
  echo "EMPTY"
fi
'

Nếu ra EMPTY, kiểm tra lại Portainer Environment variables và compose environment:.

Token sai

Test:

docker exec -it openclaw-gateway sh -lc '
node -e "
fetch(\"https://discord.com/api/v10/users/@me\", {
  headers: { Authorization: \"Bot \" + process.env.DISCORD_BOT_TOKEN }
})
.then(async r => {
  console.log(\"status\", r.status);
  console.log(await r.text());
})
"
'

Nếu ra 401, reset token trong Discord Developer Portal rồi cập nhật lại Portainer.

Bot online nhưng không phản hồi DM

Kiểm tra pairing:

docker exec -it openclaw-gateway \
  node dist/index.js pairing list discord

Approve pairing code nếu có:

docker exec -it openclaw-gateway \
  node dist/index.js pairing approve discord <CODE>

Xem log Discord:

docker exec -it openclaw-gateway \
  node dist/index.js channels logs --channel discord --lines 200