mirror of
https://gitee.com/270580156/weiyu.git
synced 2026-05-14 11:18:02 +00:00
update plugins/freeswitch: add 2 mod 9 del 1 files
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
* @Author: jackning 270580156@qq.com
|
||||
* @Date: 2025-06-03 14:30:25
|
||||
* @LastEditors: jackning 270580156@qq.com
|
||||
* @LastEditTime: 2025-06-03 09:28:50
|
||||
* @LastEditTime: 2025-06-03 10:07:00
|
||||
* @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.
|
||||
@@ -26,9 +26,6 @@ import com.bytedesk.freeswitch.service.CallStatisticsService;
|
||||
@Controller
|
||||
@RequestMapping("/callcenter")
|
||||
public class CallCenterController {
|
||||
|
||||
// @Autowired
|
||||
// private CallService callService;
|
||||
|
||||
@Autowired
|
||||
private CallStatisticsService callStatisticsService;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.bytedesk.freeswitch.controller;
|
||||
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
@@ -9,23 +10,21 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import com.bytedesk.freeswitch.service.CallService;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 呼叫控制器
|
||||
*/
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequestMapping("/api/v1/call")
|
||||
@RequiredArgsConstructor
|
||||
@ConditionalOnProperty(name = "bytedesk.freeswitch.enabled", havingValue = "true", matchIfMissing = false)
|
||||
public class CallController {
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(CallController.class);
|
||||
|
||||
private final CallService callService;
|
||||
|
||||
/**
|
||||
|
||||
@@ -4,7 +4,7 @@ import org.freeswitch.esl.client.IEslEventListener;
|
||||
import org.freeswitch.esl.client.transport.event.EslEvent;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import com.bytedesk.freeswitch.service.CallService;
|
||||
import com.bytedesk.freeswitch.service.ICallService;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -17,7 +17,7 @@ import lombok.extern.slf4j.Slf4j;
|
||||
@RequiredArgsConstructor
|
||||
public class FreeSwitchEventListener implements IEslEventListener {
|
||||
|
||||
private final CallService callService;
|
||||
private final ICallService callService;
|
||||
|
||||
/**
|
||||
* 处理FreeSwitch事件
|
||||
|
||||
@@ -9,7 +9,6 @@ import org.freeswitch.esl.client.transport.SendMsg;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import com.bytedesk.freeswitch.config.FreeSwitchProperties;
|
||||
import com.bytedesk.freeswitch.model.CallInfo;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
@@ -22,7 +21,7 @@ import lombok.extern.slf4j.Slf4j;
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
@ConditionalOnProperty(name = "bytedesk.freeswitch.enabled", havingValue = "true", matchIfMissing = false)
|
||||
public class CallService {
|
||||
public class CallService implements ICallService {
|
||||
|
||||
private final Client eslClient;
|
||||
// private final FreeSwitchProperties freeSwitchProperties;
|
||||
|
||||
@@ -13,19 +13,42 @@
|
||||
*/
|
||||
package com.bytedesk.freeswitch.service;
|
||||
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import com.bytedesk.freeswitch.model.CallStatistics;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
/**
|
||||
* 呼叫统计服务接口
|
||||
*/
|
||||
public interface CallStatisticsService {
|
||||
@Slf4j
|
||||
@Service
|
||||
public class CallStatisticsService {
|
||||
|
||||
/**
|
||||
* 获取当前呼叫统计数据
|
||||
*
|
||||
* @return 呼叫统计数据
|
||||
*/
|
||||
CallStatistics getCallStatistics();
|
||||
public CallStatistics getCallStatistics() {
|
||||
// 这里应当从数据库中获取真实数据
|
||||
// 当前为示例数据
|
||||
log.info("获取当前呼叫统计数据");
|
||||
|
||||
CallStatistics stats = new CallStatistics();
|
||||
stats.setTodayCallCount(125);
|
||||
stats.setAverageCallDuration(3.7);
|
||||
stats.setOnlineAgentsCount(12);
|
||||
stats.setActiveCallsCount(8);
|
||||
stats.setInboundCallsCount(85);
|
||||
stats.setOutboundCallsCount(40);
|
||||
stats.setAnsweredCallsCount(110);
|
||||
stats.setMissedCallsCount(15);
|
||||
stats.setAnswerRate(88.0);
|
||||
|
||||
return stats;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据时间周期获取呼叫统计数据
|
||||
@@ -33,5 +56,49 @@ public interface CallStatisticsService {
|
||||
* @param period 时间周期(today, week, month, year)
|
||||
* @return 呼叫统计数据
|
||||
*/
|
||||
CallStatistics getCallStatisticsByPeriod(String period);
|
||||
public CallStatistics getCallStatisticsByPeriod(String period) {
|
||||
log.info("获取{}周期的呼叫统计数据", period);
|
||||
|
||||
CallStatistics stats = new CallStatistics();
|
||||
|
||||
// 根据不同时间周期返回相应的统计数据
|
||||
if ("today".equals(period)) {
|
||||
return getCallStatistics();
|
||||
} else if ("week".equals(period)) {
|
||||
stats.setTodayCallCount(820);
|
||||
stats.setAverageCallDuration(4.2);
|
||||
stats.setOnlineAgentsCount(14);
|
||||
stats.setActiveCallsCount(8);
|
||||
stats.setInboundCallsCount(550);
|
||||
stats.setOutboundCallsCount(270);
|
||||
stats.setAnsweredCallsCount(720);
|
||||
stats.setMissedCallsCount(100);
|
||||
stats.setAnswerRate(87.8);
|
||||
} else if ("month".equals(period)) {
|
||||
stats.setTodayCallCount(3240);
|
||||
stats.setAverageCallDuration(3.9);
|
||||
stats.setOnlineAgentsCount(15);
|
||||
stats.setActiveCallsCount(8);
|
||||
stats.setInboundCallsCount(2180);
|
||||
stats.setOutboundCallsCount(1060);
|
||||
stats.setAnsweredCallsCount(2950);
|
||||
stats.setMissedCallsCount(290);
|
||||
stats.setAnswerRate(91.0);
|
||||
} else if ("year".equals(period)) {
|
||||
stats.setTodayCallCount(36500);
|
||||
stats.setAverageCallDuration(4.0);
|
||||
stats.setOnlineAgentsCount(15);
|
||||
stats.setActiveCallsCount(8);
|
||||
stats.setInboundCallsCount(24500);
|
||||
stats.setOutboundCallsCount(12000);
|
||||
stats.setAnsweredCallsCount(33200);
|
||||
stats.setMissedCallsCount(3300);
|
||||
stats.setAnswerRate(90.7);
|
||||
} else {
|
||||
// 默认返回当天数据
|
||||
return getCallStatistics();
|
||||
}
|
||||
|
||||
return stats;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,85 @@
|
||||
/*
|
||||
* @Author: GitHub Copilot
|
||||
* @Date: 2025-06-03
|
||||
* @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
|
||||
*
|
||||
* Copyright (c) 2025 by bytedesk.com, All Rights Reserved.
|
||||
*/
|
||||
package com.bytedesk.freeswitch.service;
|
||||
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
/**
|
||||
* 默认呼叫服务实现,当FreeSwitch未启用时使用
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
@ConditionalOnProperty(name = "bytedesk.freeswitch.enabled", havingValue = "false", matchIfMissing = true)
|
||||
public class DefaultCallService implements ICallService {
|
||||
|
||||
public DefaultCallService() {
|
||||
log.info("创建默认呼叫服务(FreeSwitch未启用)");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String makeCall(String fromUser, String toUser) {
|
||||
log.warn("FreeSwitch未启用,无法发起呼叫");
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean answerCall(String callId) {
|
||||
log.warn("FreeSwitch未启用,无法应答呼叫");
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean rejectCall(String callId) {
|
||||
log.warn("FreeSwitch未启用,无法拒绝呼叫");
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean endCall(String callId) {
|
||||
log.warn("FreeSwitch未启用,无法结束呼叫");
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean sendDtmf(String callId, String digit) {
|
||||
log.warn("FreeSwitch未启用,无法发送DTMF");
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean toggleMute(String callId, boolean mute) {
|
||||
log.warn("FreeSwitch未启用,无法{}静音", mute ? "开启" : "关闭");
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleCallStart(String callerId, String destination, String uuid) {
|
||||
// 无操作
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleCallAnswered(String uuid) {
|
||||
// 无操作
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleCallEnd(String uuid, String hangupCause) {
|
||||
// 无操作
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleDtmf(String uuid, String digit) {
|
||||
// 无操作
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,100 @@
|
||||
/*
|
||||
* @Author: GitHub Copilot
|
||||
* @Date: 2025-06-03
|
||||
* @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
|
||||
*
|
||||
* Copyright (c) 2025 by bytedesk.com, All Rights Reserved.
|
||||
*/
|
||||
package com.bytedesk.freeswitch.service;
|
||||
|
||||
/**
|
||||
* 呼叫服务接口
|
||||
*/
|
||||
public interface ICallService {
|
||||
|
||||
/**
|
||||
* 发起呼叫
|
||||
*
|
||||
* @param fromUser 主叫用户ID
|
||||
* @param toUser 被叫用户ID
|
||||
* @return 呼叫ID
|
||||
*/
|
||||
String makeCall(String fromUser, String toUser);
|
||||
|
||||
/**
|
||||
* 应答呼叫
|
||||
*
|
||||
* @param callId 呼叫ID
|
||||
* @return 是否成功
|
||||
*/
|
||||
boolean answerCall(String callId);
|
||||
|
||||
/**
|
||||
* 拒绝呼叫
|
||||
*
|
||||
* @param callId 呼叫ID
|
||||
* @return 是否成功
|
||||
*/
|
||||
boolean rejectCall(String callId);
|
||||
|
||||
/**
|
||||
* 结束呼叫
|
||||
*
|
||||
* @param callId 呼叫ID
|
||||
* @return 是否成功
|
||||
*/
|
||||
boolean endCall(String callId);
|
||||
|
||||
/**
|
||||
* 发送DTMF按键
|
||||
*
|
||||
* @param callId 呼叫ID
|
||||
* @param digit 按键值
|
||||
* @return 是否成功
|
||||
*/
|
||||
boolean sendDtmf(String callId, String digit);
|
||||
|
||||
/**
|
||||
* 静音/取消静音
|
||||
*
|
||||
* @param callId 呼叫ID
|
||||
* @param mute 是否静音
|
||||
* @return 是否成功
|
||||
*/
|
||||
boolean toggleMute(String callId, boolean mute);
|
||||
|
||||
/**
|
||||
* 处理呼叫开始
|
||||
*
|
||||
* @param callerId 主叫号码
|
||||
* @param destination 被叫号码
|
||||
* @param uuid 呼叫UUID
|
||||
*/
|
||||
void handleCallStart(String callerId, String destination, String uuid);
|
||||
|
||||
/**
|
||||
* 处理呼叫应答
|
||||
*
|
||||
* @param uuid 呼叫UUID
|
||||
*/
|
||||
void handleCallAnswered(String uuid);
|
||||
|
||||
/**
|
||||
* 处理呼叫结束
|
||||
*
|
||||
* @param uuid 呼叫UUID
|
||||
* @param hangupCause 挂断原因
|
||||
*/
|
||||
void handleCallEnd(String uuid, String hangupCause);
|
||||
|
||||
/**
|
||||
* 处理DTMF按键
|
||||
*
|
||||
* @param uuid 呼叫UUID
|
||||
* @param digit 按键值
|
||||
*/
|
||||
void handleDtmf(String uuid, String digit);
|
||||
}
|
||||
@@ -1,97 +0,0 @@
|
||||
/*
|
||||
* @Author: jackning 270580156@qq.com
|
||||
* @Date: 2025-06-03 15:18:15
|
||||
* @LastEditors: jackning 270580156@qq.com
|
||||
* @LastEditTime: 2025-06-03 09:29:18
|
||||
* @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) 2025 by bytedesk.com, All Rights Reserved.
|
||||
*/
|
||||
package com.bytedesk.freeswitch.service.impl;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import com.bytedesk.freeswitch.model.CallStatistics;
|
||||
import com.bytedesk.freeswitch.service.CallStatisticsService;
|
||||
|
||||
/**
|
||||
* 呼叫统计服务实现类
|
||||
*/
|
||||
@Service
|
||||
public class CallStatisticsServiceImpl implements CallStatisticsService {
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(CallStatisticsServiceImpl.class);
|
||||
|
||||
@Override
|
||||
public CallStatistics getCallStatistics() {
|
||||
// 这里应当从数据库中获取真实数据
|
||||
// 当前为示例数据
|
||||
log.info("获取当前呼叫统计数据");
|
||||
|
||||
CallStatistics stats = new CallStatistics();
|
||||
stats.setTodayCallCount(125);
|
||||
stats.setAverageCallDuration(3.7);
|
||||
stats.setOnlineAgentsCount(12);
|
||||
stats.setActiveCallsCount(8);
|
||||
stats.setInboundCallsCount(85);
|
||||
stats.setOutboundCallsCount(40);
|
||||
stats.setAnsweredCallsCount(110);
|
||||
stats.setMissedCallsCount(15);
|
||||
stats.setAnswerRate(88.0);
|
||||
|
||||
return stats;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CallStatistics getCallStatisticsByPeriod(String period) {
|
||||
log.info("获取{}周期的呼叫统计数据", period);
|
||||
|
||||
CallStatistics stats = new CallStatistics();
|
||||
|
||||
// 根据不同时间周期返回相应的统计数据
|
||||
if ("today".equals(period)) {
|
||||
return getCallStatistics();
|
||||
} else if ("week".equals(period)) {
|
||||
stats.setTodayCallCount(820);
|
||||
stats.setAverageCallDuration(4.2);
|
||||
stats.setOnlineAgentsCount(14);
|
||||
stats.setActiveCallsCount(8);
|
||||
stats.setInboundCallsCount(550);
|
||||
stats.setOutboundCallsCount(270);
|
||||
stats.setAnsweredCallsCount(720);
|
||||
stats.setMissedCallsCount(100);
|
||||
stats.setAnswerRate(87.8);
|
||||
} else if ("month".equals(period)) {
|
||||
stats.setTodayCallCount(3240);
|
||||
stats.setAverageCallDuration(3.9);
|
||||
stats.setOnlineAgentsCount(15);
|
||||
stats.setActiveCallsCount(8);
|
||||
stats.setInboundCallsCount(2180);
|
||||
stats.setOutboundCallsCount(1060);
|
||||
stats.setAnsweredCallsCount(2950);
|
||||
stats.setMissedCallsCount(290);
|
||||
stats.setAnswerRate(91.0);
|
||||
} else if ("year".equals(period)) {
|
||||
stats.setTodayCallCount(36500);
|
||||
stats.setAverageCallDuration(4.0);
|
||||
stats.setOnlineAgentsCount(15);
|
||||
stats.setActiveCallsCount(8);
|
||||
stats.setInboundCallsCount(24500);
|
||||
stats.setOutboundCallsCount(12000);
|
||||
stats.setAnsweredCallsCount(33200);
|
||||
stats.setMissedCallsCount(3300);
|
||||
stats.setAnswerRate(90.7);
|
||||
} else {
|
||||
// 默认返回当天数据
|
||||
return getCallStatistics();
|
||||
}
|
||||
|
||||
return stats;
|
||||
}
|
||||
}
|
||||
@@ -1 +1,13 @@
|
||||
spring.application.name=baidu
|
||||
spring.application.name=freeswitch
|
||||
|
||||
# FreeSwitch配置
|
||||
bytedesk.freeswitch.enabled=false
|
||||
bytedesk.freeswitch.server=127.0.0.1
|
||||
bytedesk.freeswitch.eslPort=8021
|
||||
bytedesk.freeswitch.eslPassword=bytedesk123
|
||||
bytedesk.freeswitch.sipPort=15060
|
||||
bytedesk.freeswitch.webrtcPort=17443
|
||||
bytedesk.freeswitch.wsPort=15066
|
||||
bytedesk.freeswitch.callTimeout=60
|
||||
bytedesk.freeswitch.rtpPortStart=16000
|
||||
bytedesk.freeswitch.rtpPortEnd=16129
|
||||
|
||||
@@ -1,223 +1,232 @@
|
||||
<#import "layout/base.ftl" as base>
|
||||
|
||||
<@base.base title="ByteDesk 呼叫中心 - 企业级通信解决方案">
|
||||
<@base.base title="ByteDesk 智能呼叫中心 - AI驱动的企业级通信解决方案">
|
||||
<!-- 顶部介绍区域 -->
|
||||
<div class="row text-center mb-5">
|
||||
<div class="col">
|
||||
<h1 class="display-4 mb-3">ByteDesk FreeSWITCH 呼叫中心</h1>
|
||||
<p class="lead">企业级开源通信平台,打造无缝客户沟通体验</p>
|
||||
<h1 class="display-4 mb-3">ByteDesk 智能呼叫中心</h1>
|
||||
<p class="lead">AI驱动的企业级通信平台,重新定义客户服务体验</p>
|
||||
<div class="mt-4">
|
||||
<a href="/contact" class="btn btn-primary btn-lg me-3">免费试用</a>
|
||||
<a href="/demo" class="btn btn-outline-primary btn-lg">在线演示</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 顶部统计信息 -->
|
||||
<div class="row mb-4">
|
||||
<div class="col-md-3">
|
||||
<div class="card text-center feature-box h-100">
|
||||
<div class="card-body">
|
||||
<div class="feature-icon">📞</div>
|
||||
<h5 class="card-title">今日呼叫</h5>
|
||||
<p class="card-text display-6">${statistics.todayCallCount!'0'}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<div class="card text-center feature-box h-100">
|
||||
<div class="card-body">
|
||||
<div class="feature-icon">⏱️</div>
|
||||
<h5 class="card-title">平均通话时长</h5>
|
||||
<p class="card-text display-6">${statistics.averageCallDuration!'0'}分钟</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<div class="card text-center feature-box h-100">
|
||||
<div class="card-body">
|
||||
<div class="feature-icon">👥</div>
|
||||
<h5 class="card-title">在线座席</h5>
|
||||
<p class="card-text display-6">${statistics.onlineAgentsCount!'0'}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<div class="card text-center feature-box h-100">
|
||||
<div class="card-body">
|
||||
<div class="feature-icon">🔄</div>
|
||||
<h5 class="card-title">实时呼叫</h5>
|
||||
<p class="card-text display-6">${statistics.activeCallsCount!'0'}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 主要功能介绍 -->
|
||||
<div class="row g-4 mb-5">
|
||||
<div class="col-md-4">
|
||||
<div class="feature-box h-100">
|
||||
<div class="feature-icon">🔌</div>
|
||||
<h3>基于FreeSWITCH</h3>
|
||||
<p>FreeSWITCH是一个开源通信平台,支持VoIP、WebRTC和传统电话网络,提供强大的通信能力。</p>
|
||||
<ul class="list-unstyled">
|
||||
<li><i class="bi bi-check-circle"></i> 高性能架构</li>
|
||||
<li><i class="bi bi-check-circle"></i> 多协议支持</li>
|
||||
<li><i class="bi bi-check-circle"></i> 开源灵活</li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- AI 核心优势 -->
|
||||
<div class="row mb-5">
|
||||
<div class="col-12 text-center mb-4">
|
||||
<h2>AI 驱动的智能服务</h2>
|
||||
<p class="lead text-muted">结合大语言模型,打造智能化客户服务体验</p>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<div class="feature-box h-100">
|
||||
<div class="feature-icon">🔀</div>
|
||||
<h3>智能呼叫路由</h3>
|
||||
<p>根据客户需求和座席技能自动分配呼叫,提高服务质量和效率。</p>
|
||||
<div class="feature-icon">🤖</div>
|
||||
<h3>智能语音助手</h3>
|
||||
<p>基于大语言模型的智能语音助手,7x24小时不间断服务,自动处理80%的常见咨询,显著降低人工成本。</p>
|
||||
<ul class="list-unstyled">
|
||||
<li><i class="bi bi-check-circle"></i> 基于技能的路由</li>
|
||||
<li><i class="bi bi-check-circle"></i> 优先级队列</li>
|
||||
<li><i class="bi bi-check-circle"></i> 智能座席调度</li>
|
||||
<li><i class="bi bi-check-circle"></i> 自然语言理解</li>
|
||||
<li><i class="bi bi-check-circle"></i> 多轮对话能力</li>
|
||||
<li><i class="bi bi-check-circle"></i> 个性化服务体验</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<div class="feature-box h-100">
|
||||
<div class="feature-icon">📊</div>
|
||||
<h3>全面数据分析</h3>
|
||||
<p>通过详细的呼叫统计和报表,帮助企业优化客户服务流程。</p>
|
||||
<h3>智能数据分析</h3>
|
||||
<p>AI驱动的数据分析系统,自动识别客户意图,生成服务洞察,助力企业优化服务流程。</p>
|
||||
<ul class="list-unstyled">
|
||||
<li><i class="bi bi-check-circle"></i> 实时监控面板</li>
|
||||
<li><i class="bi bi-check-circle"></i> 自定义报表</li>
|
||||
<li><i class="bi bi-check-circle"></i> 性能指标追踪</li>
|
||||
<li><i class="bi bi-check-circle"></i> 实时情感分析</li>
|
||||
<li><i class="bi bi-check-circle"></i> 智能质检评分</li>
|
||||
<li><i class="bi bi-check-circle"></i> 预测性分析</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<div class="feature-box h-100">
|
||||
<div class="feature-icon">🎯</div>
|
||||
<h3>智能路由分配</h3>
|
||||
<p>基于AI的智能路由系统,根据客户画像和座席技能自动匹配,提升服务效率和客户满意度。</p>
|
||||
<ul class="list-unstyled">
|
||||
<li><i class="bi bi-check-circle"></i> 智能技能匹配</li>
|
||||
<li><i class="bi bi-check-circle"></i> 负载均衡</li>
|
||||
<li><i class="bi bi-check-circle"></i> 实时优化</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 更多功能展示 -->
|
||||
<!-- 核心功能展示 -->
|
||||
<div class="row mb-5">
|
||||
<div class="col-12">
|
||||
<h2 class="text-center mb-4">强大的呼叫中心功能</h2>
|
||||
<div class="col-12 text-center mb-4">
|
||||
<h2>企业级呼叫中心功能</h2>
|
||||
<p class="lead text-muted">全面的功能支持,满足企业多样化需求</p>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="card mb-3">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title"><i class="bi bi-telephone"></i> 多渠道通信</h5>
|
||||
<p class="card-text">支持SIP、WebRTC、PSTN等多种通信协议,实现全渠道客户沟通。</p>
|
||||
<h5 class="card-title"><i class="bi bi-telephone"></i> 全渠道通信</h5>
|
||||
<p class="card-text">支持SIP、WebRTC、PSTN等多种通信协议,实现全渠道客户沟通,确保服务无死角。</p>
|
||||
<ul class="list-unstyled">
|
||||
<li><i class="bi bi-check2"></i> 语音通话</li>
|
||||
<li><i class="bi bi-check2"></i> 视频通话</li>
|
||||
<li><i class="bi bi-check2"></i> 即时消息</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="card mb-3">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title"><i class="bi bi-record-circle"></i> 通话录音</h5>
|
||||
<p class="card-text">自动录制所有通话,支持质量控制和培训需求。</p>
|
||||
<h5 class="card-title"><i class="bi bi-record-circle"></i> 智能质检</h5>
|
||||
<p class="card-text">AI驱动的智能质检系统,自动分析通话内容,提供质量评估和改进建议。</p>
|
||||
<ul class="list-unstyled">
|
||||
<li><i class="bi bi-check2"></i> 自动语音转写</li>
|
||||
<li><i class="bi bi-check2"></i> 关键词识别</li>
|
||||
<li><i class="bi bi-check2"></i> 服务质量评分</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="card mb-3">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title"><i class="bi bi-volume-up"></i> IVR语音菜单</h5>
|
||||
<p class="card-text">通过可视化界面轻松构建交互式语音应答系统。</p>
|
||||
<h5 class="card-title"><i class="bi bi-volume-up"></i> 智能IVR</h5>
|
||||
<p class="card-text">基于AI的智能语音导航系统,提供自然流畅的语音交互体验。</p>
|
||||
<ul class="list-unstyled">
|
||||
<li><i class="bi bi-check2"></i> 语音识别</li>
|
||||
<li><i class="bi bi-check2"></i> 意图理解</li>
|
||||
<li><i class="bi bi-check2"></i> 动态菜单</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="card mb-3">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title"><i class="bi bi-person-lines-fill"></i> CRM集成</h5>
|
||||
<p class="card-text">与客户关系管理系统无缝集成,提供完整的客户服务视图。</p>
|
||||
<h5 class="card-title"><i class="bi bi-graph-up"></i> 智能报表</h5>
|
||||
<p class="card-text">AI驱动的数据分析平台,提供深度业务洞察,助力决策优化。</p>
|
||||
<ul class="list-unstyled">
|
||||
<li><i class="bi bi-check2"></i> 实时监控</li>
|
||||
<li><i class="bi bi-check2"></i> 预测分析</li>
|
||||
<li><i class="bi bi-check2"></i> 自定义报表</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 技术架构介绍 -->
|
||||
<!-- 客户价值 -->
|
||||
<div class="row mb-5">
|
||||
<div class="col-12">
|
||||
<h2 class="text-center mb-4">技术架构</h2>
|
||||
<div class="text-center mb-4">
|
||||
<img src="/images/callcenter/architecture.png" alt="ByteDesk呼叫中心架构" class="img-fluid rounded shadow" style="max-width: 80%;">
|
||||
<div class="col-12 text-center mb-4">
|
||||
<h2>为什么选择 ByteDesk 智能呼叫中心?</h2>
|
||||
<p class="lead text-muted">为企业创造实实在在的价值</p>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<div class="text-center">
|
||||
<div class="feature-icon">💰</div>
|
||||
<h4>降低成本</h4>
|
||||
<p>AI自动化处理80%常见咨询,显著降低人工成本</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<div class="text-center">
|
||||
<div class="feature-icon">⚡</div>
|
||||
<h4>提升效率</h4>
|
||||
<p>智能路由和AI助手提升服务效率达300%</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<div class="text-center">
|
||||
<div class="feature-icon">📈</div>
|
||||
<h4>增加收入</h4>
|
||||
<p>智能营销和交叉销售提升转化率30%</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<div class="text-center">
|
||||
<div class="feature-icon">😊</div>
|
||||
<h4>提升满意度</h4>
|
||||
<p>个性化服务提升客户满意度至95%</p>
|
||||
</div>
|
||||
<p class="text-center">ByteDesk呼叫中心基于FreeSWITCH构建,采用微服务架构,具有高可用性和可扩展性。</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 呼叫统计图表 -->
|
||||
<!-- 技术优势 -->
|
||||
<div class="row mb-5">
|
||||
<div class="col-12">
|
||||
<h2 class="text-center mb-4">呼叫统计</h2>
|
||||
<div class="col-12 text-center mb-4">
|
||||
<h2>技术优势</h2>
|
||||
<p class="lead text-muted">企业级技术架构,确保系统稳定可靠</p>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-4">
|
||||
<div class="feature-box h-100">
|
||||
<div class="feature-icon">🔒</div>
|
||||
<h3>安全可靠</h3>
|
||||
<p>企业级安全架构,数据加密传输,多重备份机制,确保系统安全可靠。</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<div class="feature-box h-100">
|
||||
<div class="feature-icon">📱</div>
|
||||
<h3>灵活部署</h3>
|
||||
<p>支持公有云、私有云、混合云多种部署方式,满足不同企业需求。</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<div class="feature-box h-100">
|
||||
<div class="feature-icon">🔄</div>
|
||||
<h3>高可用性</h3>
|
||||
<p>分布式架构设计,支持水平扩展,确保系统7x24小时稳定运行。</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 客户案例 -->
|
||||
<div class="row mb-5">
|
||||
<div class="col-12 text-center mb-4">
|
||||
<h2>成功案例</h2>
|
||||
<p class="lead text-muted">值得信赖的企业级解决方案</p>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
本周呼叫量统计
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<canvas id="weeklyCallsChart"></canvas>
|
||||
<h5 class="card-title">某大型电商平台</h5>
|
||||
<p class="card-text">通过部署ByteDesk智能呼叫中心,客服效率提升300%,客户满意度提升40%。</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-4">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
呼叫类型分布
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<canvas id="callTypeChart"></canvas>
|
||||
<h5 class="card-title">某金融机构</h5>
|
||||
<p class="card-text">AI驱动的智能服务系统,帮助客户服务成本降低50%,业务转化率提升35%。</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">某教育机构</h5>
|
||||
<p class="card-text">智能呼叫中心助力招生咨询效率提升200%,客户转化率提升45%。</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 快速操作区 -->
|
||||
<!-- 行动召唤 -->
|
||||
<div class="row text-center mb-5">
|
||||
<div class="col-12">
|
||||
<h2 class="mb-4">快速入门</h2>
|
||||
<h2 class="mb-4">开启智能客服新时代</h2>
|
||||
<p class="lead mb-4">立即体验 ByteDesk 智能呼叫中心,让AI为您的企业创造价值</p>
|
||||
<div class="d-flex justify-content-center gap-3">
|
||||
<a href="/callcenter/docs" class="btn btn-primary btn-lg">查看文档</a>
|
||||
<a href="/callcenter/demo" class="btn btn-outline-primary btn-lg">在线演示</a>
|
||||
<a href="/contact" class="btn btn-primary btn-lg">免费试用</a>
|
||||
<a href="/demo" class="btn btn-outline-primary btn-lg">预约演示</a>
|
||||
<a href="/docs" class="btn btn-outline-secondary btn-lg">查看文档</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Chart.js引入 -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
// 每周呼叫量统计图表
|
||||
const weeklyCallsCtx = document.getElementById('weeklyCallsChart').getContext('2d');
|
||||
new Chart(weeklyCallsCtx, {
|
||||
type: 'line',
|
||||
data: {
|
||||
labels: ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日'],
|
||||
datasets: [{
|
||||
label: '呼叫量',
|
||||
data: [65, 78, 80, 85, 90, 45, 30],
|
||||
borderColor: '#0d6efd',
|
||||
tension: 0.1,
|
||||
fill: false
|
||||
}]
|
||||
},
|
||||
options: {
|
||||
responsive: true
|
||||
}
|
||||
});
|
||||
|
||||
// 呼叫类型分布图表
|
||||
const callTypeCtx = document.getElementById('callTypeChart').getContext('2d');
|
||||
new Chart(callTypeCtx, {
|
||||
type: 'pie',
|
||||
data: {
|
||||
labels: ['入站呼叫', '出站呼叫', '内部呼叫', '会议呼叫'],
|
||||
datasets: [{
|
||||
data: [55, 30, 10, 5],
|
||||
backgroundColor: ['#0d6efd', '#6c757d', '#198754', '#ffc107']
|
||||
}]
|
||||
},
|
||||
options: {
|
||||
responsive: true
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.feature-icon {
|
||||
font-size: 2.5rem;
|
||||
@@ -234,5 +243,12 @@
|
||||
transform: translateY(-5px);
|
||||
box-shadow: 0 5px 15px rgba(0,0,0,0.1);
|
||||
}
|
||||
.card {
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
.card:hover {
|
||||
transform: translateY(-5px);
|
||||
box-shadow: 0 5px 15px rgba(0,0,0,0.1);
|
||||
}
|
||||
</style>
|
||||
</@base.base>
|
||||
@@ -1,9 +1,10 @@
|
||||
<#macro base title="ByteDesk 呼叫中心">
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>${title!'ByteDesk 呼叫中心'}</title>
|
||||
<title>${title}</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.7.2/font/bootstrap-icons.css" rel="stylesheet">
|
||||
<link href="/css/callcenter/style.css" rel="stylesheet">
|
||||
@@ -84,4 +85,5 @@
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
|
||||
<script src="/js/callcenter/main.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
</#macro>
|
||||
Reference in New Issue
Block a user