commit 86a394ed4fa2f64dbfd7f3bb3395884872aac448 Author: Chang Shu-Huai Date: Mon Feb 9 10:40:02 2026 +0000 today process: 2026-02-09 diff --git a/PM/epics/活動網站/2026SLM班網站.md b/PM/epics/活動網站/2026SLM班網站.md index c473295..7bb7168 100644 --- a/PM/epics/活動網站/2026SLM班網站.md +++ b/PM/epics/活動網站/2026SLM班網站.md @@ -15,4 +15,4 @@ https://scalable.framer.website/ https://x.ai/ https://huly.io/ -先生一個 Prototype 了 \ No newline at end of file +先生一個 Prototype 了 diff --git a/diary/2026/02/2026-02-09.md b/diary/2026/02/2026-02-09.md new file mode 100644 index 0000000..95199c8 --- /dev/null +++ b/diary/2026/02/2026-02-09.md @@ -0,0 +1,96 @@ +> [!NOTE] 每天注意事項 +> +> 每天上班前在路上做的事: +> - 想想今天即將要進行的工作內容 +> +> 每天下班前 30 分鐘做的事: +> * 整理今日結果+寫個 diff 出來存到 .diff 資料夾(daily-commit skill) +> * 看今天的成果是否要 Deliever 給 Richie + + +> [!Danger] 今日工項 +> ### + + +## Tasks +### ISO27001 +```tasks +path includes epics/ISO27001 +not done +``` + +```tasks +path includes epics/MIS +not done +due on or before today +group by heading +``` + +### [[EN 英文網站]]事項 +```tasks +path includes PM/epics/EN +not done +``` + +### [[AIATC 認證網站建置]]的工作事項 +```tasks +path includes PM/epics/AIATC +not done +``` + +### 活動網站 +```tasks +path includes PM/epics/活動網站 +not done +``` + +## Note + +- [ ] [[2026SLM班網站|SLM 網站]]繼續更新 +- [ ] 設好 AIA VM 上面的龍蝦 + - [ ] GoogleChat 設定在[這邊](https://console.cloud.google.com/apis/api/chat.googleapis.com/hangouts-chat?project=aia-cshuai-openclaw) + - [ ] +## Log +- [開工時間::09:17] + +| time | 預計 | 實際 | +| :---- | ----------- | ---------------------- | +| 09-10 | 早餐+SLM 網站進度 | | +| 10-11 | 網站進度 | 進行 SLM 班的網站 | +| 11-12 | 網站進度 | | +| 12-13 | 午餐 | | +| 13-14 | | 設定 ubuntu vm 的蝦蝦 | +| 14-15 | | 設定 ubuntu vm 的蝦蝦 | +| 15-16 | | 設定 ubuntu vm 的蝦蝦 | +| 16-17 | | 設定好蝦蝦的 Google Chat 的綁定 | +| 17-18 | | | +## OpenClaw / AIA 小幫手(今日設定紀錄) +- 09:17(Log)開工。 +- 09:00–10:00 早餐,同步/規劃 SLM 班網站進度。 +- 10:00–11:00 實作 SLM 班網站更新。 +- 13:00–16:00 設定 Ubuntu VM 上的 OpenClaw(蝦蝦/Lobster)環境。 +- 16:00–17:00 完成 OpenClaw 的 Google Chat 綁定設定。 +- 09:11(UTC)補充 OpenClaw Gateway systemd user service 指令:systemctl --user status openclaw-gateway。 +- 09:55–10:00(UTC)決定並要求調整 OpenClaw 執行策略:exec 免 approval、並將 allowlist 改為 security=full(允許所有 exec 指令)。 + +## AI 總結今日報告 + +### 今日變更摘要 + +**新增筆記** +- **OpenClaw × Google Chat 設定方式**([20260209-龍蝦googleChat的設定方式.md](note/20260209-龍蝦googleChat的設定方式.md)) + - 完整記錄 Google Cloud Console 設定步驟 + - OpenClaw 最小可用設定(含 botUser 踩雷點) + - 公網入口安全配置(只暴露 `/googlechat`) + - 除錯與 Troubleshooting 指南 + - 常見踩雷整理(botUser 用 `users/<數字ID>` 很重要) + +**專案更新** +- **2026SLM班網站**:小幅調整 + +### 今日工作重點 +- 上午進行 SLM 班網站更新 +- 下午設定 Ubuntu VM 上的 OpenClaw(蝦蝦/龍蝦)環境(13:00-16:00) +- 完成 OpenClaw 的 Google Chat 綁定設定(16:00-17:00) +- 調整 OpenClaw 執行策略:exec 免 approval、security=full +- 撰寫完整的 OpenClaw × Google Chat 設定文件供日後參考 diff --git a/note/20260209-龍蝦googleChat的設定方式.md b/note/20260209-龍蝦googleChat的設定方式.md new file mode 100644 index 0000000..0ec56e0 --- /dev/null +++ b/note/20260209-龍蝦googleChat的設定方式.md @@ -0,0 +1,234 @@ +# OpenClaw × Google Chat 設定方式(含除錯與踩雷整理) + +> 本文件整理自: +> - OpenClaw 官方文件:Google Chat channel(Chat API webhook) +> - https://docs.openclaw.ai/channels/googlechat.md +> - 你上面貼的「最小可用 openclaw.json」解釋與建議(含 botUser 必踩點) + +--- + +## 目標:一個「開箱即用 + 群組安靜 + DM 安全」的 Google Chat 佈署 + +你要的組合大致是: + +- **群組(space)**:預設要 **@ 機器人** 才回(不吵群) +- **私訊(DM)**:預設要 **pairing 配對** 才能用(安全) +- **新加入 space**:不用每個都手動寫 config,也能先跑起來(看你選 `groupPolicy`) + +你之前那段總結我同意,而且很關鍵: + +> 你現在的 openclaw.json,確實已經是「很小、而且夠用」的設定了,而且你把 **botUser 換成 `users/<數字ID>`** 這步是關鍵。 + +--- + +## 1) Google Cloud Console:必做步驟(精簡版) + +依官方文件的 Quick setup(我把重點壓到最少): + +1. 建 Google Cloud Project + **啟用 Google Chat API** +2. 建 **Service Account**(通常不需要額外 IAM 權限也能跑) +3. 下載 **JSON key** 放到 gateway host(例如 `~/.openclaw/googlechat-service-account.json`) +4. 在 **Chat Configuration** 建立 Chat app: + - Connection settings:HTTP endpoint URL + - Triggers:用同一個 common endpoint,指到 `https://你的公開網址/googlechat` + - Visibility:把你自己的 email 加進去,並把 App status 設成 Live + +### 你在 Console 填的 webhook URL 會影響什麼? + +OpenClaw 會用 `audienceType + audience` 去驗 Google Chat webhook header 內的 bearer token。 + +- `audienceType: "app-url"`:audience 必須等於你在 Console 設的 **webhook URL**(包含 path) +- `audienceType: "project-number"`:audience 改用 Cloud project number(較少見) + +--- + +## 2) OpenClaw:最小可用設定(以及每個欄位在幹嘛) + +下面是你貼的那種「很小而且夠用」方向(用白話標註): + +```json5 +{ + channels: { + googlechat: { + enabled: true, + + // 必要:Service Account 走 Chat API + serviceAccountFile: "/path/to/service-account.json", + + // 必要:驗 webhook token;要跟 Console 那邊設定一致 + audienceType: "app-url", + audience: "https://gateway.example.com/googlechat", + + // 必要:Google Chat POST webhook 進來的路徑 + webhookPath: "/googlechat", + + // 建議(踩雷點):mention 判斷常需要用 users/<數字ID> + // 很多情況只填 email 會不準,尤其是群組 @ mention gating + botUser: "users/111607871196928239761", + + // DM:建議 pairing(安全合理) + dm: { + policy: "pairing" + }, + + // 群組:兩種常見策略 + // (A) 你要「新 space 開箱即用」→ groupPolicy: "open" + // (B) 你要「預設都不讓用,只允許白名單」→ groupPolicy: "allowlist" + groups + groupPolicy: "open" + + // 如果你想更安靜:針對 space 設 requireMention: true + // groups: { "spaces/AAAA": { requireMention: true, allow: true } } + } + } +} +``` + +你上面那段結論我直接保留(因為方向正確): + +- `enabled: true`:開啟 googlechat channel +- `serviceAccountFile: ...json`:用 service account 走 Chat API(必要) +- `audienceType: "app-url"` + `audience: "https://.../googlechat"`:驗 webhook token(必要,且要跟 Console webhook URL 一致) +- `webhookPath: "/googlechat"`:收 webhook 的路徑(必要) +- `groupPolicy: "open"`:新加入的 space 不用每個都寫 config,直接可用(你要的開箱即用) +- `requireMention: true`:群組裡要 @ 才回(避免吵群;可在 space level 做) +- `botUser: "users/<數字ID>"`:讓「是否有 @ 到機器人」判斷準確(**超常見踩雷**) +- `dm.policy: "pairing"`:私訊需要配對(安全合理) + +> 小補充:如果你想再更極簡,`mediaMaxMb`、某些 action 開關很多都可以不寫(走預設);但留著可讀性更好。 + +--- + +## 3) 公網入口:只暴露 `/googlechat`(安全重點) + +官方建議非常實際:Google Chat webhook 需要 public HTTPS,但**安全上只應該公開 `/googlechat`**,其他(dashboard、內網 endpoint)留在私網。 + +三種常見做法: + +- **Tailscale Funnel**:把 `/googlechat` 公開、Dashboard 走 tailnet-only(推薦) +- **Reverse proxy(Caddy/Nginx)**:只 proxy `/googlechat*` +- **Cloudflare Tunnel**:ingress 只放 `/googlechat`,default rule 404 + +踩雷點: +- 你如果把整個 `/` 都公開,等於把 dashboard/其他 endpoint 也暴露出去(除非你另外做 auth/ACL) + +--- + +## 4) 除錯(Troubleshooting)與快速判斷 + +### A. Google Cloud Logs 出現 405 Method Not Allowed + +官方文件的結論:**通常是 webhook handler 沒有被註冊**(也就是 channel 沒跑起來或 plugin 沒載到)。 + +最常見三個原因: + +1) **Channel 沒設定**(config 根本沒 `channels.googlechat`) + +```bash +openclaw config get channels.googlechat +``` + +如果回「Config path not found」,就是真的沒寫進 config。 + +2) **Plugin 沒啟用**(googlechat plugin disabled) + +```bash +openclaw plugins list | grep googlechat +``` + +如果顯示 disabled,需要在 config 把 `plugins.entries.googlechat.enabled: true` 打開(如果你的版本/套件需要)。 + +3) **改了 config 沒重啟 gateway** + +```bash +openclaw gateway restart +``` + +然後確認 channel 狀態: + +```bash +openclaw channels status +openclaw channels status --probe +``` + +`--probe` 對抓 auth/audience 這種錯很有用。 + +--- + +### B. 完全收不到訊息(Google Chat 沒打到你的 gateway) + +排查順序(最快抓到問題點的順序): + +1. **你公開的 URL 真的可從外部打到嗎?** + - 特別注意你只公開 `/googlechat` path 的那個入口 +2. **Google Chat app config 裡 webhook URL 是否就是你那個 URL(含 path)?** +3. Gateway log 有沒有看到任何 request hit? + - 跑 `openclaw logs --follow`,邊發測試訊息邊看 + +--- + +### C. 收得到 webhook,但一直驗證失敗(401/403 或 probe 顯示 audience 不對) + +最常見是 `audienceType` / `audience` 不匹配。 + +- 你用 `audienceType: "app-url"` 時: + - `audience` 必須等於 Console 裡你設定的 webhook URL(**通常要包含 `/googlechat`**) +- 如果你改了 public URL(例如換 domain、換 Funnel hostname),記得一起更新 `audience` + +建議做法: +- 先固定一個最終 webhook URL +- 再把 Console 與 OpenClaw config 的 `audience` 一次對齊 + +--- + +### D. 群組裡「明明 @ 了機器人,但它不回」 + +這個是你特別點到的雷,也是我覺得最值得寫進備忘錄的: + +- **`botUser` 盡量用 `users/<數字ID>`** +- 不要只用 email 期待 mention detection 永遠準 + +官方文件也明講: +- Group spaces 預設 require mention;如果 mention gating 把回覆擋掉,就要設 `botUser` 成 app 的 user resource name,再驗 `requireMention`。 + +快速檢查清單: +- space 設定是不是 `requireMention: true`?(你期待它要 @ 才回) +- `botUser` 是否為正確的 `users/`? +- 你的 @ 對象是否真的是該 Chat app(同名 app 很容易誤 @) + +--- + +### E. DM 進來一直要配對 / 無法通過 + +這是正常行為(安全設計),除非你改掉 `dm.policy`。 + +- 預設 pairing:未知 DM 會拿到 pairing code +- 管理端需要 approve: + +```bash +openclaw pairing approve googlechat +``` + +(如果你希望某些人不用 pairing:可用 `dm.allowFrom` 加 allowlist) + +--- + +## 5) 容易踩的雷(總整理) + +1. **botUser 用 email 以為可以** → 實務上常常不準,尤其 mention gating;用 `users/<數字ID>`。 +2. **audience 填錯** → `audienceType: app-url` 時,`audience` 必須和 Console webhook URL 一致(含 path)。 +3. **只改 config 沒重啟** → webhook handler/route 不會更新。 +4. **公開整個 gateway** → 安全風險;只公開 `/googlechat`。 +5. **405 代表 handler 沒註冊** → 大多是 channel/plugin 沒啟用或沒重啟。 + +--- + +## 6) 我建議你加在備忘錄的一句話(超值) + +> Google Chat 的 `botUser` 一定要用 `users/`(數字 ID),不要只用 email;不然群組 @ mention 判斷容易失敗。 + +--- + +## 來源 + +- OpenClaw Docs: Google Chat channel + - https://docs.openclaw.ai/channels/googlechat.md