短信转发接收端

基于 TranspondSms Android APP 的短信转发接收后台

功能特性

  • 登录验证 - 需要登录才能查看和管理短信
  • Token/Secret 可选配置 - 支持在 config.json 中配置多个 API Token
  • 接收 Android APP 转发的短信 - POST multipart/form-data
  • HMAC-SHA256 签名验证 - 可选的安全机制
  • SQLite 数据库存储
  • Web 管理界面 - 查看实时短信、日志、统计
  • 时区支持 - 自动转换为本地时间(默认 Asia/Shanghai
  • RESTful API 支持
  • 自动刷新 - 短信列表30秒自动刷新

快速启动

# 进入项目目录
cd /root/.openclaw/workspace/sms-receiver

# 启动服务
python3 app.py

服务将运行在 http://127.0.0.1:9518

配置说明

config.json 配置文件

创建或编辑 config.json 文件:

{
  "server": {
    "host": "0.0.0.0",
    "port": 9518,
    "debug": true
  },
  "security": {
    "enabled": true,
    "username": "admin",
    "password": "admin123",
    "session_lifetime": 3600,
    "secret_key": "default_secret_key_change_me",
    "sign_verify": true,
    "sign_max_age": 3600000
  },
  "sms": {
    "max_messages": 10000,
    "auto_cleanup": true,
    "cleanup_days": 30
  },
  "database": {
    "path": "sms_receiver.db"
  },
  "timezone": "Asia/Shanghai",
  "api_tokens": [
    {
      "name": "默认配置",
      "token": "default_token",
      "secret": "your_secret_here",
      "enabled": true
    },
    {
      "name": "设备1",
      "token": "device1_token",
      "secret": "device1_secret",
      "enabled": true
    }
  ]
}

配置项说明

说明 默认值
security.enabled 是否启用登录验证 true
security.username 登录用户名 admin
security.password 登录密码 admin123
security.session_lifetime 会话有效期(秒) 3600
security.secret_key Flask 会话密钥 -
security.sign_verify 是否验证签名 true
security.sign_max_age 签名最大有效时间(毫秒) 3600000
api_tokens API Token 配置列表 -
timezone 时区 Asia/Shanghai

API Token 配置

每个 Token 配置包含:

  • name: 配置名称(可选)
  • token: Token 值,需要在 TranspondSms APP 中填写
  • secret: 密钥,可选,填写后启用签名验证
  • enabled: 是否启用此 Token

注意

  • Token 和 Secret 都是可选的
  • 不填 Secret 时跳过签名验证
  • 可以配置多个 Token 供多个设备使用
  • enabled 为 false 时该 Token 不可用

配置 TranspondSms APP

在 Android APP 的"网页通知"配置中:

基础配置(无 Token

  • Token (URL): http://your-server-ip:9518/api/receive
  • Secret: 留空

使用 Token 配置

如果你在 config.json 中配置了 Token

  • Token (URL): http://your-server-ip:9518/api/receive
  • Secret: 根据你要使用的 Token 配置填写

注意TranspondSms APP 的设置中,没有专门的 Token 字段。你需要通过以下方式传递 Token

  1. 方法一:在 URL 中携带 Token

    http://your-server-ip:9518/api/receive?token=your_token
    
  2. 方法二:在 Secret 字段中填写 <token>|<secret>

    my_token|my_secret
    

    然后修改代码解析这个格式(需自行实现)

当前实现在短信接收时TranspondSms APP 会发送一个 token 参数,系统会自动匹配对应的 secret。

目前 TranspondSms APP 的 Token 参数默认会放在请求的 query string 中:

POST /api/receive?token=your_token
Content-Type: multipart/form-data

如需传递多个设备的不同 Token在 APP 中添加多个网页通知配置即可。

登录功能

默认登录信息

  • 用户名: admin
  • 密码: admin123

首次使用后,请立即修改 config.json 中的 security.usernamesecurity.password

会话管理

  • 会话默认有效期1小时3600秒
  • 超时后需要重新登录
  • 可以通过 security.session_lifetime 调整

禁用登录

如果不需要登录验证,设置 config.json

{
  "security": {
    "enabled": false
  }
}

API 接口

接收短信

POST /api/receive?token=your_token
Content-Type: multipart/form-data

参数:
- token: API Token可选用于匹配 secret
- from: 发送方手机号(必填)
- content: 短信内容(必填)
- timestamp: 时间戳(毫秒,可选)
- sign: 签名(可选)
- device: 设备信息(可选)
- sim: SIM 卡信息(可选)

查询短信列表(需要登录)

GET /api/messages?page=1&limit=20

查询统计信息(需要登录)

GET /api/statistics

时区配置

系统默认使用 Asia/Shanghai 时区UTC+8

config.json 中修改时区:

{
  "timezone": "America/New_York"
}

支持的时区名称参考:https://en.wikipedia.org/wiki/List_of_tz_database_time_zones

安全建议

  1. 修改默认密码:首次使用后立即修改登录密码
  2. 修改 Secret Key:修改 security.secret_key 为随机字符串
  3. 使用 HTTPS生产环境建议配置反向代理Nginx + Let's Encrypt
  4. 启用签名验证:设置 Token 的 secret 启用签名,防止伪造请求
  5. 会话超时:设置合理的 session_lifetime

默认配置说明

配置 默认值 说明
端口 9518 Web 服务监听端口
数据库 sms_receiver.db SQLite 数据库文件
时区 Asia/Shanghai 武汉时间 UTC+8
会话有效期 3600 秒 1小时
最多保留短信 10000 条 超过自动清理
自动刷新间隔 30 秒 SMS 列表自动刷新时间

项目文件

/root/.openclaw/workspace/sms-receiver/
├── app.py                    # Flask 主应用
├── config.json               # 配置文件(需创建)
├── config.py                 # 配置加载器
├── database.py               # SQLite 数据库模型
├── sign_verify.py            # HMAC-SHA256 签名验证
├── requirements.txt          # 依赖包
├── templates/                # HTML 模板
│   ├── login.html           # 登录页面
│   ├── index.html           # 主页(短信列表)
│   ├── message_detail.html  # 短信详情
│   ├── logs.html            # 接收日志
│   ├── statistics.html      # 统计信息
│   └── error.html           # 错误页面
└── README.md                # 本文档
Description
No description provided
Readme 110 KiB
Languages
HTML 53.1%
Python 42%
Shell 4.9%