微信小程序

设备拨打手机微信

# 设备拨打手机微信

在用户对设备进行授权后,设备可以向已授权用户发起音视频通话,用户在微信内打开小程序进行接听。

硬件开发者需建立小程序用户 openId、小程序 appId、硬件设备之间的关联。用户在手机端授权后设备才可拨打。

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

# 1. 设备端发起通话(安卓)

发起通话前,一般需要用户选择拨打给的用户和通话的类型(音频/视频)。

根据业务场景不同,发起通话前的流程(如选择联系人和房间类型)可以在小程序的另一个页面中或者安卓应用中进行。

# 1.1 由小程序页面进入通话页面

适用于用户发起通话前的页面(如联系人选择等)是小程序页面时。

发起通话时,设备端需要在之前的页面中调用插件的 initByCaller 接口获取 groupId,然后跳转到插件的发起通话页面。

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

// 获取 groupId
const roomType = 'video'
const { groupId, isSuccess } = await wmpfVoip.initByCaller({
  caller: {
    id: 'sn', // 设备 SN
    // 不支持传 name,显示的是授权时「deviceName」+「modelId 对应设备型号」
  },
  listener: {
    // 参见 https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html 获取
    id: 'openId' // 接听方 用户 openId
    name: 'xxxxxx', // 接听方名字,仅显示用
  },
  roomType, // 房间类型。voice: 音频房间;video: 音视频房间
  businessType: 1, // 1 为设备拨打手机微信
  voipToken: 'xxxxxxxxxx', // 调用「设备注册」使用的 SDK `getCallerTicket` 获取
  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',
  })
}

# 1.2 由安卓应用直接进入通话页面

适用于用户发起通话前的页面(如联系人选择等)是安卓应用页面时。

发起通话时,需要安卓应用调用 WMPF LaunchWxaApp 接口拉起小程序,path 直接使用插件的拨打页面 plugin-private://wxf830863afde621eb/pages/call-page-plugin/call-page-plugin?isCaller=1&roomType=${roomType},roomType 按用户实际选择填写。路径后可以带自定义参数,如 &a=1

这种情况下,开发者可以直接在小程序 App.onShow 或插件 callPageOnShow 事件回调时调用 initByCaller,插件会直接进入拨打状态,不需要额外进行页面跳转。

建议开发者使用「小程序预热」能力加快小程序的启动速度。

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

App({
  onShow() {
    const { query } = wmpfVoip.getPluginEnterOptions()
    if (query.isPreLaunch) {
      // 小程序预热场景,无需处理
    } else if (query.isCaller === '1') {
      // 发起通话场景
      if (!query.groupId) {
        // 安卓应用直接进入通话页面
        wmpfVoip.initByCaller({/* 参数省略,请参考前一小节 */})
          .catch((e) => {
            wx.showToast({
              title: '播打失败',
              icon: 'error',
            })
          })
      } else {
        // 已经获取到 groupId 小程序页面跳转进入,可以不处理
      }
    } else {
      // 接听通话场景
    }
  }
})

注意

  • 给用户推送的接听提醒会在调用 initByCaller 后由微信后台直接下发,不需要开发者额外调用服务端下发消息的接口。
  • caller_ticketroomType 可以通过拉起小程序的 path 中的 query 传递给小程序。
  • 设备上,APP 拉起小程序或接听通话较慢时,请参考性能与体验优化指南。
  • initByCaller 支持的其他参数,请参见插件文档

# 2. 设备端发起通话(Linux)

请参考 《小程序音视频通话 SDK (Linux)》 5.4.1 发起通话部分

# 3. 手机微信端接听通话

用户在手机端可以收到「响铃+振动」的强提醒通知,点击接听按钮后,会启动小程序并直接进入「VOIP 通话」插件页面接听通话。完成通话后,会跳转到开发者配置的页面。

开发者可以自定义接听页面按钮,以及通话结束跳转页。详情请参考插件文档