HTTPSMS:用 Android 手机做 SMS 网关,HTTP API 收发短信 + 端到端加密
标签: SMS / 网关 / Android / 开源 / Go / Kotlin / HTTP API / 自托管 / 端到端加密 / 2FA
原文: 微信公众号「AI 开源提效指南」https://mp.weixin.qq.com/s/JNYdiEM-6oXzXXuv-MpzNg
GitHub: https://github.com/NdoleStudio/httpsms
文档: https://docs.httpsms.com
License: AGPL-3.0
一句话定位
HTTPSMS 是一个开源短信网关服务,核心逻辑:你的 Android 手机就是短信网关。安装 App → 调用 HTTP API → 通过手机号收发短信,完全自托管,数据完全掌控。
架构设计
HTTPSMS 由三层组成:
┌─────────────────────────────────────────────────────┐
│ 你的应用/脚本 │
│ 调用 HTTP API: /v1/messages/send │
└──────────────────────┬──────────────────────────────┘
│ HTTP 202 Accepted
▼
┌─────────────────────────────────────────────────────┐
│ httpSMS API (Go + Fiber) │
│ - 接收消息请求 → 推送到 Push Queue │
│ - 异步处理 → 通过 FCM 通知 Android App │
│ - 接收发送结果 → 返回状态 │
└──────────────────────┬──────────────────────────────┘
│ Firebase Cloud Messaging
▼
┌─────────────────────────────────────────────────────┐
│ Android App (Kotlin + Material Design) │
│ - 接收 FCM 推送通知 │
│ - 调用 Android SMS API 发送短信 │
│ - 返回发送结果给 API │
│ - 收到的短信可转发到 Webhook │
└─────────────────────────────────────────────────────┘
消息发送流程
- 用户 → 调用
/v1/messages/sendAPI - API → 推送通知到队列
- API → 立即返回 202 Accepted(异步,不阻塞)
- 队列 → 通过 FCM 推送给 Android 手机
- Android App → 收到推送 → 调用 SMS API 发送
- Android App → 返回发送结果 + 送达报告
关键设计:API 立即返回 202,实际发送异步完成。
核心功能
| 功能 | 说明 |
|---|---|
| 📤 HTTP API 发短信 | 通过 REST API 调用手机发送短信 |
| 📥 Webhook 收短信 | 收到短信后推送到你的服务器 |
| 🔐 端到端加密 | AES-256 加密,密钥只在手机上 |
| 🚦 速率控制 | 自定义发送频率,防止运营商封号 |
| ⏰ 消息过期 | 设置有效期,超时自动过期并通知 |
| 🐳 Docker 自托管 | 完全控制数据,不依赖第三方 |
| 🌐 多语言 SDK | Go / JS / Python / PHP / Java / C# / curl |
安全特性
端到端加密(E2EE)
- 🔑 加密密钥只存储在 Android 手机上
- 🛡️ 即使服务器被攻破,也无法读取短信内容
- 🔒 发送和接收的短信都是加密传输
速率控制(Back Pressure)
# 设置每分钟最多发送 3 条短信
# 即使一次性调用 100 次,实际也只按 3 条/分钟的速度发送
消息过期
# 设置消息有效期为 5 分钟
# 如果 5 分钟内手机没有收到推送,消息自动过期并通知
解决 Android 推送延迟导致短信发送失败的问题。
API 使用示例
Go SDK
import "github.com/NdoleStudio/httpsms-go"
client := httpsms.New(...)
client.Messages.Send(context.Background(), &httpsms.MessageSendParams{
Content: "这是一条测试短信",
From: "+18005550199",
To: "+18005550100",
})
JavaScript/TypeScript
fetch('https://your-server/v1/messages/send', {
method: 'POST',
headers: {
'x-api-key': "xxx",
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({
"content": "这是一条测试短信",
"from": "+18005550199",
"to": "+18005550100"
})
})
.then(res => res.json())
.then(data => console.log(data));
Python
import requests, json
headers = {
'x-api-key': "xxx",
'Accept': 'application/json',
'Content-Type': 'application/json'
}
payload = {
"content": "这是一条测试短信",
"from": "+18005550199",
"to": "+18005550100"
}
response = requests.post(
'https://your-server/v1/messages/send',
headers=headers,
data=json.dumps(payload)
)
print(response.json())
典型使用场景
🔑 2FA 验证码
为个人应用或内部系统搭建低成本的身份验证系统,不依赖第三方短信平台。
🚨 运维告警
服务器宕机、CPU 飙升时,第一时间通过手机发送告警短信。短信到达率比邮件和推送更高。
🧪 自动化测试
开发过程中自动接收并验证短信验证码,集成到 CI/CD 流程。
📡 物联网通知
让没有直接联网的设备通过手机通信回传状态。
与其他方案对比
| 特性 | HTTPSMS | Twilio | 云短信 | 自建 GSM Modem |
|---|---|---|---|---|
| 成本 | 免费(自托管)/ 低费用 | 按条收费 | 按条收费 | 硬件成本 |
| 端到端加密 | ✅ AES-256 | ❌ | ❌ | ✅ 本地 |
| 自托管 | ✅ 完全支持 | ❌ | ❌ | ✅ |
| Webhook | ✅ | ✅ | ✅ | ❌ |
| 速率控制 | ✅ | ✅ | ✅ | ❌ |
| 消息过期 | ✅ | ⚠️ | ❌ | ❌ |
| 开源 | ✅ AGPL-3.0 | ❌ | ❌ | ❌ |
技术栈
| 组件 | 技术 |
|---|---|
| API 服务 | Go + Fiber |
| Android App | Kotlin + Material Design |
| 推送通道 | Firebase Cloud Messaging (FCM) |
| 部署 | Docker 自托管 |
| 加密 | AES-256 E2EE |
快速开始
Docker 自托管部署
- 准备一台 Android 手机
- 安装 HTTPSMS Android App
- Docker 部署 API 服务
- 配置 FCM 推送
- 开始调用 API 收发短信
详细步骤见官方文档:https://docs.httpsms.com
总结
HTTPSMS 的核心价值在于:把你的 Android 手机变成一个完全可控的短信网关。
- 💰 零短信费用(自托管,走手机套餐)
- 🔐 端到端加密(AES-256,密钥只在手机上)
- 🐳 完全自托管(数据不经过第三方)
- 🌐 多语言 SDK(6+ 语言开箱即用)
- 🚦 内置速率控制(防封号)
- 📡 Webhook 接收(短信自动推送到你的服务器)
如果你需要低成本的短信能力(2FA、告警、测试、IoT),又不想依赖第三方短信平台,HTTPSMS 是目前最优雅的开源方案。
相关链接
- GitHub: https://github.com/NdoleStudio/httpsms
- 文档: https://docs.httpsms.com
- 原文: https://mp.weixin.qq.com/s/JNYdiEM-6oXzXXuv-MpzNg
Keywords: HTTPSMS, SMS 网关, Android, Go, Kotlin, HTTP API, 自托管, 端到端加密, AES-256, 2FA, 运维告警, Webhook, 开源项目