vue3+ts 使用XSwitch 实现简易拨打电话功能

官方中文文档:JS SDK | XSwitch文档中心

1.安装xswitch/rtc

npm install @xswitch/rtc
yarn add @xswitch/rtc

2.初始化 verto,并在需要引入的组件中引入verto

这里举例在pendingTask.vue中引用

pendingTask.vue 

import verto, {Verto, VertoCallcenter} from '@xswitch/rtc'

3.根据文档 封装拨号函数

协议 : websocket

import verto from '@xswitch/rtc'
//用户信息
let cur_call = null;//外呼函数
let ola_extn = 'xxx'
let serIp = 'xxxxx'//用户名
let agentPwd = 'xxx' //密码
//verto 回调函数
let callbacks = {
	//收到消息时的回调
	onMessage: function (verto: any, dialog: any, msg: any, data: any) {
		console.log(msg)
	},
    //状态发生改变时的回调
	onDialogState: function (d: any) {
		cur_call = d.state;
		 switch (d.state.name) {
      case 'ringing':
        onLoading.value = true
        break;
      case 'trying':
        onLoading.value = true
        outTxt.value = '正在接通中...'
        break;
      case 'early':
        onLoading.value = true
        outTxt.value = '正在接通中...'
        break;
      case 'active':
        onLoading.value = true
        outTxt.value = '通话中...'
        break;
      case 'hangup':
      case 'destroy':
        cur_call = null;
        onLoading.value = false
        outTxt.value = '通话已完成'
        break;
      default:
        break;
    }
	},
	onEvent: function (v: any, e: any) {
		console.debug("GOT EVENT", e, v);
	}
}
//登录
const vertoLogin = () => {
	const params = {
		login: ola_extn + "@" + serIp,
		passwd: agentPwd,
		socketUrl: "wss://" + serIp + ":10085/webrtc",//请求地址
		tag: "webcam"
	}
	verto.connect(params, callbacks);
}

//外呼
const doCall = (phone: string) => {
	vertoLogin()
	cur_call = verto.newCall({
		destination_number: phone,
		caller_id_name: ola_extn,
		caller_id_number: ola_extn
	}, '', onSuccess, onError);
}
const onSuccess = () => {
	sessionStorage.setItem('txt', '正在呼叫中')
}
const onError = () => {
	sessionStorage.setItem('txt', '服务器繁忙,请刷新后重试')
}

export { doCall }

4.在组件中使用该方法

//html
<div @click="doOutbound">
    <el-button :loading="onLoading">
       <template #icon>
         <img src="@/assets/static/phone.png" alt="">
        </template>
         {{ outTxt }}
   </el-button>
</div>
  <!-- 外呼media 必须要有,不然听不到声音-->
  <video width=800 id="webcam" autoplay hidden="true"></video>

//js
<script lang="ts" setup>
import doCall from '@/utils/doCall'
//----------------------应用外呼函数
const onLoading = ref(false) //按钮加载状态
const outTxt = ref('外呼') //外呼按钮
const doOutbound = () => {
  if (onLoading.value) return //防止拨号的时候重复发websocket
  if (outTxt.value === '外呼') doCall('这里传入手机号')
  outTxt.value = '外呼'
}
//挂断
const closeOutbound = () => {
  cur_call.hangup()
}
//保持通话
const holdOutbound = () => {
  cur_call.hold();
  isHold.value = true
}
//关闭保持通话
const unHoldOutbound = () => {
  cur_call.unhold();
  isHold.value = false
}
</script>

5.综上,只需要点击一下外呼,即可打通你的第一个电话

### PyCharm 打开文件显示全的解决方案 当遇到PyCharm打开文件显示全的情况时,可以尝试以下几种方法来解决问题。 #### 方法一:清理缓存并重启IDE 有时IDE内部缓存可能导致文件加载异常。通过清除缓存再启动程序能够有效改善此状况。具体操作路径为`File -> Invalidate Caches / Restart...`,之后按照提示完成相应动作即可[^1]。 #### 方法二:调整编辑器字体设置 如果是因为字体原因造成的内容显示问题,则可以通过修改编辑区内的文字样式来进行修复。进入`Settings/Preferences | Editor | Font`选项卡内更改合适的字号大小以及启用抗锯齿功能等参数配置[^2]。 #### 方法三:检查项目结构配置 对于某些特定场景下的源码视图缺失现象,可能是由于当前工作空间未能正确识别全部模块所引起。此时应该核查Project Structure的Content Roots设定项是否涵盖了整个工程根目录;必要时可手动添加遗漏部分,并保存变更生效[^3]。 ```python # 示例代码用于展示如何获取当前项目的根路径,在实际应用中可根据需求调用该函数辅助排查问题 import os def get_project_root(): current_file = os.path.abspath(__file__) project_dir = os.path.dirname(current_file) while not os.path.exists(os.path.join(project_dir, '.idea')): parent_dir = os.path.dirname(project_dir) if parent_dir == project_dir: break project_dir = parent_dir return project_dir print(f"Current Project Root Directory is {get_project_root()}") ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值