# Promise<Object> initByCaller(Object req)

本接口为异步接口,返回 Promise 对象。

发起通话并获取通话房间号。调用此接口后,会创建 VoIP 房间,并且向接听方推送接听提醒。

建议先阅读接口介绍

# 参数

# Object req

属性 类型 默认值 必填 说明 最低版本
roomType string 通话类型。voice: 音频通话;video: 视频通话
caller Object 拨打方信息
caller.id string 拨打方 id,参考 businessType 的说明
caller.name string 显示的拨打方名字。设备端发起通话时无效
caller.cameraStatus number 0 是否启用摄像头。0: 开启;1: 关闭
listener Object 接听方信息
listener.id string 接听方 id,参考 businessType 的说明
listener.name string 显示的接听方名字。
listener.cameraStatus number 0 是否启用摄像头。0: 开启;1: 关闭
businessType number 0 业务类型。详见 businessType 的说明
voipToken string 拨打票据,部分情况下必填,参考 businessType 的说明
miniprogramState string formal 接听方点击通知时打开的小程序类型。
取值:formal: 正式版; trial: 体验版; developer: 开发版。
2.1.8 起,正式版小程序只能拨打给正式版,设置这一字段无效。
customQuery string 接听方点击通知打开小程序时,会作为 query 拼接到插件页面路径后,格式如 a=1&b=2。可在接听端小程序内通过 getPluginOnloadOptionsgetPluginEnterOptions 接口获取到
timeLimit number 最大通话时长,需为 > 0 的数字 2.3.8

# 返回值

由于历史原因,本接口调用失败可能会抛出异常(一般是参数错误),也可能会返回 isSuccess: false(一般是后台错误)。

接口成功返回后,仍需要使用 isSuccess 字段判断调用是否最终成功。

# Object

接口调用成功时,返回如下

属性 类型 说明 最低版本
isSuccess boolean 是否调用成功,此时为 true
roomId string 本次通话的房间号 2.4.0
groupId string 与 roomId 相同
chargeType string 计费方式。取值:duration: 时长计费;license: license 计费 2.3.8

调用失败时,接口返回如下:

属性 类型 说明 最低版本
isSuccess boolean 是否调用成功,此时为 false
error object 错误对象,已废弃。{ err_code: string, errMsg: string }
errCode number 错误码,取值参考错误码文档
errMsg string 错误信息
errObj VoipError 错误对象 2.4.0

# 关于 businessType

不同 businessType 对应的部分参数含义不同,参数获取的具体方式请参考对应业务的文档。

businessType 业务类型 caller.id listener.id voipToken
1 硬件设备呼叫手机微信 设备 SN 微信用户 openId 使用设备认证 SDK注册的设备传入 deviceToken.
使用 WMPF 注册的设备不能有这个字段(插件 2.3.0 支持)
2 手机微信呼叫硬件设备 微信用户 openId 设备 SN 从设备获取的 pushToken
  • 发起通话前,需要在提前让 openId 对应的用户在微信客户端的小程序内进行授权,具体流程请参见授权文档
  • 传入 id 为 设备 SN 时,name 会强制使用用户授权时的「deviceName」+「modelId 对应设备型号」,不使用开发者传入的 name。
  • 本接口 businessType=2 仅支持安卓 WMPF,呼叫 Linux 设备请使用 callDevice
  • 本接口 businessType=2 不支持 license 计费,手机微信呼叫安卓 WMPF 建议使用 callWMPF

# 示例代码

const wmpfVoip = requirePlugin('wmpf-voip').default

try {
  const { isSuccess } = await wmpfVoip.initByCaller({
    caller: {
      id: '拨打方 Id',
      name: '拨打方名字',
    },
    listener: {
      id: '接听方 Id',
      name: '接听方名字',
    },
    roomType: 'video',
    businessType: 1,
    voipToken: 'xxxx*****xxxx',
    miniprogramState: 'developer', // 开发阶段建议使用开发版
  })

  if (isSuccess /* && 当前不在插件页面 */) {
    wx.redirectTo({
      url: wmpfVoip.CALL_PAGE_PATH,
    })
  } else {
    wx.showToast({
      title: '呼叫失败',
      icon: 'error',
    })
  }
} catch (e) {
  wx.showToast({
    title: '呼叫失败',
    icon: 'error',
  })
}