# 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