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
}
}