callCenter.ts 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. import { ref } from 'vue';
  2. import { getCurrentCityConfig } from '@/utils/appConfig';
  3. import { getNowDateTime } from '@/utils/constants';
  4. import { ElMessage } from 'element-plus';
  5. import { dutyOff } from '@/api/public/wex';
  6. /**
  7. * @description 呼叫中心配置 方法
  8. * @return
  9. * cityName: 'name', // 中文名称
  10. * cityCode: 'code', // 6位区号
  11. * cityAbbr: 'abbr', // 简写
  12. * recordNumber: 'recordNumber', // 备案号
  13. * locationCenter: [lat,lng], // 地图中心点
  14. * loginBg: 'loginBg', // 登录背景
  15. * isShowLogo: true, // 是否显示左上角logo
  16. */
  17. export const callCenterWs = ref<any>(null); // 全局变量 当前呼叫中心链接
  18. export const callCenterIsSignIn = ref<boolean>(false); // 当前呼叫中心是否登录
  19. export const callCenterIsOnThePhone = ref<boolean>(false); // 当前呼叫中心是否正在通话中
  20. export const currentTel = ref<any>({
  21. telNo: '', // 分机号
  22. jobNum: '', //工号
  23. telGroup: '', // 技能组ID
  24. }); // 当前分机号
  25. const { cityName } = getCurrentCityConfig();
  26. // 发送消息
  27. const e_TelSendMsg = (strObj: Object) => {
  28. // 客户端当前时间
  29. const nowTime = getNowDateTime();
  30. const strMsg = JSON.stringify(strObj);
  31. console.log(nowTime + ' 发送消息:' + strMsg, callCenterWs.value?.status);
  32. if (callCenterWs.value?.ws?.readyState === 1) {
  33. // 已经链接并且可以通讯,则发放文本消息
  34. callCenterWs.value?.send(strMsg);
  35. } else {
  36. ElMessage.error('请先签入');
  37. }
  38. };
  39. /*
  40. * 外呼
  41. * ReqMakeCall - 方法名
  42. * Extension:分机号
  43. * Called:被叫
  44. * CustomerId:客户ID
  45. */
  46. const callout = (strCallNumber: number | string) => {
  47. if (!strCallNumber) {
  48. ElMessage.error('电话号码不能为空');
  49. return;
  50. }
  51. const obkMsg = {
  52. Action: 'ReqMakeCall',
  53. Param: {
  54. Extension: currentTel.value.telNo,
  55. Called: strCallNumber,
  56. CustomerId: '',
  57. },
  58. };
  59. // 发送请求
  60. e_TelSendMsg(obkMsg);
  61. };
  62. /*
  63. * 签出
  64. * ReqAgentLogout - 签出方法名称
  65. * Extension - 分机号码
  66. */
  67. const signOutFn = () => {
  68. const objMsg = {
  69. Action: 'ReqAgentLogout',
  70. Param: {
  71. Extension: currentTel.value.telNo,
  72. },
  73. };
  74. // 发送请求
  75. e_TelSendMsg(objMsg);
  76. };
  77. // 外呼统一调用外呼方法 兼容不同的呼叫中心
  78. export function callCenterOutbound(phoneNumber: number | string) {
  79. if (!callCenterWs.value) {
  80. ElMessage.warning('请先签入');
  81. return;
  82. }
  83. switch (cityName) {
  84. case '宜宾市':
  85. callCenterWs.value?.dial(phoneNumber);
  86. break;
  87. case '自贡市':
  88. callout(phoneNumber);
  89. break;
  90. default:
  91. }
  92. }
  93. // 统一调用退出登录并关闭链接方法 兼容不同的呼叫中心
  94. export function callCenterLogout() {
  95. if (!callCenterWs.value) {
  96. ElMessage.warning('请先签入');
  97. return;
  98. }
  99. switch (cityName) {
  100. case '宜宾市':
  101. callCenterWs.value?.logout();
  102. callCenterWs.value?.close();
  103. dutyOff(); // 呼叫中心签出
  104. break;
  105. case '自贡市':
  106. signOutFn();
  107. break;
  108. default:
  109. }
  110. }