实现高接通

更新时间: 2022/12/05 08:19:00

基于云信在融合通信领域的多年技术积累,网易云信高接通方案致力于提高在线呼叫的接通率,为用户提供更优质的音频通话体验。高接通方案包括应用保活与融合呼叫功能,覆盖用户的通话前、通话中、通话后的全通话生命周期,时刻保障通话的体验和高接通率。

功能介绍

应用保活

在传统呼叫方案中,当音视频应用退到后台后无法接收到来电,短时间内会被系统静默,导致呼叫接通率低。网易云信高接通应用保活方案可以延长应用存活时间,在应用存活期间通过从后台拉起呼叫界面的强提示方式,从应用存活层面提升接通率。

融合呼叫

网易云信高接通融合呼叫方案,通过融合通信技术,提供互联网域与电话网域的双向通信能力,目前支持 App 内纯互联网域的音视频通话转为电话网域,例如呼叫时对方无法接听,可以转呼到运营商网络,通过拨打被叫手机号的方式来进行呼叫,保障每次问诊都能触达患者,提高接通率。

融合呼叫的架构如下图所示。

融合呼叫架构图

架构说明如下:

  1. NERTC 用户 A 呼叫 NERTC 用户 B。
  2. NERTC 用户 B 在设定的时间(例如 15s)内没有接听。
  3. 呼叫组件自动通过 PSTN 呼叫用户 B 的手机号。

诊前短信提醒

网易云信高接通方案,通过融合通信技术,提供互联网域与电话网域的双向通信能力,您可以在音视频问诊前,通过向被叫发起短信通知语音短信通知,提前提醒用户接听呼叫,提高接通率。

  • 在短信中可以插入 DeepLink 链接,用户点击可以直接打开 App 发起业务。

  • 在语音短信中支持千人千面定制语音短信内容,对用户直接进行消息触达。

诊前提醒.png

号码认证

将常用外呼号码进行运营商号码认证,避免接听方(患者)误以为是骚扰、广告电话等,提高接听率。

号码认证@3x.png

实现应用保活

  1. 开启应用保活。

       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 参考请参见应用保活

  2. 关闭应用保活。

       closeHighKeepAlive(context);
    
       public static void closeHighKeepAlive(Context context) {
        ForegroundKit.getInstance(context.getApplicationContext()).release();
    }
    

实现融合呼叫

融合呼叫时序图

uml diagram

前提条件

  • 请联系商务经理为您的应用开启融合呼叫功能。
  • 已实现 RTC 呼叫,具体请参见客户端实现

实现PSTN 呼叫

  1. 添加 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);
    
  2. (可选)移除 PSTN 呼叫监听。

    PstnFunctionMgr.removeCallback(pstnCallback);
    
  3. 发起 PSTN 呼叫。

    CallParam callParam = CallParam.createSingleCallParam(ChannelType.AUDIO.getValue(), "主叫AccId", "被叫AccId", "自定义信息");
    PstnCallParam pstnCallParam = new PstnCallParam(callParam, "phone number", null);
    PstnFunctionMgr.callWithCor(pstnCallParam);
    
  4. 挂断 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) {

                        }
                    });

实现号码认证

该功能无需代码实现,请在官网首页通过微信、在线消息或电话等方式联系云信商务经理开通。

此文档是否对你有帮助?
有帮助
去反馈
  • 功能介绍
  • 应用保活
  • 融合呼叫
  • 诊前短信提醒
  • 号码认证
  • 实现应用保活
  • 实现融合呼叫
  • 融合呼叫时序图
  • 前提条件
  • 实现PSTN 呼叫
  • 实现短信通知
  • 实现号码认证