设备拨打手机微信
# 设备拨打手机微信
在用户对设备进行授权后,设备可以向已授权用户发起音视频通话,用户在微信内打开小程序进行接听。
硬件开发者需建立小程序用户 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_ticket
和roomType
可以通过拉起小程序的 path 中的 query 传递给小程序。- 设备上,APP 拉起小程序或接听通话较慢时,请参考性能与体验优化指南。
initByCaller
支持的其他参数,请参见插件文档
# 2. 设备端发起通话(Linux)
请参考 《小程序音视频通话 SDK (Linux)》 5.4.1 发起通话部分
# 3. 手机微信端接听通话
用户在手机端可以收到「响铃+振动」的强提醒通知,点击接听按钮后,会启动小程序并直接进入「VOIP 通话」插件页面接听通话。完成通话后,会跳转到开发者配置的页面。
开发者可以自定义接听页面按钮,以及通话结束跳转页。详情请参考插件文档