菊风已发布实时音视频2.0升级版(2.0版本说明),当前您正在访问1.0旧版本,点击此处可进入2.0升级版

# VoIP 插件接入

# 背景介绍

在微信强提醒方案中,微信端授权弹窗、通话提醒、通话界面为微信提供的统一界面。小程序开发者参考VoIP 插件开发文档 (opens new window)接入微信 VoIP 通话插件后,当设备呼叫手机端微信用户时,手机端用户不需要打开微信,即可收到音视频通话弹窗提醒,通过提醒直接进入小程序进行通话。

# VoIP 插件引入

# 官方插件集成 Demo

微信小程序开发文档 (opens new window)

image.png

# 版本要求

微信 8.0.54 及以上版本

# 接入流程

  1. 插件引入

小程序管理后台 (opens new window)」——「设置」——「第三方设置」——「插件管理」,点击「添加插件」

image.png

image.png

  1. 代码引入

app.json主包或者分包内引入

{
  "plugins": {·
    "wmpf-voip": {
      "version": "latest",
      "provider": "wxf830863afde621eb"
    }
  },
  ...
}
  1. 初始化插件

在app.js初始化加载插件与插件设置

const wmpfVoip = requirePlugin('wmpf-voip').default
console.log(wmpfVoip) // 有结果即表示引入插件成功

// 后面即可设置 VoIP 插件配置

# VoIP 插件常见可选配置

# 设置呼叫后结束跳转页面

wmpfVoip.setVoipEndPagePath({
  url: '/pages/contactList/contactList',
  key: 'Call',
})

# 设置画面比例以及裁切模式

  1. 常见参数说明
参数名类型说明
callerUIobject主叫UI配置,详见下表
listenerUIobject被叫UI配置,详见下表

callerUI / listenerUI 参数说明

参数名类型说明
aspectRatiofloat视频画面画面纵横比
objectFitstring视频画面与容器比例不一致时的表现形式。支持 fill/contain
  1. 官方代码参考
wmpfVoip.setUIConfig({
  callerUI: {
    aspectRatio: wx.getWindowInfo().screenHeight / wx.getWindowInfo().screenWidth,
    objectFit: 'contain'
  },
  listenerUI: {
    aspectRatio: wx.getWindowInfo().screenHeight / wx.getWindowInfo().screenWidth,
    objectFit: 'contain'
  },
})

其他参数参考:微信小程序开发文档 (opens new window)

# 回调打印

wmpfVoip.onVoipEvent((event) => {
  console.log(`onVoipEvent`, event)
    })

# 授权以及发起呼叫

# 设备授权

设备呼叫微信用户时,微信用户需要对设备进行授权才可实现通话,用户授权设备微信官方文档:微信小程序开发文档 (opens new window)

参数、必填参数、其他参数见requestDeviceVoIP (opens new window)按需填写

参数名类型说明
snstring设备唯一序列号。设备唯一序列号。由厂商分配,长度不能超过128字节。字符只接受数字,大小写字母,下划线(_)和连字符(-)。
snTicketstring设备票据,5分钟内有效 需要用户自己开发服务向微信后台获取
modelIdstring设备型号 id。通过微信公众平台注册设备获得。(仅单台设备时)
deviceNamestring设备名称,将显示在授权弹窗内(长度不超过13)。授权框中「设备名字」= 「deviceName」 + 「modelId 对应设备型号」
wx.requestDeviceVoIP({
      sn,
      snTicket,
      modelId,
      deviceName: sn,
      async success(res) {
        console.log(`requestDeviceVoIP`, res)
        await authorize({ sn, name })
        wx.showToast({
          title: '授权成功',
          icon: 'none',
        })
      },
      fail(err) {
        console.error(`requestDeviceVoIP fail`, err)
        wx.showToast({
          title: '授权失败, 请前往设置页开启',
          icon: 'none',
        })
      },
    })

# 设备授权查询

通过getDeviceVoIPList (opens new window)返回近期授权记录

授权记录在小程序被删除后清空

返回一个 Array<Object> 数组,包含以下字段:

