OpenClaw + Telegram:自架 AI 助手的安裝與安全性設定
AI 文章延伸
選擇平台後可直接帶入閱讀脈絡,快速整理重點、補齊盲點,並延伸到同站相關文章。
我們想要一個隨時可用的 AI 助手,直接在 Telegram 裡對話就能用,不需要開瀏覽器、不需要切換 app。OpenClaw 是一個開源的個人 AI 助手框架,跑在自己的機器上,支援接入 WhatsApp、Telegram、Discord、Slack 等二十幾種通訊平台。
這篇記錄我們從零開始安裝 OpenClaw、串接 Telegram Bot、設定安全性防護的完整過程,包含踩到的幾個坑。
安裝 OpenClaw
OpenClaw 需要 Node.js 22 以上。確認版本後,用 npm 全域安裝:
npm install -g openclaw@latest
安裝完跑一下版本確認:
openclaw --version
# 2026.3.2
裝好之後,執行 onboarding wizard 進行初始化設定:
openclaw onboard --install-daemon
wizard 會引導你設定 Gateway、模型認證和通訊平台。它會自動安裝一個 LaunchAgent(macOS)或 systemd service(Linux),讓 Gateway 在背景持續運作。
設定 OpenAI 模型認證
OpenClaw 支援多種模型供應商。我們選了 OpenAI,用 OAuth 方式認證——不用管理 API Key,直接用 ChatGPT 訂閱帳號。
在 onboard wizard 中選擇 OpenAI Codex (OAuth) 認證方式,流程是:
- wizard 給你一個瀏覽器 URL
- 在瀏覽器登入 ChatGPT 帳號授權
- 瀏覽器重導到一個
localhostURL(頁面會顯示錯誤,這是正常的) - 把完整的 localhost URL 複製貼回終端機
完成後 OAuth token 會自動儲存並定期刷新,不需要手動管理。
如果你不想用 OAuth,也可以改用 API Key:
openclaw models auth paste-token --provider openai
然後貼上 sk-... 開頭的 API Key。
安全性設定:預設不夠安全
onboard wizard 跑完之後,我們打開 ~/.openclaw/openclaw.json 檢查設定,發現幾個需要手動補強的地方。
Gateway 認證
wizard 已經幫我們設了 token 認證,但我們額外確認了幾個關鍵設定:
{
"gateway": {
"bind": "loopback",
"auth": {
"mode": "token",
"allowTailscale": false
},
"controlUi": {
"allowInsecureAuth": false,
"dangerouslyAllowHostHeaderOriginFallback": false
}
}
}
bind: "loopback" 確保 Gateway 只監聽本機,外部完全連不進來。allowInsecureAuth: false 則強制所有連線都要經過認證。
檔案權限
OpenClaw 的設定檔裡包含 token 和 bot 密鑰,預設權限可能太寬鬆。我們手動收緊:
chmod 700 ~/.openclaw/
chmod 600 ~/.openclaw/openclaw.json
chmod 600 ~/.openclaw/.env
chmod 700 ~/.openclaw/credentials/
chmod 700 ~/.openclaw/identity/
chmod 700 ~/.openclaw/devices/
這樣只有當前使用者能讀寫這些檔案。
日誌脫敏
在設定檔裡加上日誌敏感資訊過濾,避免 API Key 或 token 出現在 log 裡:
{
"logging": {
"redactSensitive": "tools",
"redactPatterns": [
"api[_-]?key",
"token",
"password",
"secret"
]
}
}
安全性檢查
設定完跑一次安全性審計:
openclaw security audit --deep
結果是 0 critical、2 warning。兩個 warning 分別是 Gateway 沒啟動(正常)和 Telegram 群組 allowlist 為空(還沒加入群組 ID)。沒有嚴重問題。
Sandbox 模式:隔離執行環境
OpenClaw 的 agent 可以執行 shell 指令、讀寫檔案。如果有人透過 Telegram 傳入惡意指令,理論上可以操作整台電腦。Sandbox 模式就是為了防這個。
在 ~/.openclaw/openclaw.json 裡的 agents.defaults 區塊加入:
{
"agents": {
"defaults": {
"sandbox": {
"mode": "all",
"scope": "agent",
"workspaceAccess": "none",
"docker": {
"dangerouslyAllowReservedContainerTargets": false,
"dangerouslyAllowExternalBindSources": false,
"dangerouslyAllowContainerNamespaceJoin": false
}
}
}
}
}
Sandbox 需要 Docker。我們用的是 OrbStack,一個輕量的 Docker Desktop 替代方案。
三種模式的差別:
off:不隔離,所有 session 都直接跑在主機上non-main:只有你自己的主 session 跑在主機上,Telegram 和群組的 session 跑在 Docker 容器裡all:所有 session 都跑在 Docker 容器裡,包含你自己
我們一開始設成 all,後來發現這樣連自己的對話也被隔離,bot 完全無法幫忙操作本機的事。如果你的需求是「自己用可以操作電腦,但 Telegram 來的訊息要隔離」,non-main 更合適。
串接 Telegram Bot
建立 Bot
到 Telegram 找 @BotFather,用 /newbot 建立一個新的 bot,拿到 bot token。
在 onboard wizard 裡輸入這個 token,或直接寫進設定檔:
{
"channels": {
"telegram": {
"enabled": true,
"botToken": "你的-bot-token",
"dmPolicy": "pairing",
"groupPolicy": "allowlist",
"streaming": "partial"
}
}
}
DM 配對機制
dmPolicy: "pairing" 是關鍵的安全設定。任何人第一次私訊你的 bot,都會收到一組配對碼,bot 不會處理他的訊息。只有你在本機執行核准指令後,那個人才能跟 bot 對話:
openclaw pairing approve telegram YOUR_CODE
這比直接開放好得多。你可以精確控制誰能用你的 bot。
群組安全
groupPolicy: "allowlist" 讓 bot 在群組中只回應白名單內的群組。加上 requireMention: true 可以進一步限制,bot 只在被 @ 的時候才回覆:
{
"channels": {
"telegram": {
"groups": {
"*": { "requireMention": true }
}
}
}
}
串流回覆
streaming: "partial" 讓 bot 在生成回覆的過程中即時更新訊息,而不是等全部生完才一次送出。在 DM 裡它用 Telegram 原生的 draft API(Bot API 9.5 之後支援),群組裡則是用 preview message + editMessageText 的方式。
四個選項:
| 模式 | 效果 |
|---|---|
off | 等全部生成完才送出 |
partial | 即時更新,DM 用 draft,群組用 edit |
block | 舊版相容模式 |
progress | 等同 partial |
啟動與停用
啟動 Gateway
openclaw gateway start
Gateway 以 LaunchAgent daemon 形式在背景運作,重開機也會自動啟動。
停用 Gateway
openclaw gateway stop
停掉後所有功能都會停——Telegram bot 不回覆、WebChat 關閉、CLI 的 agent 指令也無法使用。Gateway 就是 OpenClaw 的心臟。
如果只想關掉 Telegram 但保留其他功能:
openclaw config set channels.telegram.enabled false
openclaw gateway restart
狀態檢查
openclaw status --all
這個指令可以看到 Gateway 是否在跑、Telegram 連線狀態、agent 數量和 session 活動紀錄。
踩坑紀錄
整個設定過程中遇到三個問題:
- 沒有 OpenAI provider plugin — 執行
openclaw models auth login --provider openai出現「No provider plugins found」。OpenAI 不是用 plugin 模式認證,要在 onboard wizard 裡選 OAuth,或用paste-token直接貼 API Key。 - Gateway 重複啟動 — 手動跑
openclaw gateway時報錯 port 已被佔用。onboard wizard 結束後已經自動啟動了 daemon,不需要再手動啟動。用openclaw gateway restart就好。 - Sandbox 需要 Docker — 設了 sandbox mode 但 Docker daemon 沒開,非主 session 會直接失敗。確保 OrbStack 或 Docker Desktop 有在跑。
最終的安全性設定清單
| 設定 | 值 | 說明 |
|---|---|---|
gateway.bind | loopback | 只監聽本機 |
gateway.auth.mode | token | 需要 token 才能連 Gateway |
controlUi.allowInsecureAuth | false | 禁止不安全的認證 |
telegram.dmPolicy | pairing | DM 需配對碼核准 |
telegram.groupPolicy | allowlist | 群組白名單制 |
sandbox.mode | non-main 或 all | Docker 隔離執行環境 |
tools.elevated.enabled | false | 禁止提權操作 |
logging.redactSensitive | tools | 日誌脫敏 |
| 檔案權限 | 600 / 700 | 只有 owner 能讀寫 |
OpenClaw 的預設安全性對個人使用來說不算差,但如果你要接上 Telegram 這種對外的通訊平台,上面這些設定建議都做一遍。