目录

Android


一 产品介绍/快速入门

AI面签通过机器人提问的形式取代真实的坐席,从【签里眼视频面签SaaS管理系统】抓取预先配置好的话术流程,基于客户的业务需求,通过TTS和ASR相关技术,进行问题提问和语义解析,并根据客户的回答内容进行判断以及后续流程节点的流转提问来实现整个面签过程的去人工化和自动化,并将全过程进行音视频录制留存。

实现的相关功能点如下:

            ✔ 音视频通话

            ✔ 云端录制

            ✔ 活体人脸核身

            ✔ ASR语义解析

            ✔ TTS语音合成

            ✔ 防出框比对

            ✔ 动态话术配置(含证件托举)

            ✔ 合同签名

二开发者手册

1. 请联系相关商务人员开通租户权限,获取【企业账号】。

1. (按需提供)发起人脸识别需要姓名、证件号、大头照的base64(可有可无)。如果业务系统已经有了人脸识别,需要提供人脸识别的结果和大头照的base64。

2. 需要在【签里眼视频面签SaaS管理系统】进行话术等相关数据配置,生成话术获取到话术ID

三接口开发手册

3.1 build.gradle配置

在app目录下的build.gradle文件中android块中配置相关的sourceSets标签,如果没有使用该标签则新增,代码如下

sourceSets {
    main {
        jniLibs.srcDirs = ['libs']
    }
}

dependencies {
    implementation files('libs\\newlibrary-release.aar')
    implementation files('libs\\libspinner.aar')
    implementation files('libs\\loadLibrary.aar')
    implementation 'androidx.multidex:multidex:2.0.1'
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'com.qianwen:okhttp-utils:3.8.0'
    implementation 'com.squareup.okhttp3:okhttp:4.0.1'
    implementation 'com.squareup.okhttp3:logging-interceptor:3.4.0-RC1'
    implementation 'com.squareup.retrofit2:retrofit:2.0.2'
    implementation 'com.squareup.retrofit2:adapter-rxjava:2.0.2'
    implementation 'com.squareup.retrofit2:converter-gson:2.0.2'
    implementation 'io.reactivex:rxandroid:1.1.0'
    implementation 'io.reactivex:rxjava:1.1.3'
    implementation 'androidx.recyclerview:recyclerview:1.1.0'
    implementation 'com.github.yalantis:ucrop:2.2.4'
    implementation 'com.google.android.material:material:1.0.0-rc01'
    implementation 'com.github.vondear:RxTools:v1.7.8.1'
    implementation 'com.tbruyelle.rxpermissions:rxpermissions:0.9.4@aar'
    implementation 'org.greenrobot:greendao:3.2.2'
    implementation 'com.qianwen:update-app:3.5.2'
    implementation files('libs\\WbCloudFaceReflectLiveSdk-v2.1.91-09c9fe1.aar')
    implementation files('libs\\WbCloudNormal-v4.0.0-9267e3d.aar')
}

如果有android.V4包冲突,请删除本项目中V4包的引用,升级为androidX中对应的引用更换为

implementation 'androidx.appcompat:appcompat:1.1.0'

3.2权限声明

添加权限声明到AndroidManifest.xml文件


<!-- 为了能使用OpenGLES 2.0 API,你必须在你的manifest中添加以下声明: -->
     <uses-feature android:glEsVersion="0x00020000" android:required="true" />
     <!-- 如果你的应用要使用纹理压缩功能,你必须还要声明设备需要支持什么样的压缩格式 -->
     <supports-gl-texture android:name="GL_OES_compressed_ETC1_RGB8_texture" />
     <supports-gl-texture android:name="GL_OES_compressed_paletted_texture" />
     <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
     <uses-permission android:name="android.permission.RECORD_AUDIO" />
     <uses-permission android:name="android.permission.RECORD_VIDEO" />
     <uses-permission android:name="android.permission.CAMERA" />
     <uses-permission android:name="android.permission.READ_PHONE_STATE" />


