xf 2 年之前
父节点
当前提交
6d24996d91

+ 2 - 1
.gitignore

@@ -28,6 +28,8 @@ bld/
 [Oo]bj/
 [Ll]og/
 *.Comments.xml
+document.xml
+Document.xml
 
 # Visual Studio 2015/2017 cache/options directory
 .vs/
@@ -340,4 +342,3 @@ ASALocalRun/
 
 # BeatPulse healthcheck temp database
 healthchecksdb
-/src/CallCenter.Api/Document.xml

+ 11 - 2
src/Hotline.Api/Controllers/TestController.cs

@@ -4,6 +4,7 @@ using Hotline.CallCenter.Ivrs;
 using Hotline.Realtimes;
 using Hotline.Share.Dtos.Realtime;
 using Hotline.Users;
+using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Mvc;
 using Microsoft.Extensions.Options;
 using NewRock.Sdk;
@@ -86,11 +87,19 @@ namespace Hotline.Api.Controllers
         /// 
         /// </summary>
         /// <returns></returns>
+        [AllowAnonymous]
         [HttpGet("t2")]
         public async Task GetVoiceEndAnswerAsyncTest()
         {
-            var answer = await _ivrDomainService.GetVoiceEndAnswerAsync("3", HttpContext.RequestAborted);
-            Console.WriteLine(answer.Content);
+            //var answer = await _ivrDomainService.GetVoiceEndAnswerAsync("3", HttpContext.RequestAborted);
+            //Console.WriteLine(answer.Content);
+
+            _logger.LogInformation("info");
+            _logger.LogCritical("critical");
+            _logger.LogDebug("debug");
+            _logger.LogError("error");
+            _logger.LogTrace("trace");
+            _logger.LogWarning("warning");
         }
     }
 }

+ 1 - 1
src/Hotline.Api/Filters/UserFriendlyExceptionFilter.cs

@@ -39,7 +39,7 @@ namespace Hotline.Api.Filters
             if (context.Exception is UserFriendlyException userFriendlyException)
             {
                 code = userFriendlyException.Code;
-                statusCode = 400;
+                statusCode = userFriendlyException.Code;
                 error = userFriendlyException.Message;
                 //message = userFriendlyException.Message;
             }

+ 2 - 0
src/Hotline.Api/Hotline.Api.csproj

@@ -9,12 +9,14 @@
   </PropertyGroup>
 
   <ItemGroup>
+    <PackageReference Include="Exceptionless.AspNetCore" Version="4.8.0" />
     <PackageReference Include="FluentValidation.AspNetCore" Version="11.2.1" />
     <PackageReference Include="Mapster.DependencyInjection" Version="1.0.0" />
     <PackageReference Include="MediatR.Extensions.Microsoft.DependencyInjection" Version="10.0.1" />
     <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.10" />
     <PackageReference Include="Microsoft.AspNetCore.SignalR.StackExchangeRedis" Version="6.0.8" />
     <PackageReference Include="NETCore.Encrypt" Version="2.1.0" />
+    <PackageReference Include="Serilog.Sinks.Exceptionless" Version="3.1.5" />
     <PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" />
     <PackageReference Include="XF.Utility.AppIdentityModel" Version="1.0.1" />
   </ItemGroup>

+ 3 - 1
src/Hotline.Api/Program.cs

@@ -13,8 +13,10 @@ try
 
     builder.Host.UseSerilog((ctx, lc) => lc
         //.WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss} {Level}] {SourceContext}{NewLine}{Message:lj}{NewLine}{Exception}{NewLine}")
+        //.WriteTo.Exceptionless()
         .Enrich.FromLogContext()
-        .ReadFrom.Configuration(ctx.Configuration));
+        .ReadFrom.Configuration(ctx.Configuration))
+        ;
 
     builder
         .ConfigureServices()

+ 7 - 1
src/Hotline.Api/StartupExtensions.cs

@@ -1,5 +1,6 @@
 using System.IdentityModel.Tokens.Jwt;
 using System.Reflection;
+using Exceptionless;
 using FluentValidation;
 using FluentValidation.AspNetCore;
 using Hotline.Api.Filters;
