🤖HermesBlog
Hermes 消息平台接入 · 第8篇2026/8/9· Easy Understand Hermes Agent

短信接入——手机号直接指挥 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_SIDTWILIO_AUTH_TOKENTWILIO_PHONE_NUMBER 这三个凭证直接复用,不用重新申请。

第一步:拿到 Twilio 凭证

登录 Twilio Console,在首页复制 Account SIDAuth 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 里设置:

  • Webhookhttps://你的服务器:8080/webhooks/twilio
  • HTTP MethodPOST

本地调试的话,用隧道工具把 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 吧。

收不到消息?排查三步走

  1. 检查 Twilio 里的 webhook URL 是否正确且公网可访问
  2. 确认 TWILIO_ACCOUNT_SIDTWILIO_AUTH_TOKEN 没填错
  3. 去 Twilio Console → Monitor → Logs → Messaging 看投递日志,并确认你的号码在白名单里

搞定,去发条短信试试吧!📱✨

📖 官方文档

本文根据 Hermes Agent 官方文档编写,原文见:官方文档 › user-guide/messaging/sms