using Hotline.CallCenter.Configs; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; using NewRock.Sdk; using NewRock.Sdk.Control.Request; using NewRock.Sdk.Control.Response; using NewRock.Sdk.Manage.Request; using NewRock.Sdk.Manage.Response; using NewRock.Sdk.Transfer.Conference.Request; using NewRock.Sdk.Transfer.Connect.Request; using NewRock.Sdk.Transfer.Queue.Request; using Ext = NewRock.Sdk.Control.Request.Base.Ext; using Group = NewRock.Sdk.Control.Request.Group; using VisitorToExtVisitor = NewRock.Sdk.Transfer.Connect.Request.VisitorToExtVisitor; namespace Hotline.Api.Controllers { /// /// 设备测试专用,外部禁止调用 /// [AllowAnonymous] public class TestSdkController : BaseController { private readonly INewRockClient _client; private readonly ILogger _logger; private readonly IOptionsSnapshot _options; public TestSdkController( INewRockClient client, ILogger logger, IOptionsSnapshot options ) { _client = client; _logger = logger; _options = options; } #region 查询(Query) /// /// 查询设备 /// /// [HttpGet("QueryDeviceInfo")] public async Task QueryDeviceInfo() { var result = await _client.QueryDeviceInfo( new QueryDeviceInfoRequest { Attribute = "Query", DeviceInfo = string.Empty }, _options.Value.NewRock.ReceiveKey, _options.Value.NewRock.Expired, HttpContext.RequestAborted); _logger.LogInformation(System.Text.Json.JsonSerializer.Serialize(result)); } /// /// 查询分机 /// /// [HttpPost("QueryExt")] public async Task QueryExt(string extid) { var result = await _client.QueryExt( new QueryExtRequest() { Attribute = "Query", Ext = new Ext() { Id = extid } }, _options.Value.NewRock.ReceiveKey, _options.Value.NewRock.Expired, HttpContext.RequestAborted ); _logger.LogInformation(System.Text.Json.JsonSerializer.Serialize(result)); } /// /// 查询分机组 /// /// /// [HttpPost("QueryExtGroup")] public async Task QueryExtGroup(string? groupid) { var result = await _client.QueryExtGroup(new QueryExtGroupRequest() { Attribute = "Query", Group = new QueryExtGroup() { Id = groupid } }, _options.Value.NewRock.ReceiveKey, _options.Value.NewRock.Expired, HttpContext.RequestAborted); _logger.LogInformation(System.Text.Json.JsonSerializer.Serialize(result)); } /// /// 查询语音菜单 /// /// /// [HttpPost("QueryMenu")] public async Task QueryMenu(string menuid) { var result = await _client.QueryMenu(new QueryMenuRequest() { Attribute = "Query", Menu = new QueryMenuMenu() { Id = menuid } }, _options.Value.NewRock.ReceiveKey, _options.Value.NewRock.Expired, HttpContext.RequestAborted); _logger.LogInformation(System.Text.Json.JsonSerializer.Serialize(result)); } /// /// 查询中继 /// /// /// [HttpPost("QueryTrunk")] public async Task QueryTrunk(string trunkid) { var result = await _client.QueryTrunk(new QueryTrunkRequest() { Attribute = "Query", Trunk = new QueryTrunkTrunk() { Id = trunkid } }, _options.Value.NewRock.ReceiveKey, _options.Value.NewRock.Expired, HttpContext.RequestAborted); _logger.LogInformation(System.Text.Json.JsonSerializer.Serialize(result)); } /// /// 查询来电 /// /// /// [HttpPost("QueryVisitor")] public async Task QueryVisitor(string visitorid) { var result = await _client.QueryVisitor(new QueryVisitorRequest() { Attribute = "Query", Visitor = new QueryVisitorVisitor() { Id = visitorid } }, _options.Value.NewRock.ReceiveKey, _options.Value.NewRock.Expired, HttpContext.RequestAborted); _logger.LogInformation(System.Text.Json.JsonSerializer.Serialize(result)); } /// /// 查询去电 /// /// /// [HttpPost("QueryOuter")] public async Task QueryOuter(string outerid) { var result = await _client.QueryOuter(new QueryOuterRequest() { Attribute = "Query", Outer = new QueryOuterOuter() { Id = outerid } }, _options.Value.NewRock.ReceiveKey, _options.Value.NewRock.Expired, HttpContext.RequestAborted); _logger.LogInformation(System.Text.Json.JsonSerializer.Serialize(result)); } #endregion #region 强拆 /// /// 强拆分机 /// /// /// [HttpPost("ClearExt")] public async Task ClearExt(string extid) { var result = await _client.ClearCall(new ClearCallRequest() { Attribute = "Clear", Ext = new Ext() { Id = extid }, }, _options.Value.NewRock.ReceiveKey, _options.Value.NewRock.Expired, HttpContext.RequestAborted); } /// /// 强拆来电 /// /// /// [HttpPost("ClearVisitor")] public async Task ClearVisitor(string visitorId) { var result = await _client.ClearCall(new ClearCallRequest() { Attribute = "Clear", Visitor = new ClearCallVisitor() { Id = visitorId } }, _options.Value.NewRock.ReceiveKey, _options.Value.NewRock.Expired, HttpContext.RequestAborted); } /// /// 强拆去电 /// /// /// [HttpPost("ClearOuter")] public async Task ClearOuter(string outerId) { var result = await _client.ClearCall(new ClearCallRequest() { Attribute = "Clear", Outer = new ClearCallOuter() { Id = outerId } }, _options.Value.NewRock.ReceiveKey, _options.Value.NewRock.Expired, HttpContext.RequestAborted); } #endregion #region 配置(Assign) /// /// 配置分机 /// /// [HttpGet("ConfigExt")] public async Task ConfigExt() { var result = await _client.ConfigExt(new AssginConfigExtRequest() { Attribute = "Assign", Ext = new ConfigExt() { Lineid = "IPPhone 21", Id = "212", //Staffid = "038", Groups = new List() { "1", "2", }, //VoiceFile = "user_tts164815.dat", //Call_Restriction = "2", //Call_Pickup ="no", No_Disturb = "on", Fwd_Type = "0", //Record="on", Api = "7" } }, _options.Value.NewRock.ReceiveKey, _options.Value.NewRock.Expired, HttpContext.RequestAborted); _logger.LogInformation(System.Text.Json.JsonSerializer.Serialize(result)); } /// /// 配置分机组 /// /// [HttpGet("ConfigExtGroup")] public async Task ConfigExtGroup() { var result = await _client.ConfigExtGroup(new AssginConfigGroupRequest() { Attribute = "Assign", Group = new Group() { Id = "1", Voicefile = "NewMorning", Distribution = "sequential", Ext = new List() { "209", "210" } } }, _options.Value.NewRock.ReceiveKey, _options.Value.NewRock.Expired, HttpContext.RequestAborted); _logger.LogInformation(System.Text.Json.JsonSerializer.Serialize(result)); } /// /// 配置语音菜单 /// /// [HttpGet("ConfigMenu")] public async Task ConfigMenu() { var result = await _client.ConfigMenu(new AssginConfigMenuRequest() { Attribute = "Assign", Menu = new AssginConfigMenuMenu() { Id = "1", VoiceFile = "user_tts131742", Exit = "#", Repeat = "3", InfoLength = "5", } }, _options.Value.NewRock.ReceiveKey, _options.Value.NewRock.Expired, HttpContext.RequestAborted); } #endregion #region 呼叫保持和接回 /// /// 呼叫保持 /// /// [HttpPost("Hold")] public async Task Hold(string extid) { var result = await _client.HoldOrUnHold(new HoldSetRequest() { Attribute = "Hold", Ext = new Ext() { Id = extid } }, _options.Value.NewRock.ReceiveKey, _options.Value.NewRock.Expired, HttpContext.RequestAborted); //_logger.LogInformation(result.Manufacturer); } /// /// 呼叫接回 /// /// [HttpPost("UnHold")] public async Task UnHold(string extid) { var result = await _client.HoldOrUnHold(new HoldSetRequest() { Attribute = "Unhold", Ext = new Ext() { Id = extid } }, _options.Value.NewRock.ReceiveKey, _options.Value.NewRock.Expired, HttpContext.RequestAborted); } #endregion #region 静音开启与解除 /// /// 静音 /// /// /// [HttpPost("Mute")] public async Task Mute(string extid) { var result = await _client.MuteOrUnMute(new MuteSetRequest { Attribute = "Mute", Ext = new Ext() { Id = extid } }, _options.Value.NewRock.ReceiveKey, _options.Value.NewRock.Expired, HttpContext.RequestAborted); } /// /// 解除静音 /// /// /// [HttpPost("UnMute")] public async Task UnMute(string extid) { var result = await _client.MuteOrUnMute(new MuteSetRequest { Attribute = "Unmute", Ext = new Ext() { Id = extid } }, _options.Value.NewRock.ReceiveKey, _options.Value.NewRock.Expired, HttpContext.RequestAborted); } #endregion #region 呼叫转接命令(Transfer) #region 连接(Connect) /// /// 分机呼分机 /// /// [HttpPost("ExtensionToExtension")] public async Task ExtensionToExtension(string fromextid, string toextid) { var result = await _client.ExtensionToExtension(new ExtensionToExtensionRequest() { Attribute = "Connect", Exts = new List() { new ExtToExtExt() { Id = fromextid }, new ExtToExtExt() { Id = toextid } } }, _options.Value.NewRock.ReceiveKey, _options.Value.NewRock.Expired, HttpContext.RequestAborted); _logger.LogInformation(System.Text.Json.JsonSerializer.Serialize(result)); } /// /// 分机呼外部电话 /// /// [HttpPost("ExtToOuter")] public async Task ExtToOuter(string fromextid, string to) { var result = await _client.ExtToOuter(new ExtToOuterRequest() { Attribute = "Connect", Ext = new ExtToOuterExtRequest() { Id = fromextid }, Outer = new ExtToOuterOuterRequest() { To = to } }, _options.Value.NewRock.ReceiveKey, _options.Value.NewRock.Expired, HttpContext.RequestAborted); } /// /// 来电转分机 /// /// [HttpPost("VisitorToExt")] public async Task VisitorToExt(string visid, string toextid) { var result = await _client.VisitorToExt(new VisitorToExtRequest() { Attribute = "Connect", Visitor = new VisitorToExtVisitor() { Id = visid }, Ext = new VisitorToExtExt() { Id = toextid } }, _options.Value.NewRock.ReceiveKey, _options.Value.NewRock.Expired, HttpContext.RequestAborted); } /// /// 来电转外部电话 /// /// /// /// /// [HttpPost("VisitorToOuter")] public async Task VisitorToOuter(string visid, string outerphonenum, string display = "") { var result = await _client.VisitorToOuter(new VisitorToOuterRequest() { Attribute = "Connect", Visitor = new VisitorToOuterVisitor() { Id = visid }, Outer = new VisitorToOuterOuter() { To = outerphonenum, Display = display }, }, _options.Value.NewRock.ReceiveKey, _options.Value.NewRock.Expired, HttpContext.RequestAborted); } /// /// 来电转语音菜单 /// /// /// /// [HttpPost("VisitorToMenu")] public async Task VisitorToMenu(string visid, string menuid) { var result = await _client.VisitorToMenu(new VisitorToMenuRequest() { Attribute = "Connect", Visitor = new VisitorToMenuVisitor() { Id = visid }, Menu = new VisitorToMenuMenu() { Id = menuid } }, _options.Value.NewRock.ReceiveKey, _options.Value.NewRock.Expired, HttpContext.RequestAborted); } /// /// 去电转分机 /// /// /// /// [HttpPost("OuterToExt")] public async Task OuterToExt(string outer, string extid) { var result = await _client.OuterToExt(new OuterToExtRequest() { Attribute = "Connect", Outer = new OuterToExtOuter() { Id = outer }, Ext = new OuterToExtExt() { Id = extid } }, _options.Value.NewRock.ReceiveKey, _options.Value.NewRock.Expired, HttpContext.RequestAborted); } /// /// 去电转外部电话 /// /// /// /// [HttpPost("OuterToOuter")] public async Task OuterToOuter(string outerid, string outerphonenum) { var result = await _client.OuterToOuter(new OuterToOuterRequest() { Attribute = "Connect", Outer = new List() { new OuterToOuterOuterModel() { Id = outerid }, new OuterToOuterOuterModel() { To = outerphonenum } }, }, _options.Value.NewRock.ReceiveKey, _options.Value.NewRock.Expired, HttpContext.RequestAborted); } /// /// 去电转语音菜单 /// /// /// /// [HttpPost("OuterToMenu")] public async Task OuterToMenu(string outerid, string menuid) { var result = await _client.OuterToMenu(new OuterToMenuRequest() { Attribute = "Connect", Outer = new OuterToMenuOuter() { Id = outerid }, Menu = new OuterToMenuMenu() { Id = menuid } }, _options.Value.NewRock.ReceiveKey, _options.Value.NewRock.Expired, HttpContext.RequestAborted); } /// /// 语音菜单呼分机 /// /// /// /// [HttpPost("MenuToExt")] public async Task MenuToExt(string menuid, string extid) { var result = await _client.MenuToExt(new MenuToExtRequest() { Attribute = "Connect", Menu = new MenuToExtMenu() { Id = menuid }, Ext = new MenuToExtExt() { Id = extid } }, _options.Value.NewRock.ReceiveKey, _options.Value.NewRock.Expired, HttpContext.RequestAborted); } /// /// 语音菜单呼外部电话 /// /// /// /// [HttpPost("MenuToOuter")] public async Task MenuToOuter(string menuid, string outernum) { var result = await _client.MenuToOuter(new MenuToOuterRequest() { Attribute = "Connect", Menu = new MenuToOuterMenu() { Id = menuid }, Outer = new MenuToOuterOuter() { To = outernum } }, _options.Value.NewRock.ReceiveKey, _options.Value.NewRock.Expired, HttpContext.RequestAborted); } /// /// 双向呼叫(回拨) /// /// /// /// [HttpPost("TwoWayOuter")] public async Task TwoWayOuter(string outerone, string outertwo) { var result = await _client.TwoWayOuter(new TwoWayOuterRequest() { Attribute = "Connect", Outer = new List() { new TwoWayOuterOuter(){ To = outerone}, new TwoWayOuterOuter(){ To = outertwo} } }, _options.Value.NewRock.ReceiveKey, _options.Value.NewRock.Expired, HttpContext.RequestAborted); } /// /// 语音插播(分机) /// /// /// /// [HttpPost("VoiceNewsFlash")] public async Task VoiceNewsFlashExt(string voicefile, string extid) { var model = new VoiceNewsFlashRequest { Attribute = "Connect", VoiceFile = voicefile, Ext = new VoiceNewsFlashExt() { Id = extid } }; var result = await _client.VoiceNewsFlash(model, _options.Value.NewRock.ReceiveKey, _options.Value.NewRock.Expired, HttpContext.RequestAborted); } /// /// 语音插播(来电) /// /// /// /// [HttpPost("VoiceNewsFlashVisitor")] public async Task VoiceNewsFlashVisitor(string voicefile, string visiitorid) { var model = new VoiceNewsFlashRequest { Attribute = "Connect", VoiceFile = voicefile, Visitor = new VoiceNewsFlashVisitor() { Id = visiitorid } }; var result = await _client.VoiceNewsFlash(model, _options.Value.NewRock.ReceiveKey, _options.Value.NewRock.Expired, HttpContext.RequestAborted); } /// /// 语音插播(去电) /// /// /// /// [HttpPost("VoiceNewsFlashOuter")] public async Task VoiceNewsFlashOuter(string voicefile, string outerid) { var model = new VoiceNewsFlashRequest { Attribute = "Connect", VoiceFile = voicefile, Outer = new VoiceNewsFlashOuter() { Id = outerid } }; var result = await _client.VoiceNewsFlash(model, _options.Value.NewRock.ReceiveKey, _options.Value.NewRock.Expired, HttpContext.RequestAborted); } #endregion #region 会议(Conference) /// /// 会议 /// /// /// [HttpPost("ConferenceMeeting")] public async Task ConferenceMeeting(string extid) { var result = await _client.ConferenceMeeting(new ConferenceMeetingRequest() { Attribute = "Conference", Ext = new ConferenceMeetingExt() { Id = extid } }, _options.Value.NewRock.ReceiveKey, _options.Value.NewRock.Expired, HttpContext.RequestAborted); } #endregion #region 队列(Queue) /// /// 来电转分机队列 /// /// /// /// [HttpPost("VisitorToExtQueue")] public async Task VisitorToExtQueue(string visitorid, string extid) { var result = await _client.VisitorToExtQueue(new VisitorToExtQueueRequest() { Attribute = "Queue", Visitor = new VisitorToExtQueueVisitor() { Id = visitorid }, Ext = new VisitorToExtQueueExt() { Id = extid } }, _options.Value.NewRock.ReceiveKey, _options.Value.NewRock.Expired, HttpContext.RequestAborted); } /// ///来电转分机组队列 /// /// /// /// [HttpPost("VisitorToGroupQueue")] public async Task VisitorToGroupQueue(string visitorid, string groupid) { var result = await _client.VisitorToGroupQueue(new VisitorToGroupQueueRequest() { Attribute = "Queue", Visitor = new VisitorToGroupQueueVisitor() { Id = visitorid }, Group = new VisitorToGroupQueueGroup() { Id = groupid } }, _options.Value.NewRock.ReceiveKey, _options.Value.NewRock.Expired, HttpContext.RequestAborted); } #endregion #endregion #region 语音管理命令 /// /// 查询语音文件 /// /// [HttpGet("VoiceQueryList")] public async Task VoiceQueryList() { var result = await _client.VoiceQueryList(new VoiceQueryListRequest() { Attribute = "Query", VoiceFile = "" }, _options.Value.NewRock.ReceiveKey, _options.Value.NewRock.Expired, HttpContext.RequestAborted); _logger.LogInformation(System.Text.Json.JsonSerializer.Serialize(result)); } /// /// 删除语音文件 /// /// /// [HttpPost("RemoveVoiceFile")] public async Task RemoveVoiceFile(string voiceFile) { await _client.RemoveVoiceFile(new RemoveVoiceFileRequest() { Attribute = "Remove", VoiceFile = voiceFile }, _options.Value.NewRock.ReceiveKey, _options.Value.NewRock.Expired, HttpContext.RequestAborted); } #endregion #region 监听和强插 /// /// 监听分机 /// /// /// /// [HttpPost("MonitorExt")] public async Task MonitorExt(string firstTelNo,string secondTelNo) { await _client.MonitorExt(new MonitorExtRequest() { Attribute = "Monitor", Exts = new List() { new Ext() { Id = firstTelNo }, new Ext() { Id = secondTelNo } } }, _options.Value.NewRock.ReceiveKey, _options.Value.NewRock.Expired, HttpContext.RequestAborted) ; } /// /// 从监听到插播状态变换 /// 1. 已知:分机 A 在监听分机 B 与其通话方的通话; /// 2. 执行分机 A 的从监听到插播状态变换的 API; /// 3. 执行成功时,分机 A 与分机 B 建立通话,分机 B 的原通话方听保持音。 /// /// /// [HttpPost("MonitorExtToTalk")] public async Task MonitorExtToTalk(string telNo) { await _client.MonitorExtToTalk(new MonitorExtToTalkRequest() { Attribute = "Talk", Ext = new Ext() { Id=telNo } }, _options.Value.NewRock.ReceiveKey, _options.Value.NewRock.Expired, HttpContext.RequestAborted); } /// /// 从插播到监听状态变换 /// 1. 已知:分机 A 在插播分机 B 的通话; /// 2. 执行分机 A 的从插播到监听状态变换的 API; /// 3. 执行成功时,分机 A 监听分机 B 及其原通话方的通话。 /// /// /// [HttpPost("MonitorExtToListen")] public async Task MonitorExtToListen(string telNo) { await _client.MonitorExtToListen(new MonitorExtToListenRequest() { Attribute = "Listen", Ext = new Ext() { Id = telNo } }, _options.Value.NewRock.ReceiveKey, _options.Value.NewRock.Expired, HttpContext.RequestAborted); } #endregion #region 强插 /// /// 强插 /// 1. 已知:分机 A 当前空闲,分机 B 正在通话中; /// 2. 执行分机 A 强插分机 B 的 API; /// 3. 执行成功时,分机 A 振铃,摘机后即可形成三方通话。 /// /// /// /// [HttpPost("BargeinExt")] public async Task BargeinExt(string firstTelNo,string secondTelNo) { await _client.BargeinExt(new BargeinExtRequest() { Attribute = "BargeinExt", Exts = new List() { new Ext() { Id=firstTelNo },new Ext() { Id=secondTelNo } } }, _options.Value.NewRock.ReceiveKey, _options.Value.NewRock.Expired, HttpContext.RequestAborted); } #endregion } }