diff --git a/modules/call/TODO.md b/modules/call/TODO.md new file mode 100644 index 0000000000..464090415c --- /dev/null +++ b/modules/call/TODO.md @@ -0,0 +1 @@ +# TODO diff --git a/modules/call/readme.md b/modules/call/readme.md index a31d25ec15..c50c713400 100644 --- a/modules/call/readme.md +++ b/modules/call/readme.md @@ -1,492 +1 @@ - -# 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,可在拨号计划里这样触发: - - - -3) FreeSWITCH POST(application/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 示例 - - - - - - - - - - - -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 转 1000(XML default) -- 2 转 2000(XML 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. 访问测试页面 - -启动应用后,访问: - -### 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 - - - - - - - - - - -``` - -## 故障排除 - -### 常见问题 - -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> -- 官网: -- GitHub: - -## 贡献 - -欢迎提交 Issue 和 Pull Request。详情请参阅 [CONTRIBUTING.md](../../CONTRIBUTING.md)。 +# Call Center diff --git a/modules/call/readme.zh.md b/modules/call/readme.zh.md index 272f250c8f..e1c7e72366 100644 --- a/modules/call/readme.zh.md +++ b/modules/call/readme.zh.md @@ -1,153 +1 @@ # 微语智能呼叫中心系统 - -## AI驱动的企业级通信解决方案 - -微语智能呼叫中心是一套革命性的AI驱动企业通信平台,致力于重新定义客户服务体验。通过整合最先进的大语言模型技术,我们提供全方位、智能化的客户服务解决方案,帮助企业显著提升服务质量,降低运营成本。 - - - -## 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) diff --git a/modules/conference/readme.md b/modules/conference/readme.md index 025963c96d..758064acf4 100644 --- a/modules/conference/readme.md +++ b/modules/conference/readme.md @@ -1,5 +1 @@ # conference - -- 视频会议 -- 视频客服 -- 视频聊天 diff --git a/modules/conference/readme.zh.md b/modules/conference/readme.zh.md new file mode 100644 index 0000000000..025963c96d --- /dev/null +++ b/modules/conference/readme.zh.md @@ -0,0 +1,5 @@ +# conference + +- 视频会议 +- 视频客服 +- 视频聊天