这个项目能做什么
httpSMS 是一项让你把 Android 手机用作短信网关的服务。你调用一个简单的 HTTP API,该请求会触发 Android 手机发送短信。手机上收到的消息可以转发到你提供的 webhook 端点。创建这个项目是因为许多国家无法获得虚拟电话号码,而作者想要一种自动化、由 API 驱动的方式,通过真实手机发送和接收短信。
组件
- Web UI:使用 Nuxt 和 Vuetify 构建的单页应用,托管在 Firebase 上;源代码位于 web 目录。
- API:使用 Go 和 Fiber 构建,使用 CockroachDB,设计为在 Google Cloud Run 上以无服务器方式运行。API 文档单独发布。
- Android 应用:原生 Kotlin 应用,必须先安装到手机上才能发送或接收消息。它以 APK 形式并通过 GitHub releases 分发。
功能
- 端到端加密:消息可以使用 AES-256 加密,密钥仅存储在手机上,因此服务器无法读取消息内容。
- Webhook:收到的短信可以转发到回调 URL,以便构建集成。
- 背压:可配置的速率限制(例如每分钟三条消息)可防止即使有许多收件人排队时也淹没手机的短信 API。
- 消息过期:可以为消息有效期设置超时,如果消息在发送前过期,你会收到通知。
API 客户端
列出了 Go 和 JavaScript/TypeScript 的官方客户端库。
发送流程
对发送端点的请求会以 HTTP 202 被接受,随后会安排推送通知并投递到 Android 应用,应用获取该消息,通过 Android SMS API 发送,并异步将发送结果和送达报告回传到 API。
使用 Docker 自托管
README 记录了基于 Docker 的自托管路径:创建 Firebase 项目并配置 Web SDK,启用电子邮件/密码登录(并针对电子邮件枚举保护给出了一个变通方法),生成 Firebase 服务账号凭据和 Android google-services.json,配置 SMTP 电子邮件服务,设置 Cloudflare Turnstile 小部件以保护消息搜索路由,克隆仓库,复制为 web 和 api 提供的 .env.docker 文件,填写环境变量,然后运行 docker compose up --build。之后 Web UI 可通过端口 3000 访问,API 可通过端口 8000 访问。必须向 users 表插入一个系统用户,其 id 和 api_key 与事件队列设置匹配,然后重启 API 容器。必须在 Android Studio 中使用替换后的 google-services.json 构建 Android 应用,推送消息才能正常工作。
测试与许可证
端到端集成测试在 Docker 中运行完整技术栈(API、PostgreSQL、Redis),并使用手机模拟器模拟 Android 设备,也会在推送到 main 和针对 main 的拉取请求时在 CI 中运行。该项目采用 GNU Affero General Public License v3 许可证。
评论
0 人表达喜爱 · 满10人后显示 Deer Point
登录后参与讨论。