源起
今天,我坐在客廳;早上小蝦提醒我去晨跑完,現在邊吃早餐邊看小蝦送來,幫我整理好的「每日經濟學人」500 字報告 (當然是翻譯好的);它又送了一份林熙老師「抄寫英語的奇蹟」今日的課程的音檔;等一下的十分鐘,一邊讀書一邊聽英文,林熙老師的英文發聲真的是好聽;這十分鐘應該是我今天最享受的時間。問一下小蝦 Google 雲端跟他講的台北和台南這兩天的天氣,小蝦也順便說明了家裏到南科公司的路線要怎麼開,大概多久時間;就照小蝦建議的時間出門吧!
如果有人可以,- 提醒你作健康的事,把你從泥沼中挖出來
- 給你一天中最美好的十分鐘
- 幫你作好所有的準備再出門
你願意嗎?
這是我邊學邊寫,到這篇文章完成之後,隔天早上的情境; OpenClaw 小蝦,現在其實就是我所期待的 Siri 的樣子;只是蘋果一直沒有把它作出來。下面的章節有點硬,所以把「後話」拉到「前言」來講;如果你希望跟我共享上述的情境,就繼續看下去吧。
架構、回報機制與雲端服務整合
- 架構
一般我們在描述人工智慧助理的架構來說,都會使用所謂的 Agent Loop;也就是說 AI Agent 是由 "Think"、"Plan"、"Do"、"Observe" 這四個元素組成一個循環。從使用者(我)的角度來看 OpenClaw 的架構,大概就在這個循環的右半部,像這個圖形;

一般我們很習慣跟 AI 聊天之後就得到答案,這是因為 AI 跟我們是一問一答的互動模式,AI 模型會因為我們問問題這個動作而啟動解析語言、分析上下文、尋找資料、推理這一連串的動作,然後再回答;如果,你一開始就不問問題,或是不 "say hi",它不會主動作任何事情;這就是被動模式。
- 回報機制需求
但是 OpenClaw,除了 AI 模型要作的事情以外,他還要搭配各種技能去完成你的要求,比如開信箱、寫報告、存檔。當他完成工作之後,如果要通知使用者;這個通知使用者的動作,並不是原生在 OpenClaw 裏的 Agent 來進行。例如,在蘋果生態的環境裏,Agent 可以透過執行蘋果電腦裏的指令來請 iMessage 通知使用者;這個通知使用者的 iMessage 並不是 OpenClaw 的內建的角色,iMessage 必須要有電腦的使用者 (人類) 的授權才能執行。這就是之前所講的 OpenClaw 的被動架構 (Passive Framework);OpenClaw 的 Agent 是無法對使用者 (人類) 作主動式的行為。對於 Linux 的使用者來說,沒有 iMessage 這個現成可用的工具,當然可以改用 email,但是太不即時了;所以我們要就要 Telegram 自己打造一個可以通知使用者的 Robot,由 OpenClaw Agent 來啟動。
- 雲端服務強化能力
另外一方面,OpenClaw 為了要完成使用者的要求,它要結合各種能力,串接執行的流程來形成"技能",也就是 AI Agent Loop 中 "Plant" 的這一塊。OpenClaw 可以使用的能力有來自 "AI Model" 提供的功能;例如,圖形辨識、推理;以及自己本身的基本功能;例如寫檔、讀檔;或是 Agent 自己寫 Python Code, 或從 ClawHut/GitHut 找到客製化的功能;不過今天我們要講的是真正強大的能力,是 OpenClaw 如何從雲端的大型專案平台取得功能,為使用者作差異化、在地化的服務;所以,最後我們小蝦就會長成下圖中這個樣子;像孫悟空一樣可以飛天乘雲了。

