短信接入——手机号直接指挥 AI
Hermes 消息平台接入第8篇:SMS。用手机短信和 Hermes 通信。
簡訊接入——手機號碼直接指揮 AI
有沒有想過,不裝 App、不開 Telegram,直接用最原始的傳簡訊就能指揮你的 AI 幹活?沒錯,Hermes 現在支援透過 Twilio 接簡訊了。你發一則簡訊到指定號碼,AI 就回你一則——跟 Telegram 或 Discord 上聊天一模一樣,只不過走的是電信商網路。
準備工作
- Twilio 帳號(twilio.com 免費註冊)
- 一個支援簡訊的 Twilio 電話號碼
- 一台公網可達的伺服器——Twilio 收到簡訊後會透過 webhook 通知你的伺服器
- 安裝簡訊依賴:
cd ~/.hermes/hermes-agent && uv pip install -e ".[sms]"
小提示:如果你之前配過 Twilio 語音或一次性簡訊,那
TWILIO_ACCOUNT_SID、TWILIO_AUTH_TOKEN、TWILIO_PHONE_NUMBER這三個憑證直接複用,不用重新申請。
第一步:拿到 Twilio 憑證
登入 Twilio Console,在首頁複製 Account SID 和 Auth Token,再去 Phone Numbers → Manage → Active Numbers 記下你的號碼(E.164 格式,例如 +15551234567)。
第二步:設定 Hermes
推薦用互動式精靈,一條指令搞定:
hermes gateway setup
選擇 SMS (Twilio),按提示填入憑證即可。
手動設定也行,編輯 ~/.hermes/.env:
TWILIO_ACCOUNT_SID=ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
TWILIO_AUTH_TOKEN=your_auth_token_here
TWILIO_PHONE_NUMBER=+15551234567
# 安全:只允許指定號碼(強烈建議)
SMS_ALLOWED_USERS=+15559876543,+15551112222
# 可選:排程任務結果推送到哪個號碼
SMS_HOME_CHANNEL=+15559876543
第三步:設定 Twilio Webhook
去 Twilio Console → Phone Numbers → Manage → Active Numbers,點你的號碼,在 Messaging → A MESSAGE COMES IN 裡設定:
- Webhook:
https://你的伺服器:8080/webhooks/twilio - HTTP Method:
POST
本機除錯的話,用隧道工具把 localhost 暴露出去:
# cloudflared
cloudflared tunnel --url http://localhost:8080
# 或 ngrok
ngrok http 8080
把產生的公網 URL 填到 Twilio 裡,同時必須設定 SMS_WEBHOOK_URL 為同一個 URL——這是 Twilio 簽章驗證的要求,不設的話閘道會拒絕啟動:
SMS_WEBHOOK_URL=https://你的伺服器:8080/webhooks/twilio
連接埠預設 8080,想改就加一行 SMS_WEBHOOK_PORT=3000。
第四步:啟動閘道
hermes gateway
看到類似輸出就成功了:
[sms] Twilio webhook server listening on 127.0.0.1:8080, from: +1555***4567
如果報錯 Refusing to start: SMS_WEBHOOK_URL is required,回去檢查第三步的 SMS_WEBHOOK_URL 是否設定。
然後給你的 Twilio 號碼發則簡訊試試——AI 會直接回你!
簡訊特有的行為
- 純文字:Markdown 會被自動去掉,因為簡訊裡顯示的是原始字元
- 1600 字元限制:超長回覆會在自然斷句處拆成多則傳送
- 防迴聲:自己 Twilio 號碼傳來的訊息會被忽略,防止無窮迴圈
- 隱私保護:日誌中的電話號碼會自動打碼
安全提醒
預設拒絕所有使用者,必須設定白名單:
# 建議:只允許特定號碼
SMS_ALLOWED_USERS=+15559876543,+15551112222
# 或者放行所有人(不建議,除非你清楚風險)
SMS_ALLOW_ALL_USERS=true
另外,Hermes 會驗證 Twilio 的 X-Twilio-Signature 簽章,防止偽造訊息。本機開發可以暫時設 SMS_INSECURE_NO_SIGNATURE=true 關掉驗證,但千萬別在生產環境這麼幹。
最後提醒一句:簡訊沒有加密,別拿它處理敏感操作。真要安全,還是用 Signal 或 Telegram 吧。
收不到訊息?排查三步走
- 檢查 Twilio 裡的 webhook URL 是否正確且公網可存取
- 確認
TWILIO_ACCOUNT_SID和TWILIO_AUTH_TOKEN沒填錯 - 去 Twilio Console → Monitor → Logs → Messaging 看投遞日誌,並確認你的號碼在白名單裡
搞定,去發則簡訊試試吧!📱✨
📖 官方文档
本文根据 Hermes Agent 官方文档编写,原文见:官方文档 › user-guide/messaging/sms