TestSdkController.cs 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882
  1. using Hotline.CallCenter.Configs;
  2. using Microsoft.AspNetCore.Authorization;
  3. using Microsoft.AspNetCore.Mvc;
  4. using Microsoft.Extensions.Options;
  5. using NewRock.Sdk;
  6. using NewRock.Sdk.Control.Request;
  7. using NewRock.Sdk.Control.Response;
  8. using NewRock.Sdk.Manage.Request;
  9. using NewRock.Sdk.Manage.Response;
  10. using NewRock.Sdk.Transfer.Conference.Request;
  11. using NewRock.Sdk.Transfer.Connect.Request;
  12. using NewRock.Sdk.Transfer.Queue.Request;
  13. using Ext = NewRock.Sdk.Control.Request.Base.Ext;
  14. using Group = NewRock.Sdk.Control.Request.Group;
  15. using VisitorToExtVisitor = NewRock.Sdk.Transfer.Connect.Request.VisitorToExtVisitor;
  16. namespace Hotline.Api.Controllers
  17. {
  18. /// <summary>
  19. /// 设备测试专用,外部禁止调用
  20. /// </summary>
  21. [AllowAnonymous]
  22. public class TestSdkController : BaseController
  23. {
  24. private readonly INewRockClient _client;
  25. private readonly ILogger<TestController> _logger;
  26. private readonly IOptionsSnapshot<CallCenterConfiguration> _options;
  27. public TestSdkController(
  28. INewRockClient client,
  29. ILogger<TestController> logger,
  30. IOptionsSnapshot<CallCenterConfiguration> options
  31. )
  32. {
  33. _client = client;
  34. _logger = logger;
  35. _options = options;
  36. }
  37. #region 查询(Query)
  38. /// <summary>
  39. /// 查询设备
  40. /// </summary>
  41. /// <returns></returns>
  42. [HttpGet("QueryDeviceInfo")]
  43. public async Task QueryDeviceInfo()
  44. {
  45. var result = await _client.QueryDeviceInfo(
  46. new QueryDeviceInfoRequest { Attribute = "Query", DeviceInfo = string.Empty },
  47. _options.Value.NewRock.ReceiveKey,
  48. _options.Value.NewRock.Expired,
  49. HttpContext.RequestAborted);
  50. _logger.LogInformation(System.Text.Json.JsonSerializer.Serialize<QueryDeviceInfoResponse?>(result));
  51. }
  52. /// <summary>
  53. /// 查询分机
  54. /// </summary>
  55. /// <returns></returns>
  56. [HttpPost("QueryExt")]
  57. public async Task QueryExt(string extid)
  58. {
  59. var result = await _client.QueryExt(
  60. new QueryExtRequest() { Attribute = "Query", Ext = new Ext() { Id = extid } },
  61. _options.Value.NewRock.ReceiveKey,
  62. _options.Value.NewRock.Expired,
  63. HttpContext.RequestAborted
  64. );
  65. _logger.LogInformation(System.Text.Json.JsonSerializer.Serialize<QueryExtResponse?>(result));
  66. }
  67. /// <summary>
  68. /// 查询分机组
  69. /// </summary>
  70. /// <param name="groupid"></param>
  71. /// <returns></returns>
  72. [HttpPost("QueryExtGroup")]
  73. public async Task QueryExtGroup(string? groupid)
  74. {
  75. var result = await _client.QueryExtGroup(new QueryExtGroupRequest()
  76. {
  77. Attribute = "Query",
  78. Group = new QueryExtGroup() { Id = groupid }
  79. }, _options.Value.NewRock.ReceiveKey,
  80. _options.Value.NewRock.Expired,
  81. HttpContext.RequestAborted);
  82. _logger.LogInformation(System.Text.Json.JsonSerializer.Serialize<QueryExtGroupResponse?>(result));
  83. }
  84. /// <summary>
  85. /// 查询语音菜单
  86. /// </summary>
  87. /// <param name="menuid"></param>
  88. /// <returns></returns>
  89. [HttpPost("QueryMenu")]
  90. public async Task QueryMenu(string menuid)
  91. {
  92. var result = await _client.QueryMenu(new QueryMenuRequest()
  93. {
  94. Attribute = "Query",
  95. Menu = new QueryMenuMenu() { Id = menuid }
  96. }, _options.Value.NewRock.ReceiveKey,
  97. _options.Value.NewRock.Expired,
  98. HttpContext.RequestAborted);
  99. _logger.LogInformation(System.Text.Json.JsonSerializer.Serialize<QueryMenuResponse?>(result));
  100. }
  101. /// <summary>
  102. /// 查询中继
  103. /// </summary>
  104. /// <param name="trunkid"></param>
  105. /// <returns></returns>
  106. [HttpPost("QueryTrunk")]
  107. public async Task QueryTrunk(string trunkid)
  108. {
  109. var result = await _client.QueryTrunk(new QueryTrunkRequest()
  110. {
  111. Attribute = "Query",
  112. Trunk = new QueryTrunkTrunk() { Id = trunkid }
  113. },
  114. _options.Value.NewRock.ReceiveKey,
  115. _options.Value.NewRock.Expired,
  116. HttpContext.RequestAborted);
  117. _logger.LogInformation(System.Text.Json.JsonSerializer.Serialize<QueryTrunkResponse?>(result));
  118. }
  119. /// <summary>
  120. /// 查询来电
  121. /// </summary>
  122. /// <param name="visitorid"></param>
  123. /// <returns></returns>
  124. [HttpPost("QueryVisitor")]
  125. public async Task QueryVisitor(string visitorid)
  126. {
  127. var result = await _client.QueryVisitor(new QueryVisitorRequest()
  128. {
  129. Attribute = "Query",
  130. Visitor = new QueryVisitorVisitor() { Id = visitorid }
  131. }, _options.Value.NewRock.ReceiveKey,
  132. _options.Value.NewRock.Expired,
  133. HttpContext.RequestAborted);
  134. _logger.LogInformation(System.Text.Json.JsonSerializer.Serialize<QueryVisitorResponse?>(result));
  135. }
  136. /// <summary>
  137. /// 查询去电
  138. /// </summary>
  139. /// <param name="outerid"></param>
  140. /// <returns></returns>
  141. [HttpPost("QueryOuter")]
  142. public async Task QueryOuter(string outerid)
  143. {
  144. var result = await _client.QueryOuter(new QueryOuterRequest()
  145. {
  146. Attribute = "Query",
  147. Outer = new QueryOuterOuter() { Id = outerid }
  148. },
  149. _options.Value.NewRock.ReceiveKey,
  150. _options.Value.NewRock.Expired,
  151. HttpContext.RequestAborted);
  152. _logger.LogInformation(System.Text.Json.JsonSerializer.Serialize<QueryOuterResponse?>(result));
  153. }
  154. #endregion
  155. #region 强拆
  156. /// <summary>
  157. /// 强拆分机
  158. /// </summary>
  159. /// <param name="extid"></param>
  160. /// <returns></returns>
  161. [HttpPost("ClearExt")]
  162. public async Task ClearExt(string extid)
  163. {
  164. var result = await _client.ClearCall(new ClearCallRequest()
  165. {
  166. Attribute = "Clear",
  167. Ext = new Ext()
  168. {
  169. Id = extid
  170. },
  171. }, _options.Value.NewRock.ReceiveKey,
  172. _options.Value.NewRock.Expired,
  173. HttpContext.RequestAborted);
  174. }
  175. /// <summary>
  176. /// 强拆来电
  177. /// </summary>
  178. /// <param name="visitorId"></param>
  179. /// <returns></returns>
  180. [HttpPost("ClearVisitor")]
  181. public async Task ClearVisitor(string visitorId)
  182. {
  183. var result = await _client.ClearCall(new ClearCallRequest()
  184. {
  185. Attribute = "Clear",
  186. Visitor = new ClearCallVisitor()
  187. {
  188. Id = visitorId
  189. }
  190. }, _options.Value.NewRock.ReceiveKey,
  191. _options.Value.NewRock.Expired,
  192. HttpContext.RequestAborted);
  193. }
  194. /// <summary>
  195. /// 强拆去电
  196. /// </summary>
  197. /// <param name="outerId"></param>
  198. /// <returns></returns>
  199. [HttpPost("ClearOuter")]
  200. public async Task ClearOuter(string outerId)
  201. {
  202. var result = await _client.ClearCall(new ClearCallRequest()
  203. {
  204. Attribute = "Clear",
  205. Outer = new ClearCallOuter()
  206. {
  207. Id = outerId
  208. }
  209. }, _options.Value.NewRock.ReceiveKey,
  210. _options.Value.NewRock.Expired,
  211. HttpContext.RequestAborted);
  212. }
  213. #endregion
  214. #region 配置(Assign)
  215. /// <summary>
  216. /// 配置分机
  217. /// </summary>
  218. /// <returns></returns>
  219. [HttpGet("ConfigExt")]
  220. public async Task ConfigExt()
  221. {
  222. var result = await _client.ConfigExt(new AssginConfigExtRequest()
  223. {
  224. Attribute = "Assign",
  225. Ext = new ConfigExt()
  226. {
  227. Lineid = "IPPhone 21",
  228. Id = "212",
  229. //Staffid = "038",
  230. Groups = new List<string>()
  231. {
  232. "1",
  233. "2",
  234. },
  235. //VoiceFile = "user_tts164815.dat",
  236. //Call_Restriction = "2",
  237. //Call_Pickup ="no",
  238. No_Disturb = "on",
  239. Fwd_Type = "0",
  240. //Record="on",
  241. Api = "7"
  242. }
  243. },
  244. _options.Value.NewRock.ReceiveKey,
  245. _options.Value.NewRock.Expired,
  246. HttpContext.RequestAborted);
  247. _logger.LogInformation(System.Text.Json.JsonSerializer.Serialize<AssginConfigExtResponse?>(result));
  248. }
  249. /// <summary>
  250. /// 配置分机组
  251. /// </summary>
  252. /// <returns></returns>
  253. [HttpGet("ConfigExtGroup")]
  254. public async Task ConfigExtGroup()
  255. {
  256. var result = await _client.ConfigExtGroup(new AssginConfigGroupRequest()
  257. {
  258. Attribute = "Assign",
  259. Group = new Group()
  260. {
  261. Id = "1",
  262. Voicefile = "NewMorning",
  263. Distribution = "sequential",
  264. Ext = new List<string>()
  265. {
  266. "209",
  267. "210"
  268. }
  269. }
  270. }, _options.Value.NewRock.ReceiveKey,
  271. _options.Value.NewRock.Expired,
  272. HttpContext.RequestAborted);
  273. _logger.LogInformation(System.Text.Json.JsonSerializer.Serialize<AssginConfigGroupResponse?>(result));
  274. }
  275. /// <summary>
  276. /// 配置语音菜单
  277. /// </summary>
  278. /// <returns></returns>
  279. [HttpGet("ConfigMenu")]
  280. public async Task ConfigMenu()
  281. {
  282. var result = await _client.ConfigMenu(new AssginConfigMenuRequest()
  283. {
  284. Attribute = "Assign",
  285. Menu = new AssginConfigMenuMenu()
  286. {
  287. Id = "1",
  288. VoiceFile = "user_tts131742",
  289. Exit = "#",
  290. Repeat = "3",
  291. InfoLength = "5",
  292. }
  293. }, _options.Value.NewRock.ReceiveKey,
  294. _options.Value.NewRock.Expired,
  295. HttpContext.RequestAborted);
  296. }
  297. #endregion
  298. #region 呼叫保持和接回
  299. /// <summary>
  300. /// 呼叫保持
  301. /// </summary>
  302. /// <returns></returns>
  303. [HttpPost("Hold")]
  304. public async Task Hold(string extid)
  305. {
  306. var result = await _client.HoldOrUnHold(new HoldSetRequest()
  307. {
  308. Attribute = "Hold",
  309. Ext = new Ext() { Id = extid }
  310. }, _options.Value.NewRock.ReceiveKey,
  311. _options.Value.NewRock.Expired,
  312. HttpContext.RequestAborted);
  313. //_logger.LogInformation(result.Manufacturer);
  314. }
  315. /// <summary>
  316. /// 呼叫接回
  317. /// </summary>
  318. /// <returns></returns>
  319. [HttpPost("UnHold")]
  320. public async Task UnHold(string extid)
  321. {
  322. var result = await _client.HoldOrUnHold(new HoldSetRequest()
  323. {
  324. Attribute = "Unhold",
  325. Ext = new Ext() { Id = extid }
  326. }, _options.Value.NewRock.ReceiveKey,
  327. _options.Value.NewRock.Expired,
  328. HttpContext.RequestAborted);
  329. }
  330. #endregion
  331. #region 静音开启与解除
  332. /// <summary>
  333. /// 静音
  334. /// </summary>
  335. /// <param name="extid"></param>
  336. /// <returns></returns>
  337. [HttpPost("Mute")]
  338. public async Task Mute(string extid)
  339. {
  340. var result = await _client.MuteOrUnMute(new MuteSetRequest
  341. {
  342. Attribute = "Mute",
  343. Ext = new Ext() { Id = extid }
  344. }, _options.Value.NewRock.ReceiveKey,
  345. _options.Value.NewRock.Expired,
  346. HttpContext.RequestAborted);
  347. }
  348. /// <summary>
  349. /// 解除静音
  350. /// </summary>
  351. /// <param name="extid"></param>
  352. /// <returns></returns>
  353. [HttpPost("UnMute")]
  354. public async Task UnMute(string extid)
  355. {
  356. var result = await _client.MuteOrUnMute(new MuteSetRequest
  357. {
  358. Attribute = "Unmute",
  359. Ext = new Ext() { Id = extid }
  360. }, _options.Value.NewRock.ReceiveKey,
  361. _options.Value.NewRock.Expired,
  362. HttpContext.RequestAborted);
  363. }
  364. #endregion
  365. #region 呼叫转接命令(Transfer)
  366. #region 连接(Connect)
  367. /// <summary>
  368. /// 分机呼分机
  369. /// </summary>
  370. /// <returns></returns>
  371. [HttpPost("ExtensionToExtension")]
  372. public async Task ExtensionToExtension(string fromextid, string toextid)
  373. {
  374. var result = await _client.ExtensionToExtension(new ExtensionToExtensionRequest()
  375. {
  376. Attribute = "Connect",
  377. Exts = new List<ExtToExtExt>()
  378. {
  379. new ExtToExtExt() { Id = fromextid },
  380. new ExtToExtExt() { Id = toextid }
  381. }
  382. }, _options.Value.NewRock.ReceiveKey,
  383. _options.Value.NewRock.Expired,
  384. HttpContext.RequestAborted);
  385. _logger.LogInformation(System.Text.Json.JsonSerializer.Serialize(result));
  386. }
  387. /// <summary>
  388. /// 分机呼外部电话
  389. /// </summary>
  390. /// <returns></returns>
  391. [HttpPost("ExtToOuter")]
  392. public async Task ExtToOuter(string fromextid, string to)
  393. {
  394. var result = await _client.ExtToOuter(new ExtToOuterRequest()
  395. {
  396. Attribute = "Connect",
  397. Ext = new ExtToOuterExtRequest() { Id = fromextid },
  398. Outer = new ExtToOuterOuterRequest() { To = to }
  399. },
  400. _options.Value.NewRock.ReceiveKey,
  401. _options.Value.NewRock.Expired,
  402. HttpContext.RequestAborted);
  403. }
  404. /// <summary>
  405. /// 来电转分机
  406. /// </summary>
  407. /// <returns></returns>
  408. [HttpPost("VisitorToExt")]
  409. public async Task VisitorToExt(string visid, string toextid)
  410. {
  411. var result = await _client.VisitorToExt(new VisitorToExtRequest()
  412. {
  413. Attribute = "Connect",
  414. Visitor = new VisitorToExtVisitor() { Id = visid },
  415. Ext = new VisitorToExtExt() { Id = toextid }
  416. }, _options.Value.NewRock.ReceiveKey,
  417. _options.Value.NewRock.Expired,
  418. HttpContext.RequestAborted);
  419. }
  420. /// <summary>
  421. /// 来电转外部电话
  422. /// </summary>
  423. /// <param name="visid"></param>
  424. /// <param name="outerphonenum"></param>
  425. /// <param name="display"></param>
  426. /// <returns></returns>
  427. [HttpPost("VisitorToOuter")]
  428. public async Task VisitorToOuter(string visid, string outerphonenum, string display = "")
  429. {
  430. var result = await _client.VisitorToOuter(new VisitorToOuterRequest()
  431. {
  432. Attribute = "Connect",
  433. Visitor = new VisitorToOuterVisitor() { Id = visid },
  434. Outer = new VisitorToOuterOuter() { To = outerphonenum, Display = display },
  435. }, _options.Value.NewRock.ReceiveKey,
  436. _options.Value.NewRock.Expired,
  437. HttpContext.RequestAborted);
  438. }
  439. /// <summary>
  440. /// 来电转语音菜单
  441. /// </summary>
  442. /// <param name="visid"></param>
  443. /// <param name="menuid"></param>
  444. /// <returns></returns>
  445. [HttpPost("VisitorToMenu")]
  446. public async Task VisitorToMenu(string visid, string menuid)
  447. {
  448. var result = await _client.VisitorToMenu(new VisitorToMenuRequest()
  449. {
  450. Attribute = "Connect",
  451. Visitor = new VisitorToMenuVisitor() { Id = visid },
  452. Menu = new VisitorToMenuMenu() { Id = menuid }
  453. }, _options.Value.NewRock.ReceiveKey,
  454. _options.Value.NewRock.Expired,
  455. HttpContext.RequestAborted);
  456. }
  457. /// <summary>
  458. /// 去电转分机
  459. /// </summary>
  460. /// <param name="outer"></param>
  461. /// <param name="extid"></param>
  462. /// <returns></returns>
  463. [HttpPost("OuterToExt")]
  464. public async Task OuterToExt(string outer, string extid)
  465. {
  466. var result = await _client.OuterToExt(new OuterToExtRequest()
  467. {
  468. Attribute = "Connect",
  469. Outer = new OuterToExtOuter() { Id = outer },
  470. Ext = new OuterToExtExt() { Id = extid }
  471. },
  472. _options.Value.NewRock.ReceiveKey,
  473. _options.Value.NewRock.Expired,
  474. HttpContext.RequestAborted);
  475. }
  476. /// <summary>
  477. /// 去电转外部电话
  478. /// </summary>
  479. /// <param name="outerid"></param>
  480. /// <param name="outerphonenum"></param>
  481. /// <returns></returns>
  482. [HttpPost("OuterToOuter")]
  483. public async Task OuterToOuter(string outerid, string outerphonenum)
  484. {
  485. var result = await _client.OuterToOuter(new OuterToOuterRequest()
  486. {
  487. Attribute = "Connect",
  488. Outer = new List<OuterToOuterOuterModel>() { new OuterToOuterOuterModel() { Id = outerid }, new OuterToOuterOuterModel() { To = outerphonenum } },
  489. }, _options.Value.NewRock.ReceiveKey,
  490. _options.Value.NewRock.Expired,
  491. HttpContext.RequestAborted);
  492. }
  493. /// <summary>
  494. /// 去电转语音菜单
  495. /// </summary>
  496. /// <param name="outerid"></param>
  497. /// <param name="menuid"></param>
  498. /// <returns></returns>
  499. [HttpPost("OuterToMenu")]
  500. public async Task OuterToMenu(string outerid, string menuid)
  501. {
  502. var result = await _client.OuterToMenu(new OuterToMenuRequest()
  503. {
  504. Attribute = "Connect",
  505. Outer = new OuterToMenuOuter() { Id = outerid },
  506. Menu = new OuterToMenuMenu() { Id = menuid }
  507. }, _options.Value.NewRock.ReceiveKey,
  508. _options.Value.NewRock.Expired,
  509. HttpContext.RequestAborted);
  510. }
  511. /// <summary>
  512. /// 语音菜单呼分机
  513. /// </summary>
  514. /// <param name="menuid"></param>
  515. /// <param name="extid"></param>
  516. /// <returns></returns>
  517. [HttpPost("MenuToExt")]
  518. public async Task MenuToExt(string menuid, string extid)
  519. {
  520. var result = await _client.MenuToExt(new MenuToExtRequest()
  521. {
  522. Attribute = "Connect",
  523. Menu = new MenuToExtMenu() { Id = menuid },
  524. Ext = new MenuToExtExt() { Id = extid }
  525. }, _options.Value.NewRock.ReceiveKey,
  526. _options.Value.NewRock.Expired,
  527. HttpContext.RequestAborted);
  528. }
  529. /// <summary>
  530. /// 语音菜单呼外部电话
  531. /// </summary>
  532. /// <param name="menuid"></param>
  533. /// <param name="outernum"></param>
  534. /// <returns></returns>
  535. [HttpPost("MenuToOuter")]
  536. public async Task MenuToOuter(string menuid, string outernum)
  537. {
  538. var result = await _client.MenuToOuter(new MenuToOuterRequest()
  539. {
  540. Attribute = "Connect",
  541. Menu = new MenuToOuterMenu() { Id = menuid },
  542. Outer = new MenuToOuterOuter() { To = outernum }
  543. }, _options.Value.NewRock.ReceiveKey,
  544. _options.Value.NewRock.Expired,
  545. HttpContext.RequestAborted);
  546. }
  547. /// <summary>
  548. /// 双向呼叫(回拨)
  549. /// </summary>
  550. /// <param name="outerone"></param>
  551. /// <param name="outertwo"></param>
  552. /// <returns></returns>
  553. [HttpPost("TwoWayOuter")]
  554. public async Task TwoWayOuter(string outerone, string outertwo)
  555. {
  556. var result = await _client.TwoWayOuter(new TwoWayOuterRequest()
  557. {
  558. Attribute = "Connect",
  559. Outer = new List<TwoWayOuterOuter>()
  560. {
  561. new TwoWayOuterOuter(){ To = outerone},
  562. new TwoWayOuterOuter(){ To = outertwo}
  563. }
  564. }, _options.Value.NewRock.ReceiveKey,
  565. _options.Value.NewRock.Expired,
  566. HttpContext.RequestAborted);
  567. }
  568. /// <summary>
  569. /// 语音插播(分机)
  570. /// </summary>
  571. /// <param name="extid"></param>
  572. /// <param name="voicefile"></param>
  573. /// <returns></returns>
  574. [HttpPost("VoiceNewsFlash")]
  575. public async Task VoiceNewsFlashExt(string voicefile, string extid)
  576. {
  577. var model = new VoiceNewsFlashRequest
  578. {
  579. Attribute = "Connect",
  580. VoiceFile = voicefile,
  581. Ext = new VoiceNewsFlashExt() { Id = extid }
  582. };
  583. var result = await _client.VoiceNewsFlash(model, _options.Value.NewRock.ReceiveKey,
  584. _options.Value.NewRock.Expired,
  585. HttpContext.RequestAborted);
  586. }
  587. /// <summary>
  588. /// 语音插播(来电)
  589. /// </summary>
  590. /// <param name="voicefile"></param>
  591. /// <param name="visiitorid"></param>
  592. /// <returns></returns>
  593. [HttpPost("VoiceNewsFlashVisitor")]
  594. public async Task VoiceNewsFlashVisitor(string voicefile, string visiitorid)
  595. {
  596. var model = new VoiceNewsFlashRequest
  597. {
  598. Attribute = "Connect",
  599. VoiceFile = voicefile,
  600. Visitor = new VoiceNewsFlashVisitor() { Id = visiitorid }
  601. };
  602. var result = await _client.VoiceNewsFlash(model, _options.Value.NewRock.ReceiveKey,
  603. _options.Value.NewRock.Expired,
  604. HttpContext.RequestAborted);
  605. }
  606. /// <summary>
  607. /// 语音插播(去电)
  608. /// </summary>
  609. /// <param name="voicefile"></param>
  610. /// <param name="outerid"></param>
  611. /// <returns></returns>
  612. [HttpPost("VoiceNewsFlashOuter")]
  613. public async Task VoiceNewsFlashOuter(string voicefile, string outerid)
  614. {
  615. var model = new VoiceNewsFlashRequest
  616. {
  617. Attribute = "Connect",
  618. VoiceFile = voicefile,
  619. Outer = new VoiceNewsFlashOuter() { Id = outerid }
  620. };
  621. var result = await _client.VoiceNewsFlash(model, _options.Value.NewRock.ReceiveKey,
  622. _options.Value.NewRock.Expired,
  623. HttpContext.RequestAborted);
  624. }
  625. #endregion
  626. #region 会议(Conference)
  627. /// <summary>
  628. /// 会议
  629. /// </summary>
  630. /// <param name="extid"></param>
  631. /// <returns></returns>
  632. [HttpPost("ConferenceMeeting")]
  633. public async Task ConferenceMeeting(string extid)
  634. {
  635. var result = await _client.ConferenceMeeting(new ConferenceMeetingRequest()
  636. {
  637. Attribute = "Conference",
  638. Ext = new ConferenceMeetingExt() { Id = extid }
  639. }, _options.Value.NewRock.ReceiveKey,
  640. _options.Value.NewRock.Expired,
  641. HttpContext.RequestAborted);
  642. }
  643. #endregion
  644. #region 队列(Queue)
  645. /// <summary>
  646. /// 来电转分机队列
  647. /// </summary>
  648. /// <param name="visitorid"></param>
  649. /// <param name="extid"></param>
  650. /// <returns></returns>
  651. [HttpPost("VisitorToExtQueue")]
  652. public async Task VisitorToExtQueue(string visitorid, string extid)
  653. {
  654. var result = await _client.VisitorToExtQueue(new VisitorToExtQueueRequest()
  655. {
  656. Attribute = "Queue",
  657. Visitor = new VisitorToExtQueueVisitor() { Id = visitorid },
  658. Ext = new VisitorToExtQueueExt() { Id = extid }
  659. }, _options.Value.NewRock.ReceiveKey,
  660. _options.Value.NewRock.Expired,
  661. HttpContext.RequestAborted);
  662. }
  663. /// <summary>
  664. ///来电转分机组队列
  665. /// </summary>
  666. /// <param name="visitorid"></param>
  667. /// <param name="groupid"></param>
  668. /// <returns></returns>
  669. [HttpPost("VisitorToGroupQueue")]
  670. public async Task VisitorToGroupQueue(string visitorid, string groupid)
  671. {
  672. var result = await _client.VisitorToGroupQueue(new VisitorToGroupQueueRequest()
  673. {
  674. Attribute = "Queue",
  675. Visitor = new VisitorToGroupQueueVisitor() { Id = visitorid },
  676. Group = new VisitorToGroupQueueGroup() { Id = groupid }
  677. },
  678. _options.Value.NewRock.ReceiveKey,
  679. _options.Value.NewRock.Expired,
  680. HttpContext.RequestAborted);
  681. }
  682. #endregion
  683. #endregion
  684. #region 语音管理命令
  685. /// <summary>
  686. /// 查询语音文件
  687. /// </summary>
  688. /// <returns></returns>
  689. [HttpGet("VoiceQueryList")]
  690. public async Task VoiceQueryList()
  691. {
  692. var result = await _client.VoiceQueryList(new VoiceQueryListRequest()
  693. {
  694. Attribute = "Query",
  695. VoiceFile = ""
  696. }, _options.Value.NewRock.ReceiveKey,
  697. _options.Value.NewRock.Expired,
  698. HttpContext.RequestAborted);
  699. _logger.LogInformation(System.Text.Json.JsonSerializer.Serialize<VoiceQueryListResponse?>(result));
  700. }
  701. /// <summary>
  702. /// 删除语音文件
  703. /// </summary>
  704. /// <param name="voiceFile"></param>
  705. /// <returns></returns>
  706. [HttpPost("RemoveVoiceFile")]
  707. public async Task RemoveVoiceFile(string voiceFile)
  708. {
  709. await _client.RemoveVoiceFile(new RemoveVoiceFileRequest()
  710. {
  711. Attribute = "Remove",
  712. VoiceFile = voiceFile
  713. }, _options.Value.NewRock.ReceiveKey,
  714. _options.Value.NewRock.Expired,
  715. HttpContext.RequestAborted);
  716. }
  717. #endregion
  718. #region 监听和强插
  719. /// <summary>
  720. /// 监听分机
  721. /// </summary>
  722. /// <param name="firstTelNo"></param>
  723. /// <param name="secondTelNo"></param>
  724. /// <returns></returns>
  725. [HttpPost("MonitorExt")]
  726. public async Task MonitorExt(string firstTelNo,string secondTelNo)
  727. {
  728. await _client.MonitorExt(new MonitorExtRequest()
  729. {
  730. Attribute = "Monitor",
  731. Exts = new List<Ext>() { new Ext() { Id = firstTelNo }, new Ext() { Id = secondTelNo } }
  732. }, _options.Value.NewRock.ReceiveKey,
  733. _options.Value.NewRock.Expired,
  734. HttpContext.RequestAborted) ;
  735. }
  736. /// <summary>
  737. /// 从监听到插播状态变换
  738. /// 1. 已知:分机 A 在监听分机 B 与其通话方的通话;
  739. /// 2. 执行分机 A 的从监听到插播状态变换的 API;
  740. /// 3. 执行成功时,分机 A 与分机 B 建立通话,分机 B 的原通话方听保持音。
  741. /// </summary>
  742. /// <param name="telNo"></param>
  743. /// <returns></returns>
  744. [HttpPost("MonitorExtToTalk")]
  745. public async Task MonitorExtToTalk(string telNo)
  746. {
  747. await _client.MonitorExtToTalk(new MonitorExtToTalkRequest()
  748. {
  749. Attribute = "Talk",
  750. Ext = new Ext() { Id=telNo }
  751. }, _options.Value.NewRock.ReceiveKey,
  752. _options.Value.NewRock.Expired,
  753. HttpContext.RequestAborted);
  754. }
  755. /// <summary>
  756. /// 从插播到监听状态变换
  757. /// 1. 已知:分机 A 在插播分机 B 的通话;
  758. /// 2. 执行分机 A 的从插播到监听状态变换的 API;
  759. /// 3. 执行成功时,分机 A 监听分机 B 及其原通话方的通话。
  760. /// </summary>
  761. /// <param name="telNo"></param>
  762. /// <returns></returns>
  763. [HttpPost("MonitorExtToListen")]
  764. public async Task MonitorExtToListen(string telNo)
  765. {
  766. await _client.MonitorExtToListen(new MonitorExtToListenRequest()
  767. {
  768. Attribute = "Listen",
  769. Ext = new Ext() { Id = telNo }
  770. }, _options.Value.NewRock.ReceiveKey,
  771. _options.Value.NewRock.Expired,
  772. HttpContext.RequestAborted);
  773. }
  774. #endregion
  775. #region 强插
  776. /// <summary>
  777. /// 强插
  778. /// 1. 已知:分机 A 当前空闲,分机 B 正在通话中;
  779. /// 2. 执行分机 A 强插分机 B 的 API;
  780. /// 3. 执行成功时,分机 A 振铃,摘机后即可形成三方通话。
  781. /// </summary>
  782. /// <param name="firstTelNo"></param>
  783. /// <param name="secondTelNo"></param>
  784. /// <returns></returns>
  785. [HttpPost("BargeinExt")]
  786. public async Task BargeinExt(string firstTelNo,string secondTelNo)
  787. {
  788. await _client.BargeinExt(new BargeinExtRequest()
  789. {
  790. Attribute = "BargeinExt",
  791. Exts = new List<Ext>() { new Ext() { Id=firstTelNo },new Ext() { Id=secondTelNo } }
  792. }, _options.Value.NewRock.ReceiveKey,
  793. _options.Value.NewRock.Expired,
  794. HttpContext.RequestAborted);
  795. }
  796. #endregion
  797. }
  798. }