# webdial
**Repository Path**: PhiloKun/webdial
## Basic Information
- **Project Name**: webdial
- **Description**: WebRTC SIP phone in browser
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-07-21
- **Last Updated**: 2026-07-21
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# WebDial — 网页拨号器
在浏览器中通过 SIP 协议拨打电话的 WebRTC 客户端。输入号码、点击拨号,像用手机一样在网页上通话。
## 技术架构
```
┌─────────────────────────────────────────────────┐
│ WebDial (浏览器) │
│ ┌─────────┐ ┌──────────┐ ┌───────────────┐ │
│ │ 拨号盘 UI │ │ 通话记录 │ │ 联系人管理 │ │
│ └────┬────┘ └──────────┘ └───────────────┘ │
│ └──────────┬──────────────┘ │
│ ▼ │
│ ┌──────────────┐ │
│ │ JsSIP (SIP) │ ← WebRTC 信令 │
│ └──────┬───────┘ │
│ │ WebSocket │
└─────────────────┼───────────────────────────────┘
│
wss://sip.server:8089/ws
│
┌───────▼────────┐
│ SIP 服务器 │ ← FreeSWITCH / Asterisk
│ (PBX/注册/路由) │
└───────┬────────┘
│
┌───────▼────────┐
│ PSTN 落地网关 │ ← SIP 中继 / GSM 网关
│ (国内落地) │
└───────┬────────┘
│
┌───────▼────────┐
│ 手机/固话 │
└────────────────┘
```
### 核心依赖
| 组件 | 技术 | 说明 |
|------|------|------|
| SIP 客户端 | JsSIP (v3.10) | 纯 JS 实现,浏览器内完成 SIP 注册/呼叫 |
| 音视频传输 | WebRTC | 浏览器原生能力,无需插件 |
| 前端界面 | 原生 HTML/CSS/JS | 无框架依赖,即开即用 |
| 后端服务 | Node.js / Express | 静态文件服务 |
| 数据持久化 | localStorage | 通话记录、联系人、配置本地存储 |
| 按键音 | Web Audio API | 不依赖音频文件,实时生成 DTMF 音 |
## 快速开始
```bash
npm install
npm start
# 打开 http://localhost:3000
```
## 使用指南
### 1. 配置 SIP 账号
点击右上角齿轮图标进入设置,填入 SIP 服务器信息:
- **SIP 服务器地址** — PBX 域名或 IP,如 `pbx.example.com`
- **WebSocket URL** — SIP over WebSocket 地址,格式 `wss://pbx.example.com:8089/ws`
- **SIP 分机号/账号** — 如 `1000`
- **密码** — 分机密码
- **STUN 服务器** — 可选,默认使用 Google 公共 STUN
### 2. 连接
保存设置后自动连接。顶部状态栏显示:灰色未连接,黄色闪烁连接中,绿色已注册。
### 3. 拨号
在拨号盘输入号码,点击绿色拨号按钮呼叫。支持键盘输入 (`0-9*#`)、退格删除(长按清空)、回车快速拨号、双击号码保存联系人、通话中 DTMF 按键发送。
### 4. 通话记录 & 联系人
自动保存去电记录(最多 200 条),支持查看和点击回拨。联系人按姓名拼音排序。
## 推荐 SIP 后端方案
### 方案一:FreeSWITCH(推荐,国内生态最好)
FreeSWITCH 是最成熟的开源软交换平台之一,国内有大量案例和社区。
**启用 WebSocket 支持:**
编辑 `conf/sip_profiles/internal.xml`:
```xml
```
WebDial 的 WebSocket URL 填 `wss://你的服务器IP:8089`。
**优点:**
- 性能强悍,单机支持数千并发
- 模块化架构,原生支持 WebRTC
- 国内社区活跃,中文资料丰富
- 支持对接各种 SIP 中继和 GSM 网关
**参考资源:**
- FreeSWITCH 官方文档
- 国内社区:freeswitch.org.cn
### 方案二:Asterisk
Asterisk 通过 `res_pjsip` 模块支持 WebSocket。
**配置要点(pjsip.conf):**
```ini
[transport-websocket]
type=transport
protocol=wss
bind=0.0.0.0:8089
[1000](!)
type=endpoint
transport=transport-websocket
webrtc=yes
auth=auth1000
aors=1000
```
### 方案三:国内轻量方案对比
| 方案 | 说明 | 适合场景 |
|------|------|---------|
| FreeSWITCH + 国内 SIP 中继 | FreeSWITCH 做主控,购买阿里云/腾讯云 SIP 中继 | 企业级,稳定性高 |
| GSM 网关 + Asterisk | 用 SIM 卡网关(鼎信通达)落地,Asterisk 做注册 | 小团队,需要实体线路 |
| 云 PBX 服务 | 购买国内云 PBX(容联云/天润),直接提供 WebRTC SDK | 不想自建,快速上线 |
## PSTN 落地推荐(国内)
SIP 注册后还需将呼叫路由到 PSTN 才能真正打通手机号。
### SIP 中继(企业)
| 服务商 | 特点 | 备注 |
|--------|------|------|
| 阿里云通信 | 按量计费,API 丰富,质量稳定 | 需企业资质 |
| 腾讯云通信 | 覆盖好,与 FreeSWITCH 兼容性好 | 需企业资质 |
| 容联云通讯 | 专注通讯 PaaS,支持 SIP 中继 | 个人/企业均可 |
| 天润融通 | 企业云呼叫中心,功能完善 | 企业为主 |
### GSM 网关(个人/小团队)
购买 GSM VoIP 网关(如鼎信通达 DAG1000-4G/8G),插入 SIM 卡,通过 SIP 协议对接 FreeSWITCH 或 Asterisk。
- 成本:设备约 1000-3000 元 + SIM 卡月租
- 优势:不需要企业资质,音质取决于运营商信号
- 适合:个人开发者、小团队测试
## 常见问题
**Q: 为什么提示"未注册"?**
检查 WebSocket 地址和分机信息,确认 SIP 服务器已启用 WebSocket 支持。
**Q: 需要 TLS 证书吗?**
浏览器要求 `wss://` 使用 TLS。自签名证书需在浏览器中添加安全例外。
**Q: 支持视频通话吗?**
当前仅音频。修改 `app.js` 中 `mediaConstraints` 的 `video: false` 为 `true` 即可启用。
**Q: 能不搭服务器直接用吗?**
不能。浏览器无法直拨 PSTN 电话,必须有 SIP 服务器做信令路由,以及 PSTN 落地网关。
## License
MIT