@@ -34,7 +35,7 @@ internal static class StartupExtensions
         services.AddHttpContextAccessor();
 
 #if DEBUG
-        builder.WebHost.UseUrls("http://192.168.100.36:50110", "http://localhost:50110");
+        builder.WebHost.UseUrls("http://192.168.100.62:50110", "http://localhost:50110");
 #endif
 
         services.Configure<DeviceConfigs>(d => configuration.GetSection( nameof(DeviceConfigs)).Bind(d));
@@ -177,12 +178,17 @@ internal static class StartupExtensions
             config.DisableDataAnnotationsValidation = true;
         })
             .AddValidatorsFromAssembly(typeof(AppContractsStartupExtensions).Assembly);
+
+        //services.AddExceptionless("zrSsxjdFC1Uv2WBckZn3RYxjpKKdxfYAN50aFiuV");
+        services.AddExceptionless(configuration);
+
         return builder.Build();
     }
 
     internal static WebApplication ConfigurePipelines(this WebApplication app)
     {
         app.UseSerilogRequestLogging();
+        app.UseExceptionless();
 
         var swaggerEnable = app.Configuration.GetSection("Swagger").Get<bool>();
         // Configure the HTTP request pipeline.

+ 9 - 1
src/Hotline.Api/appsettings.Development.json

@@ -2,7 +2,8 @@
   "Serilog": {
     "Using": [
       "Serilog.Enrichers.Span",
-      "Serilog.Sinks.Console"
+      "Serilog.Sinks.Console",
+      "Serilog.Sinks.Exceptionless"
     ],
     "MinimumLevel": {
       "Default": "Information",
@@ -24,6 +25,9 @@
           "outputTemplate": "[{Timestamp:HH:mm:ss} {Level}] {SourceContext} [{TraceId}]{NewLine}{Message:lj}{NewLine}{Exception}{NewLine}",
           "theme": "Serilog.Sinks.SystemConsole.Themes.ConsoleTheme::None, Serilog.Sinks.Console"
         }
+      },
+      {
+        "Name": "Exceptionless"
       }
       //{
       //  "Name": "File",
@@ -59,5 +63,9 @@
     "WorkDay": [ 1, 2, 3, 4, 5, 0, 6 ],
     "WorkCategory": "08da9b9f-a35d-4ade-8ea7-55e8abbcdefd",
     "RestCategory": "08daa5f5-ac7a-4ced-8295-1c78baa15f9e"
+  },
+  "Exceptionless": {
+    "ServerUrl": "http://192.168.100.217:5000",
+    "ApiKey": "zrSsxjdFC1Uv2WBckZn3RYxjpKKdxfYAN50aFiuV"
   }
 }

+ 13 - 1
src/Hotline.Api/appsettings.json

@@ -2,7 +2,8 @@
   "Serilog": {
     "Using": [
       "Serilog.Enrichers.Span",
-      "Serilog.Sinks.Console"
+      "Serilog.Sinks.Console",
+      "Serilog.Sinks.Exceptionless"
     ],
     "MinimumLevel": {
       "Default": "Information",
@@ -24,8 +25,19 @@
           "outputTemplate": "[{Timestamp:HH:mm:ss} {Level}] {SourceContext} [{TraceId}]{NewLine}{Message:lj}{NewLine}{Exception}{NewLine}",
           "theme": "Serilog.Sinks.SystemConsole.Themes.ConsoleTheme::None, Serilog.Sinks.Console"
         }
+      },
+      {
+        "Name": "Exceptionless"
       }
       //{
+      //  "Name": "Exeptionless",
+      //  "Args": {
+      //    //"outputTemplate": "time=\"{Timestamp:yyyy-MM-dd HH:mm:ss}\" level={Level:w3} category={SourceContext} trace={TraceId}{NewLine}msg=\"{Message:lj}\"{NewLine}error=\"{Exception}\"{NewLine}",
+      //    "outputTemplate": "[{Timestamp:HH:mm:ss} {Level}] {SourceContext} [{TraceId}]{NewLine}{Message:lj}{NewLine}{Exception}{NewLine}",
+      //    "theme": "Serilog.Sinks.SystemConsole.Themes.ConsoleTheme::None, Serilog.Sinks.Console"
+      //  }
+      //}
+      //{
       //  "Name": "File",
       //  "Args": {
       //    "path": "logs/log-.txt",

