|
@@ -1,6 +1,7 @@
|
|
|
using CallCenter.Caches;
|
|
|
using CallCenter.Calls;
|
|
|
using CallCenter.Devices;
|
|
|
+using CallCenter.Ivrs;
|
|
|
using CallCenter.Repository.SqlSugar;
|
|
|
using CallCenter.Share.Dtos;
|
|
|
using CallCenter.Share.Enums;
|
|
@@ -32,8 +33,11 @@ namespace CallCenter.Api.Controllers
|
|
|
private readonly ITelCacheManager _telCacheManager;
|
|
|
private readonly IDeviceManager _deviceManager;
|
|
|
private readonly IMapper _mapper;
|
|
|
- private readonly ICallDetailRepository _callDetailRepository;
|
|
|
private readonly ICallRepository _callRepository;
|
|
|
+ private readonly IIvrCacheManager _ivrCacheManager;
|
|
|
+ private readonly IIvrDomainService _ivrDomainService;
|
|
|
+ private readonly ILogger<TelController> _logger;
|
|
|
+ private readonly ICallDetailRepository _callDetailRepository;
|
|
|
|
|
|
public TelController(
|
|
|
ITelDomainService telDomainService,
|
|
@@ -47,8 +51,11 @@ namespace CallCenter.Api.Controllers
|
|
|
ITelCacheManager telCacheManager,
|
|
|
IDeviceManager deviceManager,
|
|
|
IMapper mapper,
|
|
|
- ICallDetailRepository callDetailRepository,
|
|
|
- ICallRepository callRepository)
|
|
|
+ ICallRepository callRepository,
|
|
|
+ IIvrCacheManager ivrCacheManager,
|
|
|
+ IIvrDomainService ivrDomainService,
|
|
|
+ ILogger<TelController> logger,
|
|
|
+ ICallDetailRepository callDetailRepository)
|
|
|
{
|
|
|
_telDomainService = telDomainService;
|
|
|
_userCacheManager = userCacheManager;
|
|
@@ -61,8 +68,11 @@ namespace CallCenter.Api.Controllers
|
|
|
_telCacheManager = telCacheManager;
|
|
|
_deviceManager = deviceManager;
|
|
|
_mapper = mapper;
|
|
|
- _callDetailRepository = callDetailRepository;
|
|
|
_callRepository = callRepository;
|
|
|
+ _ivrCacheManager = ivrCacheManager;
|
|
|
+ _ivrDomainService = ivrDomainService;
|
|
|
+ _logger = logger;
|
|
|
+ _callDetailRepository = callDetailRepository;
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 查询所有分机
|
|
@@ -166,48 +176,49 @@ namespace CallCenter.Api.Controllers
|
|
|
/// </summary>
|
|
|
/// <param name="dto"></param>
|
|
|
/// <returns></returns>
|
|
|
- //[HttpPost("group")]
|
|
|
- //public async Task AddTelGroup([FromBody] AddTelGroupDto dto)
|
|
|
- //{
|
|
|
- // var works = await _workRepository.QueryAsync(d => dto.TelNos.Contains(d.TelNo) && !d.EndTime.HasValue);
|
|
|
-
|
|
|
- // await _deviceManager.AssginConfigGroupAsync(
|
|
|
- // dto.No,
|
|
|
- // dto.Distribution.ToString().ToLower(),
|
|
|
- // ext: works.Select(d => d.TelNo).ToList(),
|
|
|
- // voiceFile: dto.Voice ?? null,
|
|
|
- // cancellationToken: HttpContext.RequestAborted);
|
|
|
-
|
|
|
- // var group = _mapper.Map<TelGroup>(dto);
|
|
|
- // var tels = await _telRepository.QueryAsync(d => dto.TelNos.Contains(d.No));
|
|
|
- // group.Tels = tels;
|
|
|
- // await _telGroupRepository.AddNavTelsAsync(group, HttpContext.RequestAborted);
|
|
|
- // _cacheTelGroup.Remove(dto.No);
|
|
|
- //}
|
|
|
+ [HttpPost("group")]
|
|
|
+ public async Task AddTelGroup([FromBody] AddTelGroupDto dto)
|
|
|
+ {
|
|
|
+ var works = await _workRepository.QueryAsync(d => dto.TelNos.Contains(d.TelNo) && !d.EndTime.HasValue);
|
|
|
+
|
|
|
+ await _deviceManager.AssginConfigGroupAsync(
|
|
|
+ dto.No,
|
|
|
+ dto.Distribution,
|
|
|
+ //dto.Distribution.ToString().ToLower(),
|
|
|
+ ext: works.Select(d => d.TelNo).ToList(),
|
|
|
+ voiceFile: dto.Voice ?? null,
|
|
|
+ cancellationToken: HttpContext.RequestAborted);
|
|
|
+
|
|
|
+ var group = _mapper.Map<TelGroup>(dto);
|
|
|
+ var tels = await _telRepository.QueryAsync(d => dto.TelNos.Contains(d.No));
|
|
|
+ group.Tels = tels;
|
|
|
+ await _telGroupRepository.AddNavTelsAsync(group, HttpContext.RequestAborted);
|
|
|
+ _cacheTelGroup.Remove(dto.No);
|
|
|
+ }
|
|
|
|
|
|
/// <summary>
|
|
|
/// 更新分机组
|
|
|
/// </summary>
|
|
|
/// <param name="dto"></param>
|
|
|
/// <returns></returns>
|
|
|
- //[HttpPut("group")]
|
|
|
- //public async Task UpdateTelGroup([FromBody] UpdateTelGroupDto dto)
|
|
|
- //{
|
|
|
- // var works = await _workRepository.QueryAsync(d => dto.TelNos.Contains(d.TelNo) && !d.EndTime.HasValue);
|
|
|
-
|
|
|
- // await _deviceManager.AssginConfigGroupAsync(
|
|
|
- // dto.No,
|
|
|
- // dto.Distribution.ToString().ToLower(),
|
|
|
- // ext: works.Select(d => d.TelNo).ToList(),
|
|
|
- // voiceFile: dto.Voice ?? null,
|
|
|
- // cancellationToken: HttpContext.RequestAborted);
|
|
|
-
|
|
|
- // var group = _mapper.Map<TelGroup>(dto);
|
|
|
- // var tels = await _telRepository.QueryAsync(d => dto.TelNos.Contains(d.No));
|
|
|
- // group.Tels = tels;
|
|
|
- // await _telGroupRepository.UpdateNavTelsAsync(group, HttpContext.RequestAborted);
|
|
|
- // _cacheTelGroup.Remove(dto.No);
|
|
|
- //}
|
|
|
+ [HttpPut("group")]
|
|
|
+ public async Task UpdateTelGroup([FromBody] UpdateTelGroupDto dto)
|
|
|
+ {
|
|
|
+ var works = await _workRepository.QueryAsync(d => dto.TelNos.Contains(d.TelNo) && !d.EndTime.HasValue);
|
|
|
+
|
|
|
+ await _deviceManager.AssginConfigGroupAsync(
|
|
|
+ dto.No,
|
|
|
+ dto.Distribution,
|
|
|
+ ext: works.Select(d => d.TelNo).ToList(),
|
|
|
+ voiceFile: dto.Voice ?? null,
|
|
|
+ cancellationToken: HttpContext.RequestAborted);
|
|
|
+
|
|
|
+ var group = _mapper.Map<TelGroup>(dto);
|
|
|
+ var tels = await _telRepository.QueryAsync(d => dto.TelNos.Contains(d.No));
|
|
|
+ group.Tels = tels;
|
|
|
+ await _telGroupRepository.UpdateNavTelsAsync(group, HttpContext.RequestAborted);
|
|
|
+ _cacheTelGroup.Remove(dto.No);
|
|
|
+ }
|
|
|
|
|
|
/// <summary>
|
|
|
/// 分机休息
|
|
@@ -442,7 +453,56 @@ namespace CallCenter.Api.Controllers
|
|
|
}
|
|
|
|
|
|
|
|
|
- //public async Task
|
|
|
+ /// <summary>
|
|
|
+ /// 语音评价
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="callId"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("evaluate/{callId}")]
|
|
|
+ public async Task Evaluate(string callId)
|
|
|
+ {
|
|
|
+ //检查通话是否存在
|
|
|
+ var call =await _callRepository.GetAsync(callId,HttpContext.RequestAborted);
|
|
|
+ if (call is null)
|
|
|
+ {
|
|
|
+ throw new UserFriendlyException("未找到当前通话");
|
|
|
+ }
|
|
|
+ if (call.CallStatus == ECallStatus.Bye)
|
|
|
+ {
|
|
|
+ throw new UserFriendlyException("当前通话已结束");
|
|
|
+ }
|
|
|
+ if (call.CallStatus == ECallStatus.Answer || call.CallStatus == ECallStatus.Answered)
|
|
|
+ {
|
|
|
+ throw new UserFriendlyException("当前未进行通话,不能发送评价邀请");
|
|
|
+ }
|
|
|
+ //获取配置
|
|
|
+ var correct = _ivrDomainService.GetCorrectIvr(call.ToNo,true);
|
|
|
+
|
|
|
+ if (correct is null)
|
|
|
+ {
|
|
|
+ throw new UserFriendlyException("系统未配置评价,请联系管理员");
|
|
|
+ }
|
|
|
+ //检查是否有评价录音配置
|
|
|
+ var ivrList = _ivrCacheManager.GetIvrs();
|
|
|
+ var ivr = ivrList.First(x => x.IvrCategoryId == correct.ReturnValue && x.IsRoot);
|
|
|
+
|
|
|
+ _logger.LogInformation("transfer to ivr.no:{ivrNo}", ivr.No);
|
|
|
+
|
|
|
+ //写入子表
|
|
|
+ var detail = new CallDetail()
|
|
|
+ {
|
|
|
+ CallId = call.Id,
|
|
|
+ CallStatus = ECallStatus.Evaluate,
|
|
|
+ ConversationId = call.ConversationId,
|
|
|
+ EventName = "EVALUATE",
|
|
|
+ FromNo = call.FromNo,
|
|
|
+ ToNo = call.ToNo,
|
|
|
+ };
|
|
|
+
|
|
|
+ await _callDetailRepository.AddAsync(detail, HttpContext.RequestAborted);
|
|
|
+
|
|
|
+ await _deviceManager.VisitorToMenuAsync(call.ConversationId,ivr.No,HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
|
|
|
}
|
|
|
}
|