参数名类型说明
snstring设备唯一序列号。(仅单台设备时)
model_idstring设备型号 id。通过微信公众平台注册设备获得。(仅单台设备时)
group_idstring设备组的唯一标识 id(仅设备组时)
statusnumber设备(组)授权状态。0:未授权;1:已授权

# 微信小程序发起呼叫

小程序对设备端发起呼叫时,开发者通过自建信令通知设备端,同时在小程序端调用callDevice (opens new window)接口打通媒体流。以下参数为菊风与微信官方文档差异参数,其他参数按照微信官方文档按需填写,然后拉起插件页面

接口:callDevice

参数名类型是否必填说明
payloadstringJSON字符串,按照下表说明填写
isCloudboolean设置为true,将payload信息回调携带到菊风后台
payload 参数说明
参数名类型是否必填说明
fromMiniAppboolean必须填true
juphoon
object菊风相关配置,详见下表
wechat
object微信相关配置,详见下表

juphoon 参数说明

参数名类型是否必填说明
appKeystring菊风appkey,点击查看如何获取 appkey
callIdstring唯一通话ID,需要和SDK填入的值相同,小于等于 32 字符
channelIdstring自定义菊风频道id,最大64位,要求同一appkey下保持唯一
robotUidstring机器人加入频道后的UID,最大64位,要求同一appkey下保持唯一
mediaTypestring通话类型 "audio" 或 "video"

wechat 参数说明

参数名类型是否必填说明
appIdstring微信小程序 AppId
deviceIdstring设备 SN
modelIdstring设备 Model ID
landscape
boolean
SDK 接收小程序推流是否为 4:3 的流。
true: SDK 收到流的宽高比 4:3 --- 320x240 480x352 640x480 1280x720 1920x1080
false: SDK 收到流的宽高比 3:4 --- 240x320 352x480 480x640 720x1080 1080x1920
subscribeVideoLength
int

设备 SDK 期望收到的流分辨率固定长边值
开发者可以用此配置来订阅一个分辨率的长边值。此功能主要是针对那些不希望收到可变分辨率视频流的设备,如果不使用此功能,SDK 收到的视频流在不同的网络环境下会有不同的分辨率。此功能需要同时向微信提交 appid,待开通订阅机制后才生效。
目前这个配置仅支持如下两个值:
320: video_landscape = true 时收到的是 320x240,video_landscape = fale 时收到的是 240x320
640: 不支持 video_landscape = true 模式,video_landscape = fale 时收到的是 480x640
subscribeVideoRotation
int
设备 SDK 期望收到的流方向
开发者可以用此配置来订阅自己收到的流的方向
SDK 默认收到的是逆时针旋转了 90 度的视频流,如果开发者的硬件没有旋转渲染能力,可以使用这个订阅。订阅 0 度流后,对端的微信客户端会对流进行前处理再发出。
此功能 Beta 中,需要微信客户端与插件均支持方可生效.
目前这个配置仅支持如下两个值:
1: 0 度流, 需要配合小程序端的 0 度流参数 即callDevice的encodeVideoRotation,两者一致后才能收到 0 度流。
其他:旋转流,默认也是旋转流。
subscribeVideoRatio
int
设备 SDK 期望收到的流比例
开发者可以用此配置来订阅自己收到的流的比例
此功能 Beta 中,需要微信客户端与插件均支持方可生效.
定义如下:
75: 宽/高 * 100 = 75, 例如 240x320
133: 宽/高 * 100 = 133, 例如 320x240
50: 宽/高 * 100 = 50, 例如 160x320
200: 宽/高 * 100 = 200, 例如 320x160
...

示例

const resp = await wmpfVoip.callDevice({
        roomType: '',
        modelId: '',
        sn,
        payload: JSON.stringify({
          fromMiniApp: true,
          juphoon: {
            appKey: ''
            callId: '',
            channelId: '',
            robotUid:'',
            deviceUid: '',
            mediaType: ''
          },
          wechat: {
            appId: '',
            deviceId: '',
            modelId: '',
          },
        }),
        isCloud: true,
      })
      // 拉起插件页面
      wx.redirectTo({
        url: CallPagePlugin
      })
最后更新时间: 7/31/2026, 9:21:14 AM