TrTelDao.cs 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823
  1. 
  2. using Hotline.Share.Dtos.FlowEngine.Workflow;
  3. using Hotline.Share.Dtos.Order;
  4. using Hotline.Share.Enums.CallCenter;
  5. using Hotline.Share.Requests;
  6. using XF.Utility.EnumExtensions;
  7. namespace Hotline.Share.Dtos.TrCallCenter
  8. {
  9. #region 分机
  10. public class TrTelDto
  11. {
  12. public string Id { get; set; }
  13. public string Name { get; set; }
  14. public string TelNo { get; set; }
  15. public string Description { get; set; }
  16. public string QueueId { get; set; }
  17. /// <summary>
  18. /// 外呼分机组(由内部系统提供)
  19. /// </summary>
  20. public string? CallOutQueue { get; set; }
  21. }
  22. public class TrTelStateDto
  23. {
  24. /// <summary>
  25. /// ID
  26. /// </summary>
  27. public string? Id { get; set; }
  28. /// <summary>
  29. /// 分机号
  30. /// </summary>
  31. public string? TelNo { get; set; }
  32. /// <summary>
  33. /// 通道流水
  34. /// </summary>
  35. public string? ChannelUUid { get; set; }
  36. /// <summary>
  37. /// 鉴权用户名
  38. /// </summary>
  39. public string? TelName { get; set; }
  40. /// <summary>
  41. /// 分机状态机类型
  42. /// </summary>
  43. public string? Type { get; set; }
  44. /// <summary>
  45. /// 权重
  46. /// </summary>
  47. public string? Weight { get; set; }
  48. /// <summary>
  49. /// 所在呼叫组
  50. /// </summary>
  51. public string? Queue { get; set; }
  52. /// <summary>
  53. /// 分机状态
  54. /// </summary>
  55. public string? State { get; set; }
  56. /// <summary>
  57. /// 前一状态
  58. /// </summary>
  59. public string? OldState { get; set; }
  60. /// <summary>
  61. /// 注册设备
  62. /// </summary>
  63. public string? Device { get; set; }
  64. /// <summary>
  65. /// 注册IP
  66. /// </summary>
  67. public string? SipIp { get; set; }
  68. /// <summary>
  69. /// 二级状态
  70. /// </summary>
  71. public string? PrivateData { get; set; }
  72. /// <summary>
  73. /// 是否注册
  74. /// </summary>
  75. public string? SipState { get; set; }
  76. /// <summary>
  77. /// 签入时间
  78. /// </summary>
  79. public string? CreatedAt { get; set; }
  80. /// <summary>
  81. /// 状态变更时间
  82. /// </summary>
  83. public string? UpdatedAt { get; set; }
  84. /// <summary>
  85. /// 呼叫方向
  86. /// </summary>
  87. public string? CallDirection { get; set; }
  88. /// <summary>
  89. /// 呼叫号码
  90. /// </summary>
  91. public string? OtherNumber { get; set; }
  92. /// <summary>
  93. /// 使用线路
  94. /// </summary>
  95. public string? GateWay { get; set; }
  96. /// <summary>
  97. /// 接听时间
  98. /// </summary>
  99. public string? AnsweredAt { get; set; }
  100. /// <summary>
  101. /// 分机用户名
  102. /// </summary>
  103. public string? WorkUserName { get; set; }
  104. /// <summary>
  105. /// 分机用户ID
  106. /// </summary>
  107. public string? WorkUserId { get; set; }
  108. }
  109. #endregion
  110. #region 黑白名单
  111. public class TrAddBlacklistDto
  112. {
  113. public string Phone { get; set; }
  114. public int SpecialFlag { get; set; }
  115. }
  116. public class TrDelBlacklistDto
  117. {
  118. public string Phone { get; set; }
  119. public int? SpecialFlag { get; set; }
  120. }
  121. public class TrQueryBlacklistDto
  122. {
  123. public string? Phone { get; set; }
  124. /// <summary>
  125. /// 1:白名单;2:呼入黑名单;3:呼出黑名单;4:呼入呼出黑名单;
  126. /// </summary>
  127. public int? SpecialFlag { get; set; }
  128. }
  129. public class TrQueryBlacklistResponseDto
  130. {
  131. public string Id { get; set; }
  132. public string UserId { get; set; }
  133. public DateTime CreationTime { get; set; }
  134. public string Phone { get; set; }
  135. public int SpecialFlag { get; set; }
  136. public int? Priority { get; set; }
  137. }
  138. #endregion
  139. #region 登录
  140. public class TrOnDutyDto
  141. {
  142. public string? TelNo { get; set; }
  143. public int TelModelState { get; set; }
  144. }
  145. public class ChangeTelModelDto
  146. {
  147. public bool isCallOut { get; set; }
  148. }
  149. public class TrOnDutyResponseDto
  150. {
  151. public string? TelNo { get; set; }
  152. public string? TelPwd { get; set; }
  153. public string? Description { get; set; }
  154. public string? QueueId { get; set; }
  155. public string? QueueCallOut { get; set; }
  156. public DateTime StartTime { get; set; }
  157. public bool? IsRest { get; set; }
  158. public bool? IsCallHold { get; set; }
  159. public bool? IsCallEndArrange { get; set; }
  160. public bool? IsTelMute { get; set; }
  161. public int Second => CalcSecond();
  162. public ETelModel? TelModel { get; set; }
  163. public int CalcSecond()
  164. {
  165. return (int)(DateTime.Now - StartTime).TotalSeconds;
  166. }
  167. }
  168. #endregion
  169. #region 小休
  170. public class TrRestDto
  171. {
  172. public string Reason { get; set; }
  173. }
  174. #endregion
  175. #region 通话记录(对外)
  176. public class ReceiveCallRecordDto
  177. {
  178. /// <summary>
  179. /// IPPBX用户名
  180. /// </summary>
  181. public string user { get; set; }
  182. /// <summary>
  183. /// 可直接访问的通话录音地址
  184. /// </summary>
  185. public string? recording_file_url { get; set; }
  186. /// <summary>
  187. /// 呼叫方向:呼入 in / 呼出 out
  188. /// </summary>
  189. public string call_direction { get; set; }
  190. /// <summary>
  191. /// 挂断方:主叫挂断 caller / 被叫挂断 callee / 其他未知情况
  192. /// </summary>
  193. public string hangup_side { get; set; }
  194. /// <summary>
  195. /// 转接分机号
  196. /// </summary>
  197. public string? agent_transfer_number { get; set; }
  198. /// <summary>
  199. /// 坐席侧通话流水,无坐席参与则为手机侧通话流水
  200. /// </summary>
  201. public string call_accept { get; set; }
  202. /// <summary>
  203. /// 主叫号码
  204. /// </summary>
  205. public string caller_id_name { get; set; }
  206. /// <summary>
  207. /// 主叫号码
  208. /// </summary>
  209. public string caller_id_number { get; set; }
  210. /// <summary>
  211. /// 被叫号码
  212. /// </summary>
  213. public string destination_number { get; set; }
  214. /// <summary>
  215. /// 通话录音绝对路径
  216. /// </summary>
  217. public string? recording_file_name { get; set; }
  218. /// <summary>
  219. /// 通话创建时间
  220. /// </summary>
  221. public string created_time { get; set; }
  222. /// <summary>
  223. /// 接通时间
  224. /// </summary>
  225. public string? answered_time { get; set; }
  226. /// <summary>
  227. /// 挂机时间
  228. /// </summary>
  229. public string over_time { get; set; }
  230. /// <summary>
  231. /// 线路号
  232. /// </summary>
  233. public string gateway { get; set; }
  234. /// <summary>
  235. /// 呼出时自定义的内容
  236. /// </summary>
  237. public string? other_str { get; set; }
  238. /// <summary>
  239. /// 手机侧通话流水,无坐席参与则为空
  240. /// </summary>
  241. public string? other_accept { get; set; }
  242. /// <summary>
  243. /// 状态码,语音信箱:999/其他:16
  244. /// </summary>
  245. public string status { get; set; }
  246. /// <summary>
  247. /// IVR开始时间
  248. /// </summary>
  249. public string? beginIvrTime { get; set; }
  250. /// <summary>
  251. /// IVR结束时间
  252. /// </summary>
  253. public string? endIvrTime { get; set; }
  254. /// <summary>
  255. /// 开始等待时间
  256. /// </summary>
  257. public string? beginQueueTime { get; set; }
  258. /// <summary>
  259. /// 结束等待时间
  260. /// </summary>
  261. public string? endQueueTime { get; set; }
  262. /// <summary>
  263. /// 开始振铃时间
  264. /// </summary>
  265. public string? beginRingTime { get; set; }
  266. /// <summary>
  267. /// 结束振铃时间
  268. /// </summary>
  269. public string? endRingTime { get; set; }
  270. /// <summary>
  271. /// 队列ID
  272. /// </summary>
  273. public string? ola_queue { get; set; }
  274. /// <summary>
  275. /// 批量外呼流水
  276. /// </summary>
  277. public string? batch_accept { get; set; }
  278. /// <summary>
  279. /// IVR按键信息
  280. /// </summary>
  281. public string? ivr_dtmf { get; set; }
  282. /// <summary>
  283. /// IVR按键对应动作,需解码
  284. /// </summary>
  285. public string? dtmf_type { get; set; }
  286. public string? phoneTypes { get; set; }
  287. }
  288. public class ReceiveCallEvaluateDto
  289. {
  290. public string dtmf { get; set; }
  291. public string call_accept { get; set; }
  292. public int type { get; set; }
  293. }
  294. public class PublishCallRecrodDto
  295. {
  296. public OrderDto? Order { get; set; }
  297. /// <summary>
  298. /// 办理节点信息
  299. /// </summary>
  300. public WorkflowTraceDto WorkflowTrace { get; set; }
  301. public TrCallDto? TrCallRecordDto { get; set; }
  302. }
  303. #endregion
  304. #region 通话记录(对内)
  305. public record class GetCallListDto : PagedRequest
  306. {
  307. /// <summary>
  308. /// 主叫
  309. /// </summary>
  310. public string? CPN { get; set; }
  311. /// <summary>
  312. /// 被叫
  313. /// </summary>
  314. public string? CDPN { get; set; }
  315. /// <summary>
  316. /// 分机号
  317. /// </summary>
  318. public string? TelNo { get; set; }
  319. /// <summary>
  320. /// 用户名
  321. /// </summary>
  322. public string? UserName { get; set; }
  323. /// <summary>
  324. /// 电话方向
  325. /// </summary>
  326. public ECallDirection? CallDirection { get; set; }
  327. /// <summary>
  328. /// 通话状态
  329. /// </summary>
  330. public EOnState? OnState { get; set; }
  331. /// <summary>
  332. /// 挂断方
  333. /// </summary>
  334. public EEndBy? EndBy { get; set; }
  335. /// <summary>
  336. /// IVR开始开始时间
  337. /// </summary>
  338. public DateTime? BeginIvrTimeStart { get; set; }
  339. /// <summary>
  340. /// IVR开始结束时间
  341. /// </summary>
  342. public DateTime? BeginIvrTimeEnd { get; set; }
  343. /// <summary>
  344. /// IVR结束开始时间
  345. /// </summary>
  346. public DateTime? EndIvrTimeStart { get; set; }
  347. /// <summary>
  348. /// IVR结束结束时间
  349. /// </summary>
  350. public DateTime? EndIvrTimeEnd { get; set; }
  351. /// <summary>
  352. /// 开始等待开始时间(队列开始时间)
  353. /// </summary>
  354. public DateTime? BeginQueueTimeStart { get; set; }
  355. /// <summary>
  356. /// 开始等待结束时间(队列开始时间)
  357. /// </summary>
  358. public DateTime? BeginQueueTimeEnd { get; set; }
  359. /// <summary>
  360. /// 结束等待开始时间(队列结束时间)
  361. /// </summary>
  362. public DateTime? EndQueueTimeStart { get; set; }
  363. /// <summary>
  364. /// 结束等待结束时间(队列结束时间)
  365. /// </summary>
  366. public DateTime? EndQueueTimeEnd { get; set; }
  367. /// <summary>
  368. /// 应答开始时间
  369. /// </summary>
  370. public DateTime? AnsweredTimeStart { get; set; }
  371. /// <summary>
  372. /// 应答结束时间
  373. /// </summary>
  374. public DateTime? AnsweredTimeEnd { get; set; }
  375. /// <summary>
  376. /// 通话结束开始时间
  377. /// </summary>
  378. public DateTime? OverTimeStart { get; set; }
  379. /// <summary>
  380. /// 通话结束结束时间
  381. /// </summary>
  382. public DateTime? OverTimeEnd { get; set; }
  383. /// <summary>
  384. /// 振铃开始开始时间
  385. /// </summary>
  386. public DateTime? BeginRingTimeStart { get; set; }
  387. /// <summary>
  388. /// 振铃开始结束时间
  389. /// </summary>
  390. public DateTime? BeginRingTimeEnd { get; set; }
  391. /// <summary>
  392. /// 振铃结束开始时间
  393. /// </summary>
  394. public DateTime? EndRingTimeStart { get; set; }
  395. /// <summary>
  396. /// 振铃结束结束时间
  397. /// </summary>
  398. public DateTime? EndRingTimeEnd { get; set; }
  399. /// <summary>
  400. /// 通话开始时间开始
  401. /// </summary>
  402. public DateTime? CallTimeStart { get; set; }
  403. /// <summary>
  404. /// 通话开始时间结束
  405. /// </summary>
  406. public DateTime? CallTimeEnd { get; set; }
  407. /// <summary>
  408. /// 工单编号
  409. /// </summary>
  410. public string? OrderNo { get; set; }
  411. /// <summary>
  412. /// 工单标题
  413. /// </summary>
  414. public string? Title { get; set; }
  415. /// <summary>
  416. /// 中继号
  417. /// </summary>
  418. public string? Gateway { get; set; }
  419. /// <summary>
  420. /// 是否智能应答(需要OnState条件传 接通)
  421. /// </summary>
  422. public bool IsAiAnswered { get; set; }
  423. /// <summary>
  424. /// 电话类型
  425. /// </summary>
  426. public EPhoneTypes? PhoneTypes { get; set; }
  427. }
  428. public class TrCallDto
  429. {
  430. /// <summary>
  431. /// 可直接访问的通话录音地址
  432. /// </summary>
  433. public string? RecordingFileUrl { get; set; }
  434. public string? RecordingBaseAddress { get; set; }
  435. public string? RecordingAbsolutePath { get; set; }
  436. /// <summary>
  437. /// 呼叫方向
  438. /// </summary>
  439. public ECallDirection CallDirection { get; set; }
  440. /// <summary>
  441. /// 呼叫方向
  442. /// </summary>
  443. public string CallDirectionText => CallDirection.GetDescription();
  444. /// <summary>
  445. /// 挂断方
  446. /// </summary>
  447. public EEndBy? EndBy { get; set; }
  448. /// <summary>
  449. /// 挂断方
  450. /// </summary>
  451. public string EndByText => EndBy.GetDescription();
  452. /// <summary>
  453. /// 坐席侧通话流水,无坐席参与则为手机侧通话流水
  454. /// </summary>
  455. public string CallAccept { get; set; }
  456. /// <summary>
  457. /// 主叫
  458. /// </summary>
  459. public string CPN { get; set; }
  460. /// <summary>
  461. /// 主叫名称
  462. /// </summary>
  463. public string CPNName { get; set; }
  464. /// <summary>
  465. /// 被叫
  466. /// </summary>
  467. public string CDPN { get; set; }
  468. /// <summary>
  469. /// 分机号
  470. /// </summary>
  471. public string TelNo { get; set; }
  472. /// <summary>
  473. /// 用户ID
  474. /// </summary>
  475. public string UserId { get; set; }
  476. /// <summary>
  477. /// 用户名
  478. /// </summary>
  479. public string UserName { get; set; }
  480. /// <summary>
  481. /// 通话录音绝对路径
  482. /// </summary>
  483. public string? RecordingFileName { get; set; }
  484. /// <summary>
  485. /// 通话创建时间
  486. /// </summary>
  487. public DateTime CreatedTime { get; set; }
  488. /// <summary>
  489. /// 接通时间
  490. /// </summary>
  491. public DateTime? AnsweredTime { get; set; }
  492. /// <summary>
  493. /// 挂机时间
  494. /// </summary>
  495. public DateTime OverTime { get; set; }
  496. /// <summary>
  497. /// 线路号
  498. /// </summary>
  499. public string Gateway { get; set; }
  500. /// <summary>
  501. /// 呼出时自定义的内容
  502. /// </summary>
  503. public string? OtherStr { get; set; }
  504. /// <summary>
  505. /// 手机侧通话流水,无坐席参与则为空
  506. /// </summary>
  507. public string? OtherAccept { get; set; }
  508. /// <summary>
  509. /// 状态码,语音信箱:999/其他:16
  510. /// </summary>
  511. public string Status { get; set; }
  512. /// <summary>
  513. /// IVR开始时间
  514. /// </summary>
  515. public DateTime? BeginIvrTime { get; set; }
  516. /// <summary>
  517. /// IVR结束时间
  518. /// </summary>
  519. public DateTime? EndIvrTime { get; set; }
  520. /// <summary>
  521. /// 开始等待时间
  522. /// </summary>
  523. public DateTime? BeginQueueTime { get; set; }
  524. /// <summary>
  525. /// 结束等待时间
  526. /// </summary>
  527. public DateTime? EndQueueTime { get; set; }
  528. /// <summary>
  529. /// 开始振铃时间
  530. /// </summary>
  531. public DateTime? BeginRingTime { get; set; }
  532. /// <summary>
  533. /// 结束振铃时间
  534. /// </summary>
  535. public DateTime? EndRingTimg { get; set; }
  536. /// <summary>
  537. /// 队列ID
  538. /// </summary>
  539. public string? OlaQueue { get; set; }
  540. /// <summary>
  541. /// 批量外呼流水
  542. /// </summary>
  543. public string? BatchAccept { get; set; }
  544. /// <summary>
  545. /// IVR按键信息
  546. /// </summary>
  547. public string? IvrDtmf { get; set; }
  548. /// <summary>
  549. /// IVR按键对应动作,需解码
  550. /// </summary>
  551. public string? DtmfType { get; set; }
  552. #region 自定义字段
  553. /// <summary>
  554. /// 通话时长(挂机时间-接通时间)
  555. /// </summary>
  556. public int Duration { get; set; }
  557. /// <summary>
  558. /// 振铃时长(振铃结束时间-振铃开始时间)
  559. /// </summary>
  560. public int RingTimes { get; set; }
  561. /// <summary>
  562. /// 排队时长(排队结束时间-排队开始时间)
  563. /// </summary>
  564. public int QueueTims { get; set; }
  565. /// <summary>
  566. /// 通话状态
  567. /// </summary>
  568. public EOnState OnState { get; set; }
  569. /// <summary>
  570. /// 通话状态
  571. /// </summary>
  572. public string OnStateText => OnState.GetDescription();
  573. public ECallOrderType? CallOrderType { get; set; }
  574. /// <summary>
  575. /// 外部ID
  576. /// </summary>
  577. public string? ExternalId { get; set; }
  578. /// <summary>
  579. /// 工单
  580. /// </summary>
  581. public OrderDto Order { get; set; }
  582. /// <summary>
  583. /// 归属地
  584. /// </summary>
  585. public string? MobileAreaName { get; set; }
  586. /// <summary>
  587. /// 运营商
  588. /// </summary>
  589. public string? OFlag { get; set; }
  590. /// <summary>
  591. /// 卡类型
  592. /// </summary>
  593. public string? OperatorName { get; set; }
  594. #endregion
  595. }
  596. #endregion
  597. #region 关联
  598. public class LinkCallRecordDto
  599. {
  600. public bool IsOrder { get; set; }
  601. public string Id { get; set; }
  602. public string CallId { get; set; }
  603. }
  604. #endregion
  605. #region 坐席动作类型
  606. public record TelActionListDto:PagedRequest
  607. {
  608. public string TelNo { get; set; }
  609. public EActionType? ActionTtype { get; set; }
  610. public string? UserName { get; set; }
  611. public DateTime? StartTime { get; set; }
  612. public DateTime? EndTime { get; set; }
  613. }
  614. public class TelActionListRep
  615. {
  616. public string Id { get; set; }
  617. /// <summary>
  618. /// 用户ID
  619. /// </summary>
  620. public string UserId { get; set; }
  621. /// <summary>
  622. /// 用户名称
  623. /// </summary>
  624. public string UserName { get; set; }
  625. /// <summary>
  626. /// 分机号
  627. /// </summary>
  628. public string TelNo { get; set; }
  629. /// <summary>
  630. /// 分机组
  631. /// </summary>
  632. public string QueueId { get; set; }
  633. /// <summary>
  634. /// 开始时间
  635. /// </summary>
  636. public DateTime StartTime { get; set; }
  637. /// <summary>
  638. /// 结束时间
  639. /// </summary>
  640. public DateTime? EndTime { get; set; }
  641. /// <summary>
  642. /// 动作类型
  643. /// </summary>
  644. public EActionType ActionType { get; set; }
  645. public string ActionTypeText => ActionType.GetDescription();
  646. /// <summary>
  647. /// 用时
  648. /// </summary>
  649. public double Duration { get; private set; }
  650. }
  651. #endregion
  652. }