This commit is contained in:
jack ning
2025-10-21 12:38:23 +08:00
parent b058b36849
commit 44db32b744
5 changed files with 7 additions and 648 deletions

1
modules/call/TODO.md Normal file
View File

@@ -0,0 +1 @@
# TODO

View File

@@ -1,492 +1 @@
<!--
* @Author: jackning 270580156@qq.com
* @Date: 2024-09-11 10:22:00
* @LastEditors: jackning 270580156@qq.com
* @LastEditTime: 2025-06-07 19:49:53
* @Description: bytedesk.com https://github.com/Bytedesk/bytedesk
* Please be aware of the BSL license restrictions before installing Bytedesk IM
* selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license.
* Business Source License 1.1: https://github.com/Bytedesk/bytedesk/blob/main/LICENSE
* contact: 270580156@qq.com
* 联系270580156@qq.com
* Copyright (c) 2024 by bytedesk.com, All Rights Reserved.
-->
# FreeSwitch Integration Module for Bytedesk
基于 Spring Boot 的 FreeSwitch 集成模块支持语音通话、WebRTC、呼叫中心功能和事件监听。
## ⚠️ ESL连接问题修复 (2025-06-08)
如果遇到 `text/rude-rejection``Access Denied` 错误,请查看详细修复指南:
📋 **[FreeSwitch ESL 连接问题修复指南](FREESWITCH_ESL_FIX_GUIDE.md)**
### 快速修复
1. **检查连接状态** - 访问健康检查端点:
```bash
curl http://localhost:9003/actuator/health/freeSwitch
```
2. **测试连接** - 使用管理API
```bash
curl -X POST http://localhost:9003/api/v1/freeswitch/test-connection
```
3. **查看配置** - 获取当前配置:
```bash
curl http://localhost:9003/api/v1/freeswitch/config
```
### 新增功能
- ✅ **智能错误诊断**: 自动识别连接问题并提供解决建议
- ✅ **连接重试机制**: 指数退避重试策略
- ✅ **健康状态监控**: Spring Boot Actuator集成
- ✅ **管理REST API**: 连接测试和状态查询接口
- ✅ **启动时连接测试**: 应用启动时自动检测FreeSwitch连接
## 功能特性
- ✅ **FreeSwitch ESL 集成**: 通过 Event Socket Library 连接和控制 FreeSwitch
- ✅ **呼叫控制**: 呼叫发起、挂断、转接、保持等基本功能
- ✅ **WebRTC 支持**: 基于 Verto 协议的 WebRTC 音视频通话
- ✅ **实时事件监听**: 监听 FreeSwitch 事件并转发到 Spring Boot 应用
- ✅ **呼叫中心功能**: 队列管理、坐席管理、通话录音
- ✅ **REST API**: 完整的 HTTP 接口用于呼叫控制和状态查询
- ✅ **WebSocket 信令**: 支持 WebRTC 信令交换和实时消息推送
- ✅ **mod_xml_curl**: 通过 HTTP 动态返回 Directory 和 Dialplan XML可选开启
## 项目结构
```bash
plugins/freeswitch/
├── pom.xml # Maven 配置文件
├── readme.md # 项目文档
└── src/main/java/com/bytedesk/freeswitch/
├── freeswitch/
│ ├── FreeSwitchService.java # FreeSwitch 核心服务
│ ├── FreeSwitchController.java # REST API 控制器
│ └── WebSocketConfig.java # WebSocket 配置
├── webrtc/
│ └── WebRTCSignalingController.java # WebRTC 信令控制器
├── callcenter/
│ └── CallService.java # 呼叫服务
└── resources/
└── static/
└── webrtc-demo.html # WebRTC 测试页面
```
## 环境要求
- Java 17+
- Spring Boot 3.x
- FreeSwitch 1.10+
- Maven 3.6+
## 快速开始
### 1. 安装 FreeSwitch
```bash
# macOS
brew install freeswitch
# Ubuntu/Debian
apt-get update
apt-get install freeswitch
# CentOS/RHEL
yum install freeswitch
```
### 2. 配置 FreeSwitch
将项目提供的配置文件复制到 FreeSwitch 配置目录:
```bash
# 复制配置文件
cp deploy/private/freeswitch/conf/vars_bytedesk.xml /usr/local/freeswitch/conf/
cp deploy/private/freeswitch/conf/directory/bytedesk.xml /usr/local/freeswitch/conf/directory/
cp deploy/private/freeswitch/conf/autoload_configs/event_socket.conf.xml /usr/local/freeswitch/conf/autoload_configs/
cp deploy/private/freeswitch/conf/autoload_configs/verto_bytedesk.conf.xml /usr/local/freeswitch/conf/autoload_configs/
cp deploy/freeswitch/conf/autoload_configs/xml_curl.conf.xml /usr/local/freeswitch/conf/autoload_configs/
```
### 3. 启动 FreeSwitch
```bash
# 启动 FreeSwitch
freeswitch -nonat
# 或者作为后台服务启动
freeswitch -nc -nonat
```
### 4. 配置 Spring Boot
在 `application-local.properties` 中配置 FreeSwitch 连接参数:
```properties
# FreeSwitch ESL 配置
freeswitch.esl.host=127.0.0.1
freeswitch.esl.port=8021
freeswitch.esl.password=bytedesk123
freeswitch.esl.timeout=10000
# WebRTC 配置
freeswitch.webrtc.ws.url=ws://127.0.0.1:15066
freeswitch.webrtc.wss.url=wss://127.0.0.1:17443
# 呼叫中心配置
freeswitch.callcenter.queue.default=bytedesk_queue
freeswitch.callcenter.recording.enabled=true
# 可选:启用 xml_curl
bytedesk.call.freeswitch.xmlcurl.enabled=true
# 建议设置访问 token
bytedesk.call.freeswitch.xmlcurl.token=change_me
# 允许来源 IP可选
bytedesk.call.freeswitch.xmlcurl.ip-whitelist=127.0.0.1,::1
```
### 5. 启动应用
```bash
cd plugins/freeswitch
mvn spring-boot:run
```
## API 使用示例
## xml_curl 使用指南
应用提供固定端点:/freeswitch/xmlcurl
1) Directory 示例GET
可用于 FreeSWITCH 注册鉴权与用户变量:
GET /freeswitch/xmlcurl?type=directory&domain=default&user=1000
2) Dialplan 示例GET
GET /freeswitch/xmlcurl?type=dialplan&context=default&dest=1000
2.1) 启动 IVR 示例(在 dialplan 中调用 IVR 菜单)
生成的 configuration 支持一个默认菜单 main_menu可在拨号计划里这样触发
<action application="ivr" data="main_menu"/>
3) FreeSWITCH POSTapplication/x-www-form-urlencoded
应用兼容多种别名type/section、dest/destination_number/Caller-Destination-Number、user/User-Name、domain/Realm。
4) curl 本地验证
当开启了 token 时:
curl -H "X-XMLCURL-TOKEN: change_me" "http://127.0.0.1:9003/freeswitch/xmlcurl?type=directory&domain=default&user=1000"
curl -H "X-XMLCURL-TOKEN: change_me" "http://127.0.0.1:9003/freeswitch/xmlcurl?type=dialplan&context=default&dest=1000"
5) FreeSWITCH xml_curl.conf.xml 示例
<configuration name="xml_curl.conf" description="cURL XML Gateway">
<bindings>
<binding name="bytedesk">
<param name="gateway-url" value="http://127.0.0.1:9003/freeswitch/xmlcurl" bindings="dialplan|directory|configuration|phrases"/>
<param name="timeout" value="10"/>
<!-- 若使用 token可加 basic/headers 或者把 token 拼到 url 上;建议通过反向代理统一加头 -->
</binding>
</bindings>
</configuration>
6) IVR 配置获取
当 FreeSWITCH 请求 configuration 时,会带上 key_value/name 参数作为配置名;本服务已兼容:
GET /freeswitch/xmlcurl?type=configuration&key_value=ivr.conf
GET /freeswitch/xmlcurl?type=configuration&conf_name=ivr
返回的 ivr.conf 默认包含一个名为 main_menu 的菜单:
- 1 转 1000XML default
- 2 转 2000XML default
- 0 转 1000人工
- * 退出
6) 常见问题
- 返回 401缺少或错误的 X-XMLCURL-TOKEN请检查配置 bytedesk.call.freeswitch.xmlcurl.token 或在请求中附带 header/参数 token。
- 返回 403请求来源 IP 不在白名单,调整 bytedesk.call.freeswitch.xmlcurl.ip-whitelist。
- FreeSWITCH 仍未调用 HTTP确认模块已加载并启用 xml_curl.conf.xml检查 bindings 与 gateway-url 是否可访问。
### 呼叫控制 API
#### 发起呼叫
```bash
curl -X POST http://localhost:9003/api/freeswitch/originate \
-H "Content-Type: application/json" \
-d '{
"from": "1000",
"to": "1001",
"timeout": 60
}'
```
#### 挂断呼叫
```bash
curl -X POST http://localhost:9003/api/freeswitch/hangup \
-H "Content-Type: application/json" \
-d '{
"uuid": "call-uuid-here"
}'
```
#### 转接呼叫
```bash
curl -X POST http://localhost:9003/api/freeswitch/transfer \
-H "Content-Type: application/json" \
-d '{
"uuid": "call-uuid-here",
"destination": "1002"
}'
```
#### 播放文件
```bash
curl -X POST http://localhost:9003/api/freeswitch/playback \
-H "Content-Type: application/json" \
-d '{
"uuid": "call-uuid-here",
"file": "/usr/local/freeswitch/sounds/en/us/callie/ivr/8000/ivr-welcome.wav"
}'
```
### 呼叫状态查询
#### 获取活跃通话
```bash
curl http://localhost:9003/api/freeswitch/calls/active
```
#### 获取通道状态
```bash
curl http://localhost:9003/api/freeswitch/channels/status
```
## WebRTC 集成
### 1. 访问测试页面
启动应用后,访问:<http://localhost:9003/webrtc-demo.html>
### 2. WebSocket 连接
```javascript
// 连接到 WebSocket
const socket = new SockJS('/ws');
const stompClient = Stomp.over(socket);
stompClient.connect({}, function (frame) {
console.log('Connected: ' + frame);
// 订阅信令消息
stompClient.subscribe('/topic/webrtc/signaling', function (message) {
const data = JSON.parse(message.body);
handleSignalingMessage(data);
});
});
// 发送 WebRTC Offer
function sendOffer(offer) {
stompClient.send("/app/webrtc/offer", {}, JSON.stringify({
type: 'offer',
sdp: offer.sdp,
from: 'user1',
to: 'user2'
}));
}
```
### 3. 呼叫流程
1. **发起呼叫**: 通过 WebSocket 发送 offer
2. **应答呼叫**: 接收方发送 answer
3. **ICE 候选交换**: 交换网络连接信息
4. **建立连接**: WebRTC 点对点连接建立
5. **通话控制**: 静音、挂断等操作
## 事件监听
应用会自动监听 FreeSwitch 事件并通过 WebSocket 推送:
```javascript
// 订阅呼叫事件
stompClient.subscribe('/topic/call/events', function (message) {
const event = JSON.parse(message.body);
console.log('Call event:', event);
switch(event.type) {
case 'CHANNEL_CREATE':
console.log('New call created:', event.uuid);
break;
case 'CHANNEL_ANSWER':
console.log('Call answered:', event.uuid);
break;
case 'CHANNEL_HANGUP':
console.log('Call ended:', event.uuid);
break;
}
});
```
## 呼叫中心功能
### 队列管理
```bash
# 创建队列
curl -X POST http://localhost:9003/api/callcenter/queue \
-H "Content-Type: application/json" \
-d '{
"name": "support_queue",
"strategy": "longest-idle-agent",
"timeout": 300
}'
# 加入队列
curl -X POST http://localhost:9003/api/callcenter/queue/support_queue/join \
-H "Content-Type: application/json" \
-d '{
"caller": "1000"
}'
```
### 坐席管理
```bash
# 坐席登录
curl -X POST http://localhost:9003/api/callcenter/agent/login \
-H "Content-Type: application/json" \
-d '{
"agentId": "agent001",
"queue": "support_queue",
"extension": "1001"
}'
# 坐席状态设置
curl -X POST http://localhost:9003/api/callcenter/agent/agent001/status \
-H "Content-Type: application/json" \
-d '{
"status": "Available"
}'
```
## 配置说明
### FreeSwitch 配置文件
- **vars_bytedesk.xml**: 全局变量配置
- **bytedesk.xml**: 用户目录配置
- **event_socket.conf.xml**: ESL 服务配置
- **verto_bytedesk.conf.xml**: WebRTC Verto 配置
### 关键配置参数
```xml
<!-- ESL 密码 -->
<param name="password" value="bytedesk123"/>
<!-- WebRTC 端口 -->
<param name="ws-binding" value=":15066"/>
<param name="wss-binding" value=":17443"/>
<!-- SIP 端口 -->
<param name="sip-port" value="15060"/>
<param name="rtp-port" value="16000-16129"/>
```
## 故障排除
### 常见问题
1. **无法连接 FreeSwitch ESL**
- 检查 FreeSwitch 是否启动
- 验证 ESL 密码和端口配置
- 确认防火墙设置
2. **WebRTC 连接失败**
- 检查 Verto 配置是否正确
- 验证 WebSocket 端口是否开放
- 确认 STUN/TURN 服务器配置
3. **音频质量问题**
- 检查编解码器配置
- 验证网络带宽和延迟
- 调整 RTP 端口范围
### 日志查看
```bash
# FreeSwitch 日志
tail -f /usr/local/freeswitch/log/freeswitch.log
# Spring Boot 日志
tail -f logs/bytedeskim.log
```
## 开发指南
### 添加新的呼叫功能
1. 在 `FreeSwitchService` 中添加新方法
2. 在 `FreeSwitchController` 中暴露 REST API
3. 更新事件监听逻辑(如需要)
4. 添加相应的测试用例
### 自定义事件处理
```java
@Component
public class CustomEventHandler {
@EventListener
public void handleChannelCreate(ChannelCreateEvent event) {
// 处理通道创建事件
log.info("Channel created: {}", event.getUuid());
}
@EventListener
public void handleChannelAnswer(ChannelAnswerEvent event) {
// 处理通话接听事件
log.info("Channel answered: {}", event.getUuid());
}
}
```
## 许可证
本项目采用 Business Source License 1.1 许可证。详情请参阅 [LICENSE](../../LICENSE) 文件。
## 支持
- 邮箱: <270580156@qq.com>
- 官网: <https://bytedesk.com>
- GitHub: <https://github.com/Bytedesk/bytedesk>
## 贡献
欢迎提交 Issue 和 Pull Request。详情请参阅 [CONTRIBUTING.md](../../CONTRIBUTING.md)。
# Call Center

