3ab7a198741e2b2ec77336d9ae47f720686a793a
- 实现AT指令通信和4G模组管理 - 支持PDU模式短信接收和发送 - 长短信自动合并功能 - 多通道推送支持(钉钉/飞书/Telegram等) - 管理员短信远程控制 - RESTful API接口 - 完整的日志系统
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": "/dev/ttyUSB0",
"baudRate": 115200
},
"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%