a37344253bcd3497f8623f94b12ba75c8a785b2d
- 支持Windows COM1/COM2/COM3等串口格式 - 支持数字串口号自动转换(如: 3 -> COM3) - 新增PLATFORM.md跨平台使用说明文档 - 更新配置示例为Windows友好的COM3 - 包含Windows和Linux的串口查看、权限配置等详细说明
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
Languages
JavaScript
76.7%
CSS
14%
HTML
9%
Dockerfile
0.3%