View File

@@ -1,153 +1 @@
# 微语智能呼叫中心系统
## AI驱动的企业级通信解决方案
微语智能呼叫中心是一套革命性的AI驱动企业通信平台致力于重新定义客户服务体验。通过整合最先进的大语言模型技术我们提供全方位、智能化的客户服务解决方案帮助企业显著提升服务质量降低运营成本。
<!-- > 注本系统使用FreeSwitch作为通信基础组件。如需了解部署细节请参阅[FreeSwitch 部署步骤](/deploy/depend/freeswitch.md) -->
## AI 驱动的智能服务核心优势
微语智能呼叫中心将大语言模型深度融入客户服务流程,带来前所未有的智能化体验:
### 🤖 智能语音助手
基于大语言模型的智能语音助手,为企业带来革命性的服务能力提升:
- **自然语言理解**:系统能理解复杂的自然语言表达,不再局限于简单的关键词匹配
- **多轮对话能力**:支持像人类一样的连贯对话,记住上下文,提供流畅的交互体验
- **7×24小时不间断服务**:全天候自动处理客户咨询,不受时间和人力限制
- **自动处理常见咨询**能够自动处理80%的常见咨询,极大减轻人工座席负担
### 📊 智能数据分析
AI驱动的数据分析系统将海量的服务数据转化为有价值的业务洞察
- **实时情感分析**:自动识别客户情绪变化,及时调整服务策略
- **智能质检评分**:全自动化的通话质检系统,提供客观公正的服务评估
- **预测性分析**:提前预测潜在问题和商机,主动干预优化
### 🎯 智能路由分配
基于AI的智能路由系统大幅提升服务效率和客户满意度
- **智能技能匹配**:根据问题类型和座席专长自动分配,确保问题由最合适的人处理
- **负载均衡**:智能平衡座席工作量,避免出现部分座席过载而其他闲置的情况
- **实时优化**:系统不断学习和优化分配策略,持续提升匹配精准度
## 企业级呼叫中心全功能支持
微语智能呼叫中心提供全面的企业级功能支持,满足各行业客户多样化需求:
### 全渠道通信
支持多种通信协议和渠道,实现无缝客户沟通:
- **语音通话**:高清晰度的语音通话,支持固话、手机和网络语音
- **视频通话**:面对面沟通体验,增强服务亲和力和专业感
- **即时消息**:多平台即时消息集成,实现全渠道统一管理
### 智能质检
AI驱动的智能质检系统全面革新服务质量管理
- **自动语音转写**:将通话内容自动转为文本,便于分析和存档
- **关键词识别**:自动识别重点内容、敏感词和服务亮点
- **服务质量评分**:客观量化的服务评分系统,帮助持续改进
### 智能IVR
基于AI的新一代智能语音导航系统
- **语音识别**:准确识别客户语音指令,无需按键操作
- **意图理解**:智能理解客户真实需求,不再局限于预设菜单
- **动态菜单**:根据客户历史和当前情况,提供个性化的服务选项
### 智能报表
数据驱动决策的强大分析平台:
- **实时监控**:实时展示关键业务指标,及时发现和处理异常
- **预测分析**:基于历史数据预测未来趋势,帮助提前规划
- **自定义报表**:灵活定制各类业务报表,满足不同管理需求
## 为什么选择微语智能呼叫中心?
### 💰 显著降低成本
- AI自动化处理80%常见咨询可减少50%以上的人力成本
- 智能质检减少90%的人工质检工作量
- 统一平台减少40%的系统维护和集成成本
### ⚡ 大幅提升效率
- 智能路由和AI助手提升服务效率达300%
- 减少40%的平均处理时间
- 首次解决率提升35%,大幅减少重复咨询
### 📈 有效增加收入
- 智能营销和交叉销售建议提升转化率30%
- 提高客户留存率25%,增加复购机会
- 数据洞察发掘新的业务增长点
### 😊 全面提升满意度
- 个性化服务体验提升客户满意度至95%
- 减少60%的等待时间,显著改善客户体验
- 多渠道一致性服务增强品牌形象
## 技术优势
微语智能呼叫中心基于企业级技术架构,确保系统安全稳定:
### 🔒 安全可靠
- 企业级安全架构,数据全程加密
- 多重备份机制,确保数据安全
- 符合国家和行业安全标准
### 📱 灵活部署
- 支持公有云、私有云、混合云多种部署方式
- 模块化设计,可按需配置和扩展
- 支持与现有系统无缝集成
### 🔄 高可用性
- 分布式架构设计,支持水平扩展
- 自动负载均衡和故障转移
- 确保系统7×24小时稳定运行
## 成功案例
### 某大型电商平台
通过部署微语智能呼叫中心,该电商平台实现了:
- 客服效率提升300%同等规模团队处理量增长3倍
- 客户满意度提升40%,达到行业领先水平
- 智能推荐带来的额外销售增长22%
### 某金融机构
AI驱动的智能服务系统为这家金融机构带来显著成效
- 客户服务成本降低50%,每年节省数千万运营费用
- 业务转化率提升35%,直接带动收入增长
- 合规风险降低80%,有效防范违规问题
### 某教育机构
智能呼叫中心为该教育机构的招生和服务流程带来革命性变化:
- 招生咨询效率提升200%,无需增加人力即应对业务增长
- 客户转化率提升45%,显著提高招生效果
- 学生满意度提升50%,增强品牌口碑
## 开启智能客服新时代
立即体验微语智能呼叫中心让AI为您的企业创造实质性价值
- [免费试用](https://www.bytedesk.com/contact)
- [预约产品演示](https://www.bytedesk.com/contact)

View File

@@ -1,5 +1 @@
# conference
- 视频会议
- 视频客服
- 视频聊天

View File

@@ -0,0 +1,5 @@
# conference
- 视频会议
- 视频客服
- 视频聊天