微信小程序

手机微信拨打设备

# 手机微信拨打设备

在用户对设备进行授权后,可以向设备发起音视频通话,设备端需要开发者在收到消息后拉起小程序的指定页面让用户接听通话。

如果要获取通话过程的各类事件,可以使用插件的 onVoipEvent 接口。详情请参考插件文档

注:仅支持拨打安卓设备,Linux 设备暂不支持

# 1. 手机微信端发起通话

发起通话前,一般需要用户在小程序中选择拨打的设备和通话的类型(音频/视频)。

发起通话时,开发者需要先从后台拿到从设备端获取的 pushToken,并在小程序中调用插件的 initByCaller 接口获取 groupId,然后跳转到插件的发起通话页面。

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

// 获取 groupId
const roomType = 'video'
const { groupId, isSuccess } = await wmpfVoip.initByCaller({
  caller: {
    // 参见 https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html 获取
    id: 'openId', // 拨打方用户 openId
    name: 'xxxxxx', // 拨打方名字,仅显示用
  },
  listener: {
    id: 'sn' // 设备 SN
  },
  roomType, // 房间类型。voice: 音频房间;video: 音视频房间
  businessType: 2, // 2 为手机微信拨打设备
  voipToken: 'xxxxxxxxxx', // 从设备获取的 pushToken
  miniprogramState: 'formal', // 指定接听方使用的小程序版本。formal/正式版(默认);trial/体验版;developer/开发版
})

if (isSuccess) {
  // 跳转到插件的通话页面
  const callPagePlugin = 'plugin-private://wxf830863afde621eb/pages/call-page-plugin/call-page-plugin'
  wx.redirectTo({
    url: `${callPagePlugin}?isCaller=1&roomType=${roomType}&groupId=${groupId}`,
  })
} else {
  wx.showToast({
    title: '播打失败',
    icon: 'error',
  })
}

注意

  • 建议开发者在服务端维护 sn 与 pushToken 的关联,提前在设备端获取 pushToken并存到后台,并在 pushToken 过期前进行刷新。
  • initByCaller 支持的其他参数,请参见插件文档
  • 发起通话时,需要保证设备已激活并联网在线
  • 给设备推送的消息会在调用 initByCaller 后由微信后台直接下发,不需要开发者额外调用服务端下发消息的接口。

# 2. 设备端接听通话(安卓)

在手机端发起通话后,设备端会收到一条 WMPF 的推送消息。开发者应该进行以下处理:

# 2.1 绑定消息监听

开发者需要在 WMPF 中调用 SetPushMsgCallback 注册消息监听。注意,这一步必须在通话发起前进行。

# 2.2 展示来电通知/提醒(可选)

收到消息后,开发者可以根据产品需要展示来电通知(样式可以自定义),也可直接拉起小程序让用户进行接听。

# 2.3 打开小程序接听

推送消息为 JSON 字符串,解析后格式如下

{
  "path": "plugin-private://wxf830863afde621eb/pages/call-page-plugin/call-page-plugin?roomType=roomType&groupId=groupId&listenerId=设备sn&callerName=拨打方名称&customQuery字符串", // 小程序启动路径
  "appType": 0, // 0: 正式版 1: 开发版  2: 体验版
  "appid": "wx********", // 小程序appid
}

开发者需要使用上述参数,调用 WMPF LaunchWxaApp 接口打开小程序的接听界面。

注意

  • 如果开发者在收到消息后展示了自定义的来电通知,可以在启动小程序的 path 后添加 &isClickedHangOnBtn=1。此时用户进入小程序就会直接接听通话,不需要再次点击插件通话页面「接听」按钮。
  • 建议在安卓 APP 中使用 IPCInvoker.addRemoteProcDiedListener(WMPFService.WMPF_SERVICE_PROCESS_NAME, listener) 监听 WMPF 退出事件,并重新启动并激活 WMPF,以防止 WMPF 异常退出后消息丢失。
  • 设备上,APP 拉起小程序或接听通话较慢时,请参考性能与体验优化指南。