Files
sms_forwarding/README.md
T
wuxu a37344253b feat: 添加Windows COM口支持和跨平台说明
- 支持Windows COM1/COM2/COM3等串口格式
- 支持数字串口号自动转换(如: 3 -> COM3)
- 新增PLATFORM.md跨平台使用说明文档
- 更新配置示例为Windows友好的COM3
- 包含Windows和Linux的串口查看、权限配置等详细说明
2026-06-23 17:53:38 +08:00

3.8 KiB
Raw Blame History

Node.js 4G SMS Gateway

基于Node.js的4G短信网关,通过串口与4G模块通信,接收短信并转发到多种推送渠道。

功能特性

  • ✅ 4G模块AT指令交互
  • ✅ 自动接收短信(PDU模式)
  • ✅ 长短信自动合并
  • ✅ 多通道推送(邮件/钉钉/飞书/Telegram等)
  • ✅ 短信发送功能
  • ✅ 号码黑名单
  • ✅ 管理员远程命令
  • ✅ RESTful API接口
  • ✅ Web管理界面

环境要求

  • Node.js >= 18.x
  • 4G模块通过USB转串口连接到服务器
  • 支持的4G模块:ML307R-DC、SIM7600等AT指令兼容模块

安装

npm install

配置

复制配置模板:

cp config.example.json config.json

编辑 config.json:

{
  "serial": {
    "path": "COM3",
    "baudRate": 115200,
    "_comment": "Windows使用COM1/COM2/COM3等; Linux使用/dev/ttyUSB0"
  },
  "smtp": {
    "server": "smtp.qq.com",
    "port": 465,
    "user": "your@qq.com",
    "pass": "your_auth_code",
    "sendTo": "recipient@example.com"
  },
  "adminPhone": "13800138000",
  "numberBlackList": [],
  "pushChannels": [
    {
      "enabled": true,
      "type": "dingtalk",
      "name": "钉钉通知",
      "url": "https://oapi.dingtalk.com/robot/send?access_token=xxx",
      "secret": "SECxxx"
    }
  ],
  "api": {
    "port": 3000,
    "auth": {
      "username": "admin",
      "password": "admin123"
    }
  }
}

运行

开发模式

npm run dev

生产模式

npm start

使用PM2(推荐)

pm2 start ecosystem.config.js
pm2 save
pm2 startup

API接口

查询状态

GET /api/status

发送短信

POST /api/sms/send
Content-Type: application/json

{
  "phone": "13800138000",
  "message": "测试短信"
}

查询信号强度

GET /api/modem/signal

查询模组信息

GET /api/modem/info

发送AT命令

POST /api/modem/at
Content-Type: application/json

{
  "command": "AT+CSQ"
}

获取日志

GET /api/logs

所有API均需要HTTP Basic认证。

项目结构

.
├── src/
│   ├── index.js           # 入口文件
│   ├── modem.js           # 4G模块通信
│   ├── sms.js             # 短信处理
│   ├── push.js            # 推送通道
│   ├── concat.js          # 长短信合并
│   ├── api.js             # REST API
│   └── logger.js          # 日志系统
├── config.json            # 配置文件
├── package.json
└── README.md

推送通道类型

类型 type值 配置项
钉钉机器人 dingtalk url, secret(可选)
飞书机器人 feishu url, secret(可选)
Telegram Bot telegram url(bot token), key1(chat_id)
PushPlus pushplus key1(token)
Server酱 serverchan key1(sendkey)
Bark bark url(bark服务器)
POST JSON post_json url
GET请求 get url
自定义模板 custom url, customBody

管理员命令

通过短信发送命令(仅管理员号码):

远程发送短信

SMS:目标号码:短信内容

示例:SMS:13800138000:测试消息

重启系统

RESET

长短信处理

  • 自动检测长短信(分段数 > 1)
  • 使用参考号和发送者号码标识同一条长短信
  • 收齐所有分段后自动合并
  • 30秒超时保护(未收齐也转发)

故障排查

串口打不开

# Linux检查串口设备
ls -l /dev/ttyUSB*
# 添加用户到dialout组
sudo usermod -a -G dialout $USER

模块不响应

  • 检查串口路径和波特率
  • 检查USB连接
  • 检查SIM卡是否插好

收不到短信

  • 检查AT+CEREG?网络注册状态
  • 检查AT+CNMI配置是否正确
  • 检查SIM卡余额和服务状态

许可证

MIT