3.2.1 开发环境中设置的compileSdkVersion高于23(Android6.0)时以上时,请注意添加相机,录音和内部存储空间的动态权限

     Manifest.permission.CAMERA
     Manifest.permission.RECORD_AUDIO
     Manifest.permission.WRITE_EXTERNAL_STORAGE
     Manifest.permission.READ_PHONE_STATE

3.2.2 检查是否开启动态权限


/** 查看是否权限 返回值为true代表权限已经全部开启**/
     public boolean checkPermission(String... permissions) {
        //如果android版本低于Android6.0,默认为开启权限(无危险权限)
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) return true;
        PackageManager pm = contextWeakReference.get().getPackageManager();
        for(String permission : permissions) {
           if (PackageManager.PERMISSION_GRANTED !=
           pm.checkPermission(permission, contextWeakReference.get().getPackageName())) {
           return false;
           }
        }
        return true;
     }


3.2.3 添加缺省的动态权限


 / **  获取需要申请权限的列表 ** /
     private List<String> findDeniedPermissions(String[] permissions) {
        List<String> needRequestPermissionList = new ArrayList<>();
        for (String perm : permissions) {
            if (ContextCompat.checkSelfPermission(contextWeakReference.get(), perm)!=PackageManager.PERMISSION_GRANTED) {
               needRequestPermissionList.add(perm);
            } else {
               if (ActivityCompat.shouldShowRequestPermissionRationale(activityWeakReference.get(), perm)) {
                  needRequestPermissionList.add(perm);
               }
            }
         }
         return needRequestPermissionList;
     }


3.3 集成sdk Library

将sdk library集成到 本SDK 依赖到项目

把libs文件夹中的arr包,放置项目的libs文件夹下

3.4 定义项目配置清单

需要在本项目的AndroidManifest.xml 文件中加入provider 标签,并且修改标签中authorities 属性为自己项目的包名即可,如下标注位置

<provider
            android:name="androidx.core.content.FileProvider"
            tools:replace="android:authorities"
            android:authorities="com.bufeng.videoSDK"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data  android:name="android.support.FILE_PROVIDER_PATHS"  android:resource="@xml/file_paths" />
</provider>
需要注意 
● 远程面签需要 合作方 通过API 获取 队列信息。然后发起面签。
● 自主面签面签结束后,如果没有网络或不想上传的情况下,可以点击退出系统,然后合作方保存本次未上传视频的名称和相关信息,然后下次直接调用上传的接口。

3.5 初始化sdk

项目中自定义Application需继承SDK中的PureApplication对象,并且重写attachBaseContext方法 ,方法如下。

@Override

protected void attachBaseContext(Context base) {

    super.attachBaseContext(base);

    MultiDex.install(base);

}

3.5.1 登录SDK


调起SDK方法PureVersionSDK类中的doLoginSDK方法,参数如下:

/**
     * 登录SDK
     * @param context         上下文
     * @param accountId       企业账号
     * @param business_id     业务ID
     * @param assist_id       辅助ID
     * @param companyName     公司名称
     * @param doLoginCallBack 登录回调接口
     */
其中 DoLoginCallBack 登录回调接口格式如下:

public interface DoLoginCallBack {
       void onSuccess(DoLoginResult doLoginResult);
       void onFail(String message);
}
在onSuccess方法中启动面签服务

3.5.2 启动面签

调起SDK方法PureVersionSDK类中的startInterview方法,参数如下:

/**
     * 
     * @param activity 当前activity实例
     * @param interviewInformation 面签实体类
     * @param onExitVideoCallBack   退出面签回调
     */

3.6 User 活体核身实体类

//是否使用人脸识别
   private boolean useFaceIdentification = false;
//使用人脸识别必填参数

//人员名称
private String name = "";
//证件号
private String idNumber = "";
//人脸识别失败是否继续业务流程
private boolean nextFail = false;  
//是否使用默认人脸对比源
private boolean useDefaultFaceImg = false;
//默认人脸比对源(useDefaultFaceImg 为true必填,false选填)
private String defaultComparisonSource ; 
 
//不使用人脸识别必填参数(自定义设置识别结果)

//人脸识别结果 1成功 2失败 3未识别
private int faceResult = 1;    
//人脸对比相似度(0.0—100.0)
private String similarity = "0.0";
3.7活体人脸核身

请联系合作方配置活体人脸核身相关参数后调用

/**
     * 人脸识别
     *
     * @param businessId 业务ID
     * @param userList   人脸识别用户集合
     * @param userIndex  当前要进行人脸核身用户索引
     */
    private void startFace(String businessId, List userList, int userIndex,) {
        PureVersionSDK.getInstance().startFaceIdentification(MainActivity.this, businessId, userList, userIndex, new FaceResultCallback() {
            @Override
            public void onFaceResultSuccess() {
              //人脸识别成功
            }

            @Override
            public void onFaceResultFailed(String result) {
//人脸识别失败 
            }

            @Override
            public void onStartFaceResultActivity(int index, 
List userInfoList) {
              //继续识别或者启动面签服务  
startInterView(index, userInfoList)
             
            }
        });
    }

3.8 视频面签类型及传递参数

3.8.1 AI自助面签(INTERVIEW_TYPE_AI)
      //AI自助面签类型
      private int faceType = FaceType.INTERVIEW_TYPE_AI;
      //用户昵称(唯一必填)  
      private String nickName;
      //合同文件(必填)
      private String signatureUrl;
      //话术ID(必填)
      private String trickId;
      //话术参数(必填 需要参数key value,json串)
      private String trickParam;
      //话术中是否包含身份证托举(必填)
      private boolean isIdentificationCard; 
      //AI面签 回答错误三次是否转远程(选填)
      private boolean isAITurnRemote;
      //队列编号 (转远程队列编号 选填)

      private String queueId;

      //人脸比对时间间隔(选填)
      private int faceCompareTime = 10;  
      //人脸比对源(选填  data:image/jpg;base64,开头)
      //对比优选级:人脸识别>默认比对图>人脸比对图片
      PureApplication.getInstance().setFaceComparePicture(compareSourcePicture);
      //活体人脸检测集合(可自定义)
      private List userInfoList;

四 版本更新日志

2023.06.21
照片水印横竖屏模式适配
2022.02.06
照片水印横竖屏模式适配
增加合同查看/合同签名屏幕共享功能
2022.09.02
优化Intent传递图片数据崩溃问题
优化话术播报文字变色字号显示问题
优化地理位置信息解析逻辑
2022.08.11
AI自助面签增加人脸出框识别功能
2022.08.08
优化视频水印功能
2022.06.15
AI面签增加话术朗读:文字滚动功能
AI面签增加话术朗读:文字实时变色功能
2022.04.19
优化人脸比对功能
人脸出框相似度修改为后台控制
优化话术播报卡顿问题
2022.01.15
优化活体人脸核身功能
增加活体人脸核身错误码/错误信息回调
2021.11.27
新增地理位置上报功能
2021.05.11
优化视频播放功能,提高视频播放速度
优化部分机型无法调起原生相机拍照功能
2021.03.23
AI自助面签增加合同浏览/合同签名功能
remotelyRiskVoideUrl 传入本地视频地址 
修改文件夹路径可查看 
修改安卓卓分辨率 
本地风险视频地址 copyAssetAndWrite方法实现
2020-12-03
public void exitVideoCallBack(String latitudeLongitude ,String locationInformation) {}
新增 : latitudeLongitude ;locationInformation; 经纬度 ;地理位置信息
2020-11-24
requestpersonInfo方法
新增远程面签风险视频地址,仅支持https并且与坐席端同域;
新增水印公司名称必传;
新增功能: 拍照水印; 无人工坐席面签; 网络检测转自助


H5


1. 产品介绍/快速入门

AI面签通过机器人提问的形式取代真实的坐席,从【签里眼视频面签SaaS管理系统】抓取预先配置好的话术流程,基于客户的业务需求,通过TTS和ASR相关技术,进行问题提问和语义解析,并根据客户的回答内容进行判断以及后续流程节点的流转提问来实现整个面签过程的去人工化和自动化,并将全过程进行音视频录制留存。

实现的相关功能点如下:

√  音视频通话

√  云端录制

√  活体人脸核身

√  视频活体比对

√  ASR语义解析

√  TTS语音合成

√  防出框比对

√  高精度活体

√  轨迹回溯

√  动态话术配置


2. 开发者手册

请先联系相关人员开通企业权限,获取【企业账号】

3. 接口开发手册

1. 链接调整

从您的业务系统打开指定的路径,或者短信链接方式携带指定路径,如果您有对应的开发能力,建议将链接进行短链接处理:

https://***.**.com/***/signingeyeH5_AI/m_index.htmlbusinessId=****&tenantKid=***&queueID=***

参数说明:

 

2. 业务系统订单信息接口(需客户提供)

此接口需要是https协议,接口用于校验用户的面签状态和客户面签信息。 请在js/dataProcessing.js的代码处替换为您自己的业务接口。

 

签里眼视频面签SaaS管理系统配置对应的AI话术和动态参数关键字。

在贵司业务系统内将订单与AI话术,动态参数关键字进行赋值组装json

参数speedParams的keyCode里面放置AI话术库里面的动态关键字,keyValue放置订单具体的业务信息。例如:配置AI话术,【请问您是#Cname#吗?】【请问您的身份证号是##吗?】 业务订单‘张三丰’的AI面签就需要传入:[{"keyCode":"Cname","keyValue":"张三丰"},{"keyCode":"IDnumber","keyValue":"101011100111111118"}]

 

3. AI面签信息保存接口(需客户提供)

此接口需要是https协议,调用业务系统的订单信息保存接口将AI面签信息进行保存,请在js/index.js的代码处替换为您自己的业务接口。

 

 

 

 

4. 视频资源获取接口(需实时调用获取)

接口地址:/api/blade-video/video/order/upload/cloudroomVideoQuery

请求类型:application/x-www-form-urlencoded

请求方式:get

接口备注:接口描述

调试工具:ApiPost

Tips:备注:本接口在抓取资源之前需要实时调用获取

参数说明:

 

返回参数说明:

 

返回示例:

 

5. 附录

1. 返回码列表

 

 

4. 更新记录

2023-8-16

修复已知bug,优化相关逻辑

2023-5-16

增加已知的不兼容机型提醒

2022-11-28

优化部分机型不支持面签提醒;

话术水印重叠;

远端打印日志;

手机字体过大导致页面布局错乱

2022-10-22优化语音播报相关逻辑,修改为单页面多模块实现

2022-9-2 新建签约质检版本

iOS


产品介绍/快速入门

AI面签通过机器人提问的形式取代真实的坐席,从【签里眼视频面签SaaS管理系统】抓取配置好的话术流程,基于客户的业务需求,通过TTS和ASR相关技术,进行问题提问和语义解析,并根据客户的回答内容进行判断以及后续流程节点的流转提问来实现整个面签过程的去人工化和自动化,并将全过程进行音视频录制留存。

实现的相关功能点如下:

√  音视频通话

√  云端录制

√  活体人脸核身

√  ASR语义解析

√  TTS语音合成

√  防出框比对

√  动态话术配置(含证件托举)

√  合同签名

 

开发手册

1. 请联系相关商务人员开通租户权限,获取【企业账号】。

2. (按需提供)发起人脸识别需要姓名、证件号、大头照的base64(可有可无)。如果业务系统已经有了人脸识别,需要提供人脸识别的结果和大头照的base64。

3. 需要在【签里眼视频面签SaaS管理系统进行话术等相关数据配置,生成话术获取到话术ID

接口开发手册

2.1 添加依赖框架、静态库、动态库

SDK 依赖以下系统框架,需要在【Build Phases>Link Binary With Libraries】中添加,可以参考 Demo,具体依赖如下:

  

2.2 添加权限

SDK 需要使用相机、相册和录音权限,请在 info.plist 中添加:

Privacy - Microphone Usage Description

Privacy - Camera Usage Description

Privacy - Location When In Use Usage Description

Privacy - Photo Library Usage Description

Supports opening documents in place  = YES (documents 文件可访问)

Application supports iTunes file sharing =  YES (documents 文件可访问)

2.3 设置

1.需要在【BuildSettings>Other Linker Flags】中设置:-ObjC

2.需要在【BuildSettings> Enable Bitcode】中设置为 NO

2.4 依赖的三方库

 

 

接口开发手册

3.1初始化方法

appdelegate didFinishLaunchingWithOptions 方法中调用SDK初始化的方法。

[[SigningESDK sharedInstance]initSDK];

[SigningESDK sharedInstance].delegate = self;

 

可以在代理方法中查看初始化结果:

#pragma mark - SigningESDKDelegate

-(void)SigningESDKinitResult:(SEInitResult *)result{

   

}

3.2 调起面签服务:

SEVideoManager *manager = [SEVideoManager sharedInstance];

manager.delegate = self;

/**

 调起服务

@param tenantID 企业账号,需要在后台申请

@param contractID辅助编号

@param businessID 业务编号

*/

[manager videoWithTenantID:tenantID contractID:contractID businessID:businessID];

3.3 调起上传未上传视频的服务

/**

  上传视频

  @param videoName 视频名称

  @param tenantID 企业账号

  @param contractId 辅助编号

  @param businessID 业务编号

  */

[[SEVideoManager sharedInstance]uploadVideoWithVideoName:videoName tenantID:tenantID contractId:businessID businessID:businessID];

3.4 需要实现的代理方法
3.4.1是否继续视频面签的服务

-(BOOL)SEVideoServiceContinue;

3.4.2人脸识别的数据从这个代理方法中取

/**

   1、如果业务系统不需要人脸识别的功能,

     姓名 name 和 证件号 非必传

   2、如果需要人脸识别的功能,姓名 name 和证件号 idNo 必传,

     人脸识别结果faceVerifyResultTypesourcePhotoStr 为非必传,

sourcePhotoStr参数有值:使用合作伙伴提供的比对源照片进行比对,必须注照片是正脸可信照片,照片质量由合作方保证。参数为空 :根据身份证号 + 姓名使用权威数据源比对

 

    SEFaceVerifyData *faceData = [[SEFaceVerifyData alloc]init];

    faceData.idNo = @"130422199201111111;//证件号

    faceData.name = @"张三”;//姓名

    faceData.faceVerifyResultType = SEFaceVerifyResultTypeSuccess;

    faceData.sourcePhotoStr = @"/9j/4AAQSkZJRgAB……”;// BASE64String 比对源照片,注意:原始图片不能超过 500k,且必须为 JPG PNG 格式。

    */

-(SEFaceVerifyData *)SEVideoServiceWithFaceVerifyData;

 

3.4.3 返回人脸识别的结果

/// @param faceVerifyResult 人脸识别的结果

-(void)SEVideoServiceWithFaceVerifyResult:(SEFaceVerifyResult *)faceVerifyResult;

3.4.4 视频面签的数据

-(SEInterviewData *)SEVideoServiceWithInterviewData;

SEInterviewData *interViewData = [[SEInterviewData alloc]init];

interViewData.userName = 用户唯一标识(必传)

interViewData.tenantName = @”公司名称”//(必传)

interViewData.wordCode = 话术id

interViewData.contractAddress = 合同地址

interViewData.pramas = 话术id需要参数(key value,json)

interViewData.isLiftWord = @1//1是有证件托举  0是没有证件托举

interViewData.interviewType = SEInterviewTypeAiAuto //面签方式(必传)

版本更新日志

2023.7 版本号 2.3.0

AI面签自助面签新增实时人脸出框检测

2023.4版本号 2.3.0

AI面签自助面签新增实时人脸出框检测

2022.12 版本号 2.2.9

AI面签文字自动滚动加染色效果

2022.5 版本号 2.2.8

新增AI面签旗舰版模式

2021.11 版本号2.2.6

适配优化 ios 15 的导航栏问题
修改屏幕共享方案

2021.9 版本号2.2.2
AI自助增加上传比对源图片

2021.8 版本号2.2.0
横屏页面适配优化
升级优化视频基础库SDK

2021.7 版本号2.1.6

新增AI面签功能支持单分支多分支话术

2021.6 版本号2.1.6

增加面签结果页面
增加证件托举功能话术
优化人脸比对流程

2021.1.8 版本号2.1.2

remotelyRiskVoideUrl 增加 传入本地视频地址 http视频地址  
增加远程面签及无人工面签操作按钮区域 
无人工面签title文案修改

2020-12-03

自助录制时退出提醒 
SEVideoResult 中添加 地理位置信息,经纬度

2020-11-23

新增远程面签风险视频地址仅支持https并且与坐席端同域

新增水印公司名称必传

新增功能: 拍照水印; 无人工坐席面签; 网络检测转自助


小程序


1. 产品介绍/快速入门

AI面签通过机器人提问的形式取代真实的坐席,从后台抓取配置好的话术流程,基于客户的业务需求,通过TTS和ASR相关技术,进行问题提问和语义解析,并根据客户的回答内容进行判断以及后续流程节点的流转提问来实现整个面签过程的去人工化和自动化,并将全过程进行音视频录制留存。实现的相关功能点如下:

√  音视频通话

√  云端录制

√  活体人脸核身

√  视频活体比对

√  ASR语义解析

√  TTS语音合成

√  防出框比对

√  动态话术配置

√  高精度活体

2. 开发者手册

1. 请先联系相关人员开通企业权限,获取【企业账号】

2. 请将签里眼提供的相关域名添加到贵司小程序白名单内

3. 请将我司小程序开发人员添加开发者权限

4. 请从业务场景核实短信内短连接的有效期,默认5天。可支持1天,3天,5天,15天和30天的有效期设置,从短信发送时刻算起,超期无法使用此链接调起指定小程序。

5. 注:此有效期是微信的官方设置时间戳,暂时只能是一个企业账号使用一个共用规则,无法做到一个订单一个有效期。

3. 接口开发手册

1. 短信发送接口(自动跳转解析的小程序)

此接口如需定制短信【企业签名】,【短信模板内容】请提前与商务沟通,预留出短信运营商模板等申请审核时间,需要出具授权书。

 

接口地址:/api/blade-system/smsctrl/sendSmsScheme

请求类型:multipart/form-data

请求方式:Post

接口备注:接口描述

调试工具:ApiPost

 

Tips:由于微信的scheme短链接对于字符的限制要求,除订单业务编号信息外的相关信息暂无法携带,对应的业务场景需要以内部接口交互方式实现。

2. 业务系统订单信息接口(需客户提供)

此接口需要是https协议,接口用于在小程序端校验用户的面签状态和面签信息。

签里眼后台配置对应的AI话术和动态参数关键字。

在贵司业务系统内将订单与AI话术,动态参数关键字进行赋值组装json

 

参数speedParamskeyCode里面放置AI话术库里面的动态关键字,keyValue放置订单具体的业务信息。例如:配置AI话术,【请问您是#Cname#吗?】【请问您的身份证号是##吗?】 业务订单张三丰AI面签就需要传入:[{"keyCode":"Cname","keyValue":"张三丰"},{"keyCode":"IDnumber","keyValue":"101011100111111118"}]

 

3. 小程序AI面签信息保存接口(需客户提供)

此接口需要是https协议,调用业务系统的订单信息保存接口将AI面签信息进行保存,AI面签过程中产出的字段信息如下:

 

 

4. 视频资源获取接口(需实时调用获取)

接口地址:/api/blade-video/video/order/upload/cloudroomVideoQuery

请求类型:application/x-www-form-urlencoded

请求方式:get

接口备注:接口描述

调试工具:ApiPost

Tips:备注:本接口在抓取资源之前需要实时调用获取

 

 

返回示例:

 

5. 面签之前活体检测结果回传接口(客户提供)

本结果只做活体比对,请提供已经经过权威核验了的图片base64比对源图片,活体检测只是对当前录制的视频,进行活体检测,然后与您传入的人像base64图片进行是否是一人的检测比对,无法确保身份证件信息的权威性

 

6. 面签过程中每次回答内容保存接口(客户提供),如不需要此功能可忽略

 

7. 返回码列表