实现高接通
更新时间: 2024/08/02 11:33:26
基于云信在融合通信领域的多年技术积累,网易云信高接通方案致力于提高在线呼叫的接通率,为用户提供更优质的音频通话体验。高接通方案包括应用保活与融合呼叫功能,覆盖用户的通话前、通话中、通话后的全通话生命周期,时刻保障通话的体验和高接通率。
功能介绍
应用保活
在传统呼叫方案中,当音视频应用退到后台后无法接收到来电,短时间内会被系统静默,导致呼叫接通率低。网易云信高接通应用保活方案可以延长应用存活时间,在应用存活期间通过从后台拉起呼叫界面的强提示方式,从应用存活层面提升接通率。
融合呼叫
网易云信高接通融合呼叫方案,通过融合通信技术,提供互联网域与电话网域的双向通信能力,目前支持 App 内纯互联网域的音视频通话转为电话网域,例如呼叫时对方无法接听,可以转呼到运营商网络,通过拨打被叫手机号的方式来进行呼叫,保障每次问诊都能触达患者,提高接通率。
融合呼叫的架构如下图所示。
架构说明如下:
- NERTC 用户 A 呼叫 NERTC 用户 B。
- NERTC 用户 B 在设定的时间(例如 15s)内没有接听。
- 呼叫组件自动通过 PSTN 呼叫用户 B 的手机号。
诊前短信提醒
网易云信高接通方案,通过融合通信技术,提供互联网域与电话网域的双向通信能力,您可以在音视频问诊前,通过向被叫发起短信通知或语音短信通知,提前提醒用户接听呼叫,提高接通率。
-
在短信中可以插入 DeepLink 链接,用户点击可以直接打开 App 发起业务。
-
在语音短信中支持千人千面定制语音短信内容,对用户直接进行消息触达。
号码认证
将常用外呼号码进行运营商号码认证,避免接听方(患者)误以为是骚扰、广告电话等,提高接听率。
实现应用保活
-
开启应用保活。
openHighKeepAlive(context); public static int openHighKeepAlive(Context context) { Context appContext = context.getApplicationContext(); if (ForegroundKit.getInstance(appContext).checkNotifySetting()) { ForegroundKit instance = ForegroundKit.getInstance(appContext); int result = instance.init(AppConstants.getAppKey(), 10000); return result; } return -1; }
详细的实现步骤和 API 参考请参见应用保活。
-
关闭应用保活。
closeHighKeepAlive(context); public static void closeHighKeepAlive(Context context) { ForegroundKit.getInstance(context.getApplicationContext()).release(); }
实现融合呼叫
融合呼叫时序图
前提条件
- 请联系商务经理为您的应用开启融合呼叫功能。
- 已实现 RTC 呼叫,具体请参见客户端实现。
实现PSTN 呼叫
-
添加 PSTN 呼叫监听。
private AbsPstnCallback pstnCallback = new AbsPstnCallback() { @Override public void onDirectCallAccept(int code) { LogUtil.i(TAG, "onDirectCallAccept,code:" + code); // pstn被叫接听回调 } @Override public void onDirectCallDisconnectWithError(int code, @Nullable String errorMsg) { LogUtil.i(TAG, "onDirectCallDisconnectWithError,code:" + code + ",errorMsg:" + errorMsg); // pstn 通话中,对方断开链接时触发此回调 } @Override public void onDirectCallHangupWithReason(int reason, int code, @Nullable String errorMsg, boolean isCallEstablished) { LogUtil.i(TAG, "onDirectCallHangupWithReason:reason:"+reason+",code:" + code + ",errorMsg:" + errorMsg + ",isCallEstablished:" + isCallEstablished); // pstn 通话,挂断原因 } @Override public void onTimeOutWithPstn() { super.onTimeOutWithPstn(); LogUtil.i(TAG, "onTimeOutWithPstn"); // 融合呼叫通话超时 } @Override public void onDirectCallRing(int code) { LogUtil.i(TAG, "onDirectCallRing,code:" + code); // pstn 通话,被叫方开始响铃 } @Override public void onDirectStartCall(int code, @Nullable String errorMsg) { LogUtil.i(TAG, "onDirectStartCall,code:" + code + ",errorMsg:" + errorMsg); // pstn 开始呼叫回调 } @Override public void onRtcCallHangupResult(@NonNull ResultInfo<Void> result) { LogUtil.i(TAG, "onRtcCallHangupResult,result:" + result); // rtc挂断回调 } @Override public void onRtcCallResult(@NonNull ResultInfo<ChannelFullInfo> result) { LogUtil.i(TAG, "onRtcCallHangupResult,result:" + result); // rtc呼叫结果回调 } @Override public void onTransError(@NonNull ResultInfo<?> result) { LogUtil.i(TAG, "onTransError,result:" + result); //pstn 通话异常 } }; PstnFunctionMgr.addCallback(pstnCallback);
-
(可选)移除 PSTN 呼叫监听。
PstnFunctionMgr.removeCallback(pstnCallback);
-
发起 PSTN 呼叫。
CallParam callParam = CallParam.createSingleCallParam(ChannelType.AUDIO.getValue(), "主叫AccId", "被叫AccId", "自定义信息"); PstnCallParam pstnCallParam = new PstnCallParam(callParam, "phone number", null); PstnFunctionMgr.callWithCor(pstnCallParam);
-
挂断 PSTN 呼叫。
PstnFunctionMgr.hangup();
实现短信通知
HttpService.sendSms(calledMobile, callerUserName).subscribe(new ResourceSingleObserver<BaseResponse>() {
@Override
public void onSuccess(BaseResponse baseResponse) {
LogUtil.i(TAG, "sendSms,calledMobile:" + calledMobile + ",callerUserName:" + callerUserName + ",data:" + baseResponse.data);
}
@Override
public void onError(Throwable e) {
}
});
实现号码认证
该功能无需代码实现,请在官网首页通过微信、在线消息或电话等方式联系云信商务经理开通。
此文档是否对你有帮助?