语音融合呼叫

更新时间: 2022/09/06 02:44:11

语音融合呼叫方案提供应用内呼叫运营商号码的能力,当应用内呼叫无法接通时,可以直接转到运营商手机号来进行呼叫,让用户享受到接通率的提升而带来的体验。

前提条件

  • 只有 V1.5.0 及以上版本的呼叫组件支持语音融合呼叫功能。
  • 只有特定的 NERTC 版本支持语音融合呼叫功能,具体如下:
    • V4.6.10 及以上版本(推荐)
    • V4.2.142(推荐)
    • V4.2.140
    • V4.2.124
  • 请在官网首页右侧通过在线消息、微信或电话联系云信商务经理,开通高接通的功能。
  • 已实现 RTC 呼叫,具体请参见集成组件

注意事项

  • 融合呼叫方案中,测试和正式上线阶段均需要使用安全模式,即加入房间时必传 NERTC Token。 开通安全模式及获取 Token 的方法请参见 Token 鉴权
  • 目前仅支持一对一纯语音呼叫。仅支持呼出,不支持呼入。

技术原理

uml diagram

实现流程

  1. (可选)自定义语音融合呼叫的 UI 界面

  2. 引入呼叫组件。

    使用 PSTN 语音融合呼叫时,需要将Gradle 引入呼叫组件中,主工程 build.gradle 示例代码中的 call-ui 包替换为 call-pstn 包。修改后的示例代码如下:

groovy// 若出现 More than one file was found with OS independent path 'lib/arm64-v8a/libc++_shared.so'.
// 可以在主 module 的 build.gradle 文件中 android 闭包内追加如下 packageOptions 配置
android{
  	//......
    packagingOptions {
      pickFirst 'lib/arm64-v8a/libc++_shared.so'
      pickFirst 'lib/armeabi-v7a/libc++_shared.so'
  	}
}

dependencies {
    implementation 'com.netease.yunxin.kit:call-pstn:1.5.4'  //将呼叫组件的包替换为含PSTN的包
}

如果本地已经集成 IM 或者 NERTC SDK,或不想使用呼叫组件依赖的 IM 和 NERTC 版本,请通过如下方式实现:

注意:使用其他版本可能出现版本不兼容。

groovy implementation('com.netease.yunxin.kit:call-pstn:1.5.4') {
		exclude group: 'com.netease.nimlib'// 去除组件依赖的 IM sdk
 		exclude group: 'com.netease.yunxin', module: 'nertc' // 去除组件依赖的 NERTC sdk
 }
  1. 初始化呼叫组件。

    使用 PSTN 语音融合呼叫时,需要将集成组件中的初始化代码替换为如下代码。

javaCallKitUIOptions options = new CallKitUIOptions.Builder()
			// 必要:音视频通话 sdk appKey,用于通话中使用
			.rtcAppKey(appKey)
			// 必要:当前用户 AccId
			.currentUserAccId(“currentUserAccIdFromIM”)
			// 通话接听成功的超时时间单位 毫秒,默认30s
			.timeOutMillisecond(30 * 1000L)
			// 此处为 收到来电时展示的 notification 相关配置,如图标,提示语等。
			.notificationConfigFetcher(invitedInfo -> new CallKitNotificationConfig(R.drawable.ic_logo))
			// 收到被叫时若 app 在后台,在恢复到前台时是否自动唤起被叫页面,默认为 true
			.resumeBGInvitation(true)
			// 使用 pstn 时必须设置为安全模式
			.rtcTokenService((uid, callback) -> requestRtcToken(appKey, uid, callback)) // 自己实现的 token 请求方法
			// 设置初始化 rtc sdk 相关配置,按照所需进行配置
			.rtcSdkOption(new NERtcOption())
			// 呼叫组件初始化 rtc 范围,true-全局初始化,false-每次通话进行初始化以及销毁
			// 全局初始化有助于更快进入首帧页面,当结合其他组件使用时存在rtc初始化冲突可设置false
			.rtcInitScope(true)
  
// pstn 初始化参数配置
PstnCallKitOptions pstnOptions = new PstnCallKitOptions.Builder(options)
  		// 融合呼叫超时时间
			.timeOutMillisecond(60 * 1000)
  		// rtc 呼叫转 pstn 呼叫时间,此配置会覆盖 CallKitUIOptions.timeOutMillisecond 配置
  		.transOutMillisecond(30 * 1000) 
			.build();
// 初始化 pstn 功能组件,若需要使用 rtc 功能不需要重新初始化
PstnUIHelper.init(getApplicationContext(), pstnOptions);
  1. 在实现一对一通话中,增加如下代码触发语音融合呼叫。 其他步骤与实现一对一呼叫中的一致。
java  // 构建 rtc 呼叫参数
  // @param type:呼叫类型 1-音频呼叫,2-视频呼叫
  // @param callerAccId: 呼叫方 IM 账号 Id
  // @param calledAccId: 被叫方 IM 账号 id
  CallParam param = CallParam.createSingleCallParam(1,"用户A AccId","用户B AccId");
  
  // 发起融合呼叫先 rtc 呼叫超时后转 pstn 呼叫
  // @param param rtc呼叫参数
  // @param phone 被叫用户手机
  PstnUIHelper.startSingleCallWithPstn(context, new PstnCallParam(param, phone));
此文档是否对你有帮助?
有帮助
去反馈
  • 前提条件
  • 注意事项
  • 技术原理
  • 实现流程