建置訊息回報機制
如果是 OpenClaw 是安裝在 Mac 環境,基本上所有的回報機制都已經具備;可以直接跳過。不過,因為小蝦是安裝在 ubuntu Linux 上,還是要按步就班來進行以下動作。
- 安裝"atd"服務
在終端機命令列上輸入安裝指令,安裝完檢查版本;最後加入 Liux,這樣就可以了。
sudo apt update && sudo apt install at
at -V
sudo systemctl start atd
- 建立 Telegram 的通報機器人
因為 Linux 沒有像 Mac 一樣有 iMessage 可以在 OpenClaw 完成工作之後,直接通知使用者;而使用 email 通知又沒有即時性,所以簡單的替代方案就是在 Telegram 上再新增一個 Robot,當工作結束就啟動這個 Robot 來作通知;這個 Robot 不能接受使用者任何指示,只是單向的送出通知或結果的連結;所有跟 OpenClaw 的溝通還是在原來 Agent 的 Telegram Channel。
- 在 Telegram 找 '@BotFather',打開 Telegram → 搜尋 @BotFather → 點「Start」,建立新 Robot,在對話框輸入"/new"。
- 輸入 Bot Name(顯示名稱)以及 Username(用戶名,結尾必須是 bot) ,然後在新建立的 Robot 的對話框輸入 "/start" 來啟用。
- 把新 Robot 的 Token ID 和使用者的 Chat ID 交給小蝦,請給寫一個功能;透過新的 Robot 傳訊息給我,例如把功能名稱叫作"boom"。下次當你把工作交給小蝦,就可以順便跟他講 "boom as job don";
例如:請他在我吃早餐的時候,把晨報整理好傳給我;

然後,早餐的時候打開通知 Robot (因為晨跑沒帶手機);就可以看到 OpenClaw 整理好的內容了。


- 傳送語音
在 Telegram 中,語音檔的傳送不像一般檔傳送一樣在絕對路徑上加上'MEDIA:' 就可以,而必須要透過 Telegram 提供給開發者的指令介面 (Bot API) 來進行。因為我們有建立一個 Telegram 的通報機器人,利用 "sendAudio()" 方式請通報機人送給我,在 Telegram 點了之後,就會播放;例如
curl -X POST "https://api.telegram.org/bot<發送人 TOKEN>/sendAudio" -F "chat_id=[接受人的 id]” -F "audio=@音檔.m4a" -F "title=英文課"不過這些事情包括所有的程式,小蝦都會自己完成;我只要出一張嘴就好。





調用大型雲端平台,打造自己的貴賓室服務
就像一開始我們所提到,OpenClaw 的能力不限於 AI 模型與 ClawHut 的技能範圍;它可以直接調用大型的雲端服務平台,透過 OpenClaw 具備的文件解析及程式能力,不需要使用者寫一行程式碼;就可以打造差異化、個人化的服務。以調用 Google 天氣預報服務為例,它是包在 Google Map 相關的服務裏面。
- 取得雲端服務商的授權
我們可以先到 Google Maps Platform 的 weather forecast 服務頁面,接點選 "API";進入 "API"畫面,點選"開始使用";就會到 Google Cloud 控制台,因為我們之前有設置 Google Docs/Sheets/Slides 的授權,所以可以看到我們的 Google Cloud 專案;點選左邊的"金鑰與憑證",直接啟動"Map Platform API Key";取得 API Key 的內容,把它記下來;這樣就可以。這個 Key 可以使用 33 種 Google 的服務,免費額度很高,可以放心使用。



- 使用雲端服務開發成技能
先叫小蝦去讀文件,它會自己去找文件,自己寫好程式,自己 debug;然後,測試給你看;不過如果他不知道要從那裏開始,可以先把文件的連結給他,請他去讀一下;然後,請他看一下 demo code,可以比較快找到 API 的進入點。
import requests
def get_coordinates(address, api_key):
endpoint = "https://maps.googleapis.com/maps/api/geocode/json"
params = {
"address": address,
"key": api_key
}
response = requests.get(endpoint, params=params)
data = response.json()
location = data["results"][0]["geometry"]["location"]
return location["lat"], location["lng"]
#---------------------
# main
#---------------------
address='台北 101'
coordinates=get_coordinates(address, api_key)
endpoint = "https://weather.googleapis.com/v1/currentConditions:lookup"
params = {
"key": api_key,
"location.latitude": coordinates[0],
"location.longitude": coordinates[1],
"unitsSystem": "METRIC" # 使用公制單位
}
response = requests.get(endpoint, params=params)
weather_data = response.json()
api_key=api_data.get("google", {}).get("GOOGLE_WEATHER_API")
print('溫度:',weather_data.get('temperature').get('degrees'),'%')
print('降雨:',weather_data.get('precipitation').get('probability').get('percent'),'%')
如果你覺得沒問題,就他自己直接作成技能 (skill);從頭到尾,我只要出嘴巴就好。





小蝦也從文件看到這支 Key 有其他 Google Map 的 API 服務可以使用;所以,試著跟他來回幾次的討論,也可以作出像這樣的隨身工具。

