+ 0 - 773
src/Hotline.Api/document.xml

@@ -1,773 +0,0 @@
-<?xml version="1.0"?>
-<doc>
-    <assembly>
-        <name>Hotline.Api</name>
-    </assembly>
-    <members>
-        <member name="T:Hotline.Api.Controllers.CallController">
-            <summary>
-            
-            </summary>
-        </member>
-        <member name="M:Hotline.Api.Controllers.CallController.ClearExt(Hotline.Share.Requests.ClearExtRequest)">
-            <summary>
-            强拆分机
-            </summary>
-            <param name="request"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.CallController.ClearVisitor(Hotline.Share.Requests.ClearVisitorRequest)">
-            <summary>
-            强拆来电
-            </summary>
-            <param name="request"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.CallController.ClearOuter(Hotline.Share.Requests.ClearOuterRequest)">
-            <summary>
-            强拆去电
-            </summary>
-            <param name="request"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.CallController.GetCallList(Hotline.Share.Requests.GetCallListRequest)">
-            <summary>
-            分页通话记录列表
-            </summary>
-            <param name="request"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.CallController.GetOutCallList(Hotline.Share.Requests.GetOutCallListRequest)">
-            <summary>
-            通话记录(外部对接)
-            </summary>
-            <param name="request"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.CallController.MonitorExt(Hotline.Share.Requests.MonitorExtRequest)">
-            <summary>
-            监听分机
-            </summary>
-            <param name="request"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.CallController.MonitorExtToTalk(Hotline.Share.Requests.MonitorExtToTalkRequest)">
-            <summary>
-            从监听到插播状态变换
-            1. 已知:分机 A 在监听分机 B 与其通话方的通话;
-            2. 执行分机 A 的从监听到插播状态变换的 API;
-            3. 执行成功时,分机 A 与分机 B 建立通话,分机 B 的原通话方听保持音。
-            </summary>
-            <param name="request"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.CallController.MonitorExtToListen(Hotline.Share.Requests.MonitorExtToListenRequest)">
-            <summary>
-            从插播到监听状态变换
-            1. 已知:分机 A 在插播分机 B 的通话;
-            2. 执行分机 A 的从插播到监听状态变换的 API;
-            3. 执行成功时,分机 A 监听分机 B 及其原通话方的通话。
-            </summary>
-            <param name="request"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.CallController.BargeinExt(Hotline.Share.Requests.BargeinExtRequest)">
-            <summary>
-            强插
-            1. 已知:分机 A 当前空闲,分机 B 正在通话中;
-            2. 执行分机 A 强插分机 B 的 API;
-            3. 执行成功时,分机 A 振铃,摘机后即可形成三方通话。
-            </summary>
-            <param name="request"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.IvrController.GetCategories">
-            <summary>
-            查询所有ivr分类
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.IvrController.GetCategory(System.String)">
-            <summary>
-            查询ivr分类(含ivr)
-            </summary>
-            <param name="id"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.IvrController.AddCategory(Hotline.Share.Dtos.AddIvrCategoryDto)">
-            <summary>
-            新增IVR分类
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.IvrController.UpdateCategory(Hotline.Share.Dtos.UpdateIvrCategoryDto)">
-            <summary>
-            更新IVR分类
-            </summary>
-            <param name="request"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.IvrController.RemoveCategory(System.String)">
-            <summary>
-            删除分类,含分类下所有IVR
-            </summary>
-            <param name="id"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.IvrController.Add(Hotline.Share.Dtos.AddIvrDto)">
-            <summary>
-            新增IVR
-            </summary>
-            <param name="dto"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.IvrController.Update(Hotline.Share.Dtos.UpdateIvrDto)">
-            <summary>
-            更新IVR
-            </summary>
-            <param name="dto"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.IvrController.Structure(Hotline.Share.Dtos.StructureIvrDto)">
-            <summary>
-            构建IVR关系
-            </summary>
-            <param name="dto"></param>
-            <returns></returns>
-            <exception cref="T:XF.Domain.Exceptions.UserFriendlyException"></exception>
-        </member>
-        <member name="M:Hotline.Api.Controllers.IvrController.DeStructureIvr(System.String)">
-            <summary>
-            删除IVR关系(并非删除IVR)
-            </summary>
-            <param name="ivrId"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.IvrController.ReplaceRootAsync(System.String)">
-            <summary>
-            替换某个IVR分组下的起始IVR(根节点)
-            </summary>
-            <param name="ivrId"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.IvrController.QueryIvrs">
-            <summary>
-            查询所有ivr
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.IvrController.GetBeginingIvrAsync(System.String)">
-            <summary>
-            查询ivr分类,以树形结构返回IVR关系
-            </summary>
-            <param name="categoryId"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.IvrController.GetBaseInfo">
-            <summary>
-            页面基础信息
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.ListsController.AddBlacklist(Hotline.Share.Dtos.AddBlacklistDto)">
-            <summary>
-            添加电话号至黑名单
-            </summary>
-            <param name="dto"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.ListsController.RemoveBlacklist(System.String)">
-            <summary>
-            删除黑名单数据
-            </summary>
-            <param name="phone"></param>
-        </member>
-        <member name="M:Hotline.Api.Controllers.ListsController.QueryPaged(Hotline.Share.Dtos.BlacklistPagedDto)">
-            <summary>
-            分页查询黑名单
-            </summary>
-            <param name="dto"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.SettingController.VoiceQueryList">
-            <summary>
-            查询语音文件
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.SettingController.RemoveVoiceFile(System.String)">
-            <summary>
-            删除语音文件
-            </summary>
-            <param name="voiceFileName"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.SettingController.GetSysSettingsAsync">
-            <summary>
-            获取系统参数列表
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.SettingController.ModifySettings(Hotline.Share.Requests.ModifySettingsRequest)">
-            <summary>
-            更新配置
-            </summary>
-            <param name="request"></param>
-            <returns></returns>
-            <exception cref="T:XF.Domain.Exceptions.UserFriendlyException"></exception>
-        </member>
-        <member name="T:Hotline.Api.Controllers.TelController">
-            <summary>
-            话机相关接口
-            </summary>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TelController.QueryTels">
-            <summary>
-            查询所有分机
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TelController.QueryTelsFrequency">
-            <summary>
-            查询所有分机(高频)
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TelController.QueryTelByToken">
-            <summary>
-            查询当前用户分机(高频)
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TelController.QueryTelGroups">
-            <summary>
-            查询所有分机组
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TelController.AddTelGroup(Hotline.Share.Dtos.AddTelGroupDto)">
-            <summary>
-            新增分机组
-            </summary>
-            <param name="dto"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TelController.UpdateTelGroup(Hotline.Share.Dtos.UpdateTelGroupDto)">
-            <summary>
-            更新分机组
-            </summary>
-            <param name="dto"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TelController.Rest">
-            <summary>
-            分机休息
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TelController.UnRest">
-            <summary>
-            分机结束休息
-            </summary>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TelController.Hold">
-            <summary>
-            保持通话
-            </summary>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TelController.UnHold">
-            <summary>
-            恢复通话(解除hold状态)
-            </summary>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TelController.SyncTelsAsync">
-            <summary>
-            根据设备自动同步分机数据到数据库
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TelController.GetBaseInfo">
-            <summary>
-            页面基础信息
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TelController.TelToTel(Hotline.Share.Dtos.TelToTelDto)">
-            <summary>
-            分机呼分机
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TelController.TelToOuter(Hotline.Share.Dtos.TelToOuterDto)">
-            <summary>
-            分机拨打外部电话
-            </summary>
-            <param name="dto"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TelController.TelToOuterByLine(Hotline.Share.Dtos.TelToOuterByLineDto)">
-            <summary>
-            指定模拟外线外呼(分机拨打外部电话)
-            </summary>
-            <param name="dto"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TelController.VisitorToTel(Hotline.Share.Dtos.VisitorToTelDto)">
-            <summary>
-            来电转分机
-            </summary>
-            <param name="dto"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TelController.VisitorToOuter(Hotline.Share.Dtos.VisitorToOuterDto)">
-            <summary>
-            来电转外部电话
-            </summary>
-            <param name="dto"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TelController.VisitorToGroup(Hotline.Share.Dtos.VisitorToGroupDto)">
-            <summary>
-            来电转分机组队列
-            </summary>
-            <param name="dto"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TelController.OuterToOuter(Hotline.Share.Dtos.OuterToOuterDto)">
-            <summary>
-            去电转外部电话
-            </summary>
-            <param name="dto"></param>
-            <returns></returns>
-            <exception cref="T:XF.Domain.Exceptions.UserFriendlyException"></exception>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TelController.OuterToTel(Hotline.Share.Dtos.OuterToTelDto)">
-            <summary>
-            去电转分机
-            </summary>
-            <param name="dto"></param>
-            <returns></returns>
-            <exception cref="T:XF.Domain.Exceptions.UserFriendlyException"></exception>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TelController.Conference(Hotline.Share.Dtos.ConferenceDto)">
-            <summary>
-            三方会议
-            先建立两方通话,然后调用保持通话接口,拨通第三方分机,然后再调用三方会议接口
-            1. 分机 A 正在和 B 通话;
-            2. 分机 A 把原通话呼叫保持;
-            3. 分机 A 向 C 发起新的呼叫,并建立通话;
-            4. 此时,使用该 API 能够实现以分机 A 为主持方建立 A、B、C 的三方会议。
-            </summary>
-            <param name="dto">TelNo:会议发起方分机号</param>
-            <returns></returns>
-            <exception cref="T:XF.Domain.Exceptions.UserFriendlyException"></exception>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TestController.RingTest">
-            <summary>
-            signalR测试(method: Ring)
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="T:Hotline.Api.Controllers.TestSdkController">
-            <summary>
-            设备测试专用,外部禁止调用
-            </summary>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TestSdkController.QueryDeviceInfo">
-            <summary>
-            查询设备
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TestSdkController.QueryExt(System.String)">
-            <summary>
-            查询分机
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TestSdkController.QueryExtGroup(System.String)">
-            <summary>
-            查询分机组
-            </summary>
-            <param name="groupid"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TestSdkController.QueryMenu(System.String)">
-            <summary>
-            查询语音菜单
-            </summary>
-            <param name="menuid"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TestSdkController.QueryTrunk(System.String)">
-            <summary>
-            查询中继
-            </summary>
-            <param name="trunkid"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TestSdkController.QueryVisitor(System.String)">
-            <summary>
-            查询来电
-            </summary>
-            <param name="visitorid"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TestSdkController.QueryOuter(System.String)">
-            <summary>
-            查询去电
-            </summary>
-            <param name="outerid"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TestSdkController.ClearExt(System.String)">
-            <summary>
-            强拆分机
-            </summary>
-            <param name="extid"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TestSdkController.ClearVisitor(System.String)">
-            <summary>
-            强拆来电
-            </summary>
-            <param name="visitorId"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TestSdkController.ClearOuter(System.String)">
-            <summary>
-            强拆去电
-            </summary>
-            <param name="outerId"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TestSdkController.ConfigExt">
-            <summary>
-            配置分机
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TestSdkController.ConfigExtGroup">
-            <summary>
-            配置分机组
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TestSdkController.ConfigMenu">
-            <summary>
-            配置语音菜单
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TestSdkController.Hold(System.String)">
-            <summary>
-            呼叫保持
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TestSdkController.UnHold(System.String)">
-            <summary>
-            呼叫接回
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TestSdkController.Mute(System.String)">
-            <summary>
-            静音
-            </summary>
-            <param name="extid"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TestSdkController.UnMute(System.String)">
-            <summary>
-            解除静音
-            </summary>
-            <param name="extid"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TestSdkController.ExtensionToExtension(System.String,System.String)">
-            <summary>
-            分机呼分机
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TestSdkController.ExtToOuter(System.String,System.String)">
-            <summary>
-            分机呼外部电话
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TestSdkController.VisitorToExt(System.String,System.String)">
-            <summary>
-            来电转分机
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TestSdkController.VisitorToOuter(System.String,System.String,System.String)">
-            <summary>
-            来电转外部电话
-            </summary>
-            <param name="visid"></param>
-            <param name="outerphonenum"></param>
-            <param name="display"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TestSdkController.VisitorToMenu(System.String,System.String)">
-            <summary>
-            来电转语音菜单
-            </summary>
-            <param name="visid"></param>
-            <param name="menuid"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TestSdkController.OuterToExt(System.String,System.String)">
-            <summary>
-            去电转分机
-            </summary>
-            <param name="outer"></param>
-            <param name="extid"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TestSdkController.OuterToOuter(System.String,System.String)">
-            <summary>
-            去电转外部电话
-            </summary>
-            <param name="outerid"></param>
-            <param name="outerphonenum"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TestSdkController.OuterToMenu(System.String,System.String)">
-            <summary>
-            去电转语音菜单
-            </summary>
-            <param name="outerid"></param>
-            <param name="menuid"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TestSdkController.MenuToExt(System.String,System.String)">
-            <summary>
-            语音菜单呼分机
-            </summary>
-            <param name="menuid"></param>
-            <param name="extid"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TestSdkController.MenuToOuter(System.String,System.String)">
-            <summary>
-            语音菜单呼外部电话
-            </summary>
-            <param name="menuid"></param>
-            <param name="outernum"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TestSdkController.TwoWayOuter(System.String,System.String)">
-            <summary>
-            双向呼叫(回拨)
-            </summary>
-            <param name="outerone"></param>
-            <param name="outertwo"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TestSdkController.VoiceNewsFlashExt(System.String,System.String)">
-            <summary>
-            语音插播(分机)
-            </summary>
-            <param name="extid"></param>
-            <param name="visitorid"></param>
-            <param name="outerid"></param>
-            <param name="voicefile"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TestSdkController.VoiceNewsFlashVisitor(System.String,System.String)">
-            <summary>
-            语音插播(来电)
-            </summary>
-            <param name="voicefile"></param>
-            <param name="visiitorid"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TestSdkController.VoiceNewsFlashOuter(System.String,System.String)">
-            <summary>
-            语音插播(去电)
-            </summary>
-            <param name="voicefile"></param>
-            <param name="outerid"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TestSdkController.ConferenceMeeting(System.String)">
-            <summary>
-            会议
-            </summary>
-            <param name="extid"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TestSdkController.VisitorToExtQueue(System.String,System.String)">
-            <summary>
-            来电转分机队列
-            </summary>
-            <param name="visitorid"></param>
-            <param name="extid"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TestSdkController.VisitorToGroupQueue(System.String,System.String)">
-             <summary>
-            来电转分机组队列
-             </summary>
-             <param name="visitorid"></param>
-             <param name="groupid"></param>
-             <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TestSdkController.VoiceQueryList">
-            <summary>
-            查询语音文件
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TestSdkController.RemoveVoiceFile(System.String)">
-            <summary>
-            删除语音文件
-            </summary>
-            <param name="voiceFile"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TestSdkController.MonitorExt(System.String,System.String)">
-            <summary>
-            监听分机
-            </summary>
-            <param name="firstTelNo"></param>
-            <param name="secondTelNo"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TestSdkController.MonitorExtToTalk(System.String)">
-            <summary>
-            从监听到插播状态变换
-            1. 已知:分机 A 在监听分机 B 与其通话方的通话;
-            2. 执行分机 A 的从监听到插播状态变换的 API;
-            3. 执行成功时,分机 A 与分机 B 建立通话,分机 B 的原通话方听保持音。
-            </summary>
-            <param name="telNo"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TestSdkController.MonitorExtToListen(System.String)">
-            <summary>
-            从插播到监听状态变换
-            1. 已知:分机 A 在插播分机 B 的通话;
-            2. 执行分机 A 的从插播到监听状态变换的 API;
-            3. 执行成功时,分机 A 监听分机 B 及其原通话方的通话。
-            </summary>
-            <param name="telNo"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.TestSdkController.BargeinExt(System.String,System.String)">
-            <summary>
-            强插
-            1. 已知:分机 A 当前空闲,分机 B 正在通话中;
-            2. 执行分机 A 强插分机 B 的 API;
-            3. 执行成功时,分机 A 振铃,摘机后即可形成三方通话。
-            </summary>
-            <param name="firstTelNo"></param>
-            <param name="secondTelNo"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.UserController.OnDuty(System.String)">
-            <summary>
-            上班
-            </summary>
-        </member>
-        <member name="M:Hotline.Api.Controllers.UserController.OffDuty">
-            <summary>
-            下班
-            </summary>
-        </member>
-        <member name="M:Hotline.Api.Controllers.UserController.QueryPaged(Hotline.Share.Requests.UserPagedRequest)">
-            <summary>
-            分页查询用户
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.UserController.Update(Hotline.Share.Dtos.UpdateUserDto)">
-            <summary>
-            更新用户
-            </summary>
-            <param name="userDto"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.UserController.Add(Hotline.Share.Dtos.AddUserDto)">
-            <summary>
-            新增用户
-            </summary>
-            <param name="userDto"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.UserController.Remove(System.String)">
-            <summary>
-            删除用户
-            </summary>
-            <param name="id"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Controllers.UserController.GetUserState">
-            <summary>
-            查询用户当前状态
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:Hotline.Api.Filters.TempTokenFilter1.OnAuthorization(Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext)">
-            <summary>
-            Called early in the filter pipeline to confirm request is authorized.
-            </summary>
-            <param name="context">The <see cref="T:Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext" />.</param>
-        </member>
-        <member name="M:Hotline.Api.Filters.UnifyResponseFilter.OnActionExecuting(Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext)">
-            <summary>
-            Called before the action executes, after model binding is complete.
-            </summary>
-            <param name="context">The <see cref="T:Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext" />.</param>
-        </member>
-        <member name="M:Hotline.Api.Filters.UnifyResponseFilter.OnActionExecuted(Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext)">
-            <summary>
-            Called after the action executes, before the action result.
-            </summary>
-            <param name="context">The <see cref="T:Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext" />.</param>
-        </member>
-        <member name="M:Hotline.Api.Filters.UserFriendlyExceptionFilter.OnException(Microsoft.AspNetCore.Mvc.Filters.ExceptionContext)">
-            <summary>
-            Called after an action has thrown an <see cref="T:System.Exception" />.
-            </summary>
-            <param name="context">The <see cref="T:Microsoft.AspNetCore.Mvc.Filters.ExceptionContext" />.</param>
-        </member>
-        <member name="M:Hotline.Api.Realtimes.CallCenterHub.OnConnectedAsync">
-            <summary>
-            Called when a new connection is established with the hub.
-            </summary>
-            <returns>A <see cref="T:System.Threading.Tasks.Task" /> that represents the asynchronous connect.</returns>
-        </member>
-        <member name="M:Hotline.Api.Realtimes.CallCenterHub.OnDisconnectedAsync(System.Exception)">
-            <summary>Called when a connection with the hub is terminated.</summary>
-            <returns>A <see cref="T:System.Threading.Tasks.Task" /> that represents the asynchronous disconnect.</returns>
-        </member>
-        <member name="P:Hotline.Api.Token.DefaultSessionContext.UserId">
-            <summary>
-            Id of current tenant or null for host
-            </summary>
-        </member>
-        <member name="P:Hotline.Api.Token.DefaultSessionContext.RequiredUserId">
-            <summary>
-            Id of current user or throw Exception for guest
-            </summary>
-            <exception cref="T:System.Security.Authentication.AuthenticationException"></exception>
-        </member>
-        <member name="P:Hotline.Api.Token.DefaultSessionContext.Roles">
-            <summary>
-            Roles
-            </summary>
-        </member>
-        <member name="M:Hotline.Api.Token.DefaultSessionContext.FindFirstValue(System.String)">
-            <summary>
-            Return the first value of the specific <see cref="!:claimType"/> claim type, otherwise null if the claim is not present.
-            </summary>
-            <param name="claimType"></param>
-            <returns></returns>
-        </member>
-    </members>
-</doc>