# function onVoipEvent(function listener)

# 功能描述

监听 VoIP 通话相关事件。事件绑定需要在通话开始前完成

注意:不要在 onLoad、onShow 等生命周期内绑定事件,可能会因为生命周期多次调用而重复绑定。

# 参数

# function listener

事件监听函数

# 回调参数

# Object event
属性 类型 说明 最低版本
eventName string 事件名称。请参考后文描述。
roomId string 通话房间号。除 bindContactcallPageOnShow 事件外提供 2.4.0
groupId string 与 roomId 相同
data Object 某个事件额外的参数。不同事件的字段不同,请参考后文描述

# 返回值

function

取消监听函数,调用后取消监听事件。该函数无参数,无返回值。

# 事件描述

# 1. startVoip

通话开始。

# 2. abortVoip

通话异常中断。

data 参数

属性 类型 说明
keepTime number 通话时长
status string 异常说明,取值参见后文
error Object 错误对象
error.errMsg Object 错误信息

status 取值

status 描述
abortByListener 通话因本端异常中断(接听方触发)
abortByCaller 通话因本端异常中断(拨打方触发)
unknown 通话因对端异常中断

常见 errMsg

  • room status is abort:status=unknown,接收到对端通话异常时触发,需要根据 roomId 关联对端触发的 abortVoip 事件判断真正的异常原因。
  • listener waitOtherToJoin timeout:status=abortByListener,接听方加入房间后,拨打方一直未成功加入(可能是网络慢等原因)或异常退出,接听方等待 20s 超时后触发。此时建议分析接听方的情况来排查。
  • call interrupted due to close passive float ball:用户将小程序切后台后,会展示小程序浮窗,用户通过浮窗关闭小程序时触发。
  • in comming call:小程序通话被其他来电打断时触发。
  • call interrupted due to native reason:一般是由于通话过程中一段时间未收到数据包(一般是网络原因),被踢出房间中断通话。

# 3. hangOnVoip

通话被接听(仅接听方触发)。

# 4. cancelVoip

通话未接通,拨打方取消通话。

data 参数

属性 类型 说明
status string 取消原因说明,取值参见后文

status 取值

status 描述
manual 用户点击界面挂断按钮取消通话。(仅拨打方)
unloadCallPage 插件页面被销毁导致取消通话。(仅拨打方)
forceFromApp 小程序调用 forceHangUpVoip 取消通话。(仅拨打方)
other 拨打方取消通话。(仅接听方)

# 5. rejectVoip

通话未接通,接听方拒接。

data 参数

属性 类型 说明
status string 拒接原因说明,取值参见后文

status 取值

status 描述
manual 用户点击界面挂断按钮拒接通话(仅接听方)
unloadCallPage 插件页面被销毁导致拒接通话(仅接听方)
forceFromApp 小程序调用 forceHangUpVoip 拒接通话(仅接听方)
other 接听方拒接(仅拨打方)

# 6. hangUpVoip

通话已接通,拨打方/接听方挂断通话。

data 参数

属性 类型 说明
keepTime number 通话时长
status string 挂断方说明,取值参见后文
origin string 挂断原因说明,取值参见后文

status 取值

status 描述
endByListener 接听方挂断
endByCaller 拨打方挂断

origin 取值

为了保持向下兼容,hangUpVoip 事件额外使用 origin 字段提供具体的挂断原因信息。

origin 描述
manual 用户点击界面挂断按钮挂断通话(仅挂断方)
unloadCallPage 插件页面被销毁导致挂断通话(仅挂断方)
forceFromApp 小程序调用 forceHangUpVoip 导致挂断通话(仅挂断方)
other 对方挂断通话
timeLimit 超过最大通话时长

# 7. endVoip

通话结束。

data 参数

属性 类型 说明
keepTime number 通话时长
callerName string 拨打方名字
listenerName string 接听方名字
roomType string 房间类型
isCaller boolean 是否是拨打方
businessType number 业务类型

# 8. busy

通话未接通,接听方占线(仅拨打方触发)。

# 9. calling

通话过程中, 双方都会每秒触发一次。

data 参数

属性 类型 说明
keepTime number 通话时长

# 10. timeout

通话超时未接听。

# 11. joinedRoomByCaller

拨打方加入房间成功(仅拨打方触发)。

# 12. joinFailCaller

拨打方加入房间失败(仅拨打方触发)。

data 参数

属性 类型 说明
errMsg string 错误消息
message string 由于向下兼容原因,某些情况下 data 是一个 Error 对象

# 13. joinFailListener

接听方加入房间失败(仅接听方触发)。

data 参数

属性 类型 说明
errMsg string 错误消息
message string 由于向下兼容原因,某些情况下 data 是一个 Error 对象

# 14. finishVoip

通话完成。返回本次通话结算使用的实际时长。

需从后台获取最终时间后触发,触发时机晚于 endVoip。

data 参数

属性 类型 说明
keepTime number 结算用通话时长

# 15. callPageOnShow

插件通话页面 onShow。

# 16. showCustomBox

用户点击通话页面自定义按钮,展示自定义组件。

data 参数

属性 类型 说明
callerId string 拨打方 Id
listenerId string 接听方 Id

# 17. hideCustomBox

用户隐藏自定义组件。

data 参数

属性 类型 说明
callerId string 拨打方 Id
listenerId string 接听方 Id

# 示例代码

const wmpfVoip = requirePlugin('wmpf-voip').default
const offVoipEvent = wmpfVoip.onVoipEvent(event => {
  console.info(`onVoipEvent`, event)
})

// 需要取消监听时调用
offVoipEvent()