短信接入——手机号直接指挥 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