瀏覽代碼

tel to tel

admin 2 年之前
父節點
當前提交
25475d1326

+ 18 - 6
src/Hotline.Api/Controllers/PbxController.cs

@@ -318,9 +318,16 @@ namespace Hotline.Api.Controllers
             var toWork = _userCacheManager.GetWorkByTel(dto.TelNo);
             if (toWork is null)
                 throw UserFriendlyException.SameMessage("转接分机未进行工作");
-            var tel = await _deviceManager.QueryTelAsync(dto.TelNo, HttpContext.RequestAborted);
-            if (tel.TelStatus != ETelStatus.Ready)
+
+            //判断分机状态
+            var telState =await _deviceManager.QueryTelState(dto.TelNo,HttpContext.RequestAborted);
+            if (telState != ETelStatus.Ready)
                 throw UserFriendlyException.SameMessage("被叫分机不在线或正在通话中");
+
+            bool isRest = await _telRepository.IsRestingAsync(dto.TelNo, HttpContext.RequestAborted);
+            if (isRest)
+                throw new UserFriendlyException("被叫分机正在休息不能转接");
+
             await _deviceManager.ExtToExtAsync(work.TelNo, dto.TelNo, HttpContext.RequestAborted);
         }
 
@@ -372,10 +379,15 @@ namespace Hotline.Api.Controllers
             if (toWork is null)
                 throw UserFriendlyException.SameMessage("转接分机未进行工作");
 
-            var totel = await _deviceManager.QueryTelAsync(dto.TelNo, HttpContext.RequestAborted);
-            if (totel.TelStatus != ETelStatus.Ready)
+            var totelState = await _deviceManager.QueryTelState(dto.TelNo, HttpContext.RequestAborted);
+            if (totelState != ETelStatus.Ready)
                 throw UserFriendlyException.SameMessage("被叫分机不在线或正在通话中");
 
+            bool isRest = await _telRepository.IsRestingAsync(dto.TelNo, HttpContext.RequestAborted);
+            if (isRest)
+                throw new UserFriendlyException("被叫分机正在休息不能转接");
+
+
             var tel = await _deviceManager.QueryTelAsync(work.TelNo, HttpContext.RequestAborted);
             if (!string.IsNullOrEmpty(tel.ConversationId))
                 await _deviceManager.VisitorToExtAsync(tel.ConversationId, dto.TelNo, HttpContext.RequestAborted);
@@ -459,8 +471,8 @@ namespace Hotline.Api.Controllers
             if (toWork is null)
                 throw UserFriendlyException.SameMessage("转接分机未进行工作");
 
-            var totel = await _deviceManager.QueryTelAsync(dto.TelNo, HttpContext.RequestAborted);
-            if (totel.TelStatus != ETelStatus.Ready)
+            var totelState = await _deviceManager.QueryTelState(dto.TelNo, HttpContext.RequestAborted);
+            if (totelState != ETelStatus.Ready)
                 throw UserFriendlyException.SameMessage("被叫分机不在线或正在通话中");
 
             var tel = await _deviceManager.QueryTelAsync(work.TelNo, HttpContext.RequestAborted);

+ 1 - 13
src/Hotline.Api/Controllers/TestController.cs

@@ -55,19 +55,7 @@ public class TestController : BaseController
     //private readonly ITypedCache<List<User>> _cache;
     //private readonly ICacheManager<User> _cache;
 
-    /// <summary>
-    /// 
-    /// </summary>
-    /// <param name="client"></param>
-    /// <param name="logger"></param>
-    /// <param name="authorizeGenerator"></param>
-    /// <param name="options"></param>
-    /// <param name="sessionContext"></param>
-    /// <param name="userRepository"></param>
-    /// <param name="cache"></param>
-    /// <param name="realtimeService"></param>
-    /// <param name="blacklistDomainService"></param>
-    /// <param name="ivrDomainService"></param>
+    
     public TestController(
         INewRockClient client,
         ILogger<TestController> logger,

+ 0 - 2
src/Hotline.Api/Controllers/TestSdkController.cs

@@ -618,8 +618,6 @@ namespace Hotline.Api.Controllers
         /// 语音插播(分机)
         /// </summary>
         /// <param name="extid"></param>
-        /// <param name="visitorid"></param>
-        /// <param name="outerid"></param>
         /// <param name="voicefile"></param>
         /// <returns></returns>
         [HttpPost("VoiceNewsFlash")]

+ 3 - 0
src/Hotline.Api/StartupHelper.cs

@@ -135,6 +135,8 @@ namespace Hotline.Api
         /// Cors
         /// </summary>
         /// <param name="services"></param>
+        /// <param name="configuration"></param>
+        /// <param name="corsOrigins"></param>
         /// <returns></returns>
         public static IServiceCollection RegisterCors(this IServiceCollection services, ConfigurationManager configuration, string corsOrigins)
         {
@@ -193,6 +195,7 @@ namespace Hotline.Api
         /// SignalR
         /// </summary>
         /// <param name="services"></param>
+        /// <param name="configuration"></param>
         /// <returns></returns>
         public static IServiceCollection RegisterSignalR(this IServiceCollection services, ConfigurationManager configuration)
         {

+ 30 - 0
src/Hotline.NewRock/DeviceManager.cs

@@ -115,6 +115,36 @@ namespace Hotline.NewRock
         }
 
 
+        /// <summary>
+        /// 查询分机状态
+        /// </summary>
+        /// <param name="TelNo"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        public async Task<ETelStatus> QueryTelState(string TelNo, CancellationToken cancellationToken)
+        {
+            var result = await _newRockClient.QueryExt(
+                new QueryExtRequest() { Attribute = "Query", Ext = new Ext { Id = TelNo } },
+                _options.Value.ReceiveKey, _options.Value.Expired, cancellationToken);
+
+            switch (result.Ext.State)
+            {
+                case "ready":
+                    return ETelStatus.Ready;
+                case "active":
+                    return ETelStatus.Active;
+                case "progress":
+                    return ETelStatus.Progress;
+                case "offline":
+                    return ETelStatus.Offline;
+                case "offhook":
+                    return ETelStatus.Offhook;
+                default:
+                    break;
+            }
+            return ETelStatus.Offline;
+        }
+
         /// <summary>
         /// 查询所有分机
         /// </summary>

+ 8 - 0
src/Hotline/CallCenter/Devices/IDeviceManager.cs

@@ -15,6 +15,14 @@ namespace Hotline.CallCenter.Devices
         /// <returns></returns>
         Task<TelDto> QueryTelAsync(string TelNo,CancellationToken cancellationToken);
 
+        /// <summary>
+        /// 查询分机状态
+        /// </summary>
+        /// <param name="TelNo"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        Task<ETelStatus> QueryTelState(string TelNo, CancellationToken cancellationToken);
+
         /// <summary>
         /// 查询所有分机
         /// </summary>