呼叫能力 (Andorid-SDK)
# 呼叫能力 (Andorid-SDK)
智齿客服为企业提供了一整套完善的智能客服解决方案。智齿呼叫 SDK 为其提供所有呼叫相关功能支持,仅需提供使用的账户,就能完成呼叫任务、外呼、呼叫监听、呼叫记录等操作。
智齿呼叫 SDK 具有以下特性:
- 提供登录-使用-退出完整流程。
- 分 2 种登录模块,外部登录同步 token 和常规用户名、密码登录。
- 支持呼叫话机注册、呼叫记录查询、呼叫监听、座席状态切换等基础功能。
相关限制及注意事项:
1、Android SDK 支持安卓系统 5.0 (API 21)以上版本,支持竖屏和横屏。
2、开发工具 Android Studio 建议升级到 3.0 以上版本。
3、Android SDK 需要麦克风危险权限,否则部分功能无法使用。
4、SDK 不可与智齿客服 APP 中的呼叫功能以及智齿 PC 工作台中呼叫功能同时使用。
# 文档介绍
# ● 集成流程示意图
# ● 文件说明
SDK 文件包含 SDK 源码包 (sobotcall) 、 Demo 源码 (sobot_call_sdk_demo) 、 Demo 安装包(sobot_call_sdk_demo.apk) 、和 Doc 相关说明文档。
文件 | 描述 |
---|---|
ZCSobotCallApi | 该文件提供接入功能 |
# 集成方式
# ● 依赖集成
api 'com.sobot.call:sobotcall_x:+'
在 build.gradle 中如下所示:
dependencies {
api 'com.sobot.call:sobotcall:+'
implementation 'com.squareup.okhttp3:okhttp:4.4.0'
implementation 'androidx.appcompat:appcompat:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.0.0'
//目前支持常见的几种图片加载库,必须在下面的图片加载库中选择一个添加依赖
//implementation 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
//implementation 'com.squareup.picasso:picasso:2.71828'
//implementation 'com.facebook.fresco:fresco:2.6.0'
implementation 'com.github.bumptech.glide:glide:4.9.0'
}
2
3
4
5
6
7
8
9
10
11
【注意】
如果您使用的是 picasso 框架,从 3.0.2 版本开始,SDK 默认支持 2.71828 及以上版本。
如果您使用的是 glide v4 框架,从 3.0.2 版本开始,SDK 默认支持 4.9.0 及以上版本。
如果您使用的 3.0.2 之前的SDK版本,但是glide v4 又使用的是 4.9.0 以上版本,您还需要单独添加依赖:'com.sobot.chat:sobotsupport-glidev4:2.3'。
如果您想使用自己的图片加载方法,可以使用以下方法:SobotBitmapUtil.setImageLoader(new SobotImageLoader() {}); 使用这种方式后,网络图片显示时就不会走 SDK 内部的图片加载方式了。
# ● 手动集成
下载链接:Android_Call_Sdk_XXX (opens new window)
导入 Module :
解压下载的智齿 Android_Call_Sdk_XXX.zip 文件,将 sobotcall 文件直接复制到您的项目中,然后 Build --> Clean Project 一下,之后在 build.gradle 中添加项目依赖。
完成上述步骤之后 build.gradle 中如下所示:
dependencies {
implementation project(":sobotcall")
implementation 'com.squareup.okhttp3:okhttp:4.4.0'
implementation 'androidx.appcompat:appcompat:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.0.0'
//目前支持常见的几种图片加载库,必须在下面的图片加载库中选择一个添加依赖
//implementation 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
//implementation 'com.squareup.picasso:picasso:2.71828'
//implementation 'com.facebook.fresco:fresco:2.6.0'
implementation 'com.github.bumptech.glide:glide:4.9.0'
}
2
3
4
5
6
7
8
9
10
11
【注意】
如果您使用的是 picasso 框架,从 3.0.2 版本开始,SDK 默认支持 2.71828 及以上版本。
如果您使用的是 glide v4 框架,从 3.0.2 版本开始,SDK 默认支持 4.9.0 及以上版本。
如果您使用的 3.0.2 之前的SDK版本,但是glide v4 又使用的是 4.9.0 以上版本,您还需要单独添加依赖:'com.sobot.chat:sobotsupport-glidev4:2.3'。
如果您想使用自己的图片加载方法,可以使用以下方法:SobotBitmapUtil.setImageLoader(new SobotImageLoader() {}); 使用这种方式后,网络图片显示时就不会走 SDK 内部的图片加载方式了。
混淆相关:
参照混淆文件(Android_Call_Sdk_x.x.x\sobot_call_sdk_demo\app\proguard-rules.pro)中的混淆配置添加混淆规则。
-dontwarn org.linphone.**
-keep class org.linphone.** { *; }
-dontwarn com.sobot.**
-keep class com.sobot.** { *; }
-keep class org.webrtc.** { *; }
2
3
4
5
# 功能说明
# ● 初始化和域名
【注意:启动智齿呼叫 SDK 之前,需要调用初始化方法,否则将无法启动 SDK。】
初始化方法为本地执行,不会有异步请求。
/**
* 初始化SDK
*
* @param application
*/
ZCSobotCallApi.init(Application application);
2
3
4
5
6
默认是腾讯云环境,如果您是其它环境请设置对应域名。
/**
* 设置域名
*
* @param application
* @param config 配置类
*/
SobotTZCSobotCallApiMApi.setHost(Application applicgtion, SobotCallConfigEntity config);
2
3
4
5
6
7
SobotCallConfigEntity 详情:
属性 | 名称 | 类型 | 可空 |
---|---|---|---|
openApiHost | 通用接口服务地址 | String | 否 |
callApiHost | 呼叫接口服务地址 | String | 否 |
stompSocketUri | 座席信令服务 | String | 否 |
janusSocketUri | janus 消息监听服务 | String | 否 |
# ● 启动智齿页面
方式1:直接启动呼叫系统,自动完成登录并跳转页面。
三种直接启动方法如下:
/**
* 通过邮箱密码方式启动呼叫系统,进入首页
*
* @param context
* @param loginUser 客服账号
* @param loginPwd 登录密码
* @param block 回调结果 可为空
*/
ZCSobotCallApi.startWithAcount(Context context, String loginUser, String loginPwd, SobotResultBlock block) ;
/**
* 通过设置公司token方式启动呼叫系统,进入首页
*
* @param context
* @param loginUser 客服账号
* @param companyToken 公司token
* @param block 回调结果 可为空
*/
ZCSobotCallApi.startWithToken(Context context, String loginUser, String companyToken, SobotResultBlock block) ;
/**
* 通过设置appkey和appid方式启动呼叫系统,进入首页
*
* @param context
* @param loginUser 客服账号
* @param appKey 登录appKey 找售后同事获取(客户账号开通时会有这个)
* @param appId 登录appId 找售后同事获取(客户账号开通时会有这个)
* @param block 回调结果 可为空
*/
ZCSobotCallApi.startWithAppkey(Context context, String loginUser, String appKey, String appId, SobotResultBlock block) ;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
方式2:如有特殊需求,SDK 还提供了以 Fragment 嵌入的方式集成会话界面,开发者可以更灵活的使用 SDK。需要先完成登录,然后再执行跳转。
示例代码如下(也可参考 SobotCallActivity 中 Fragment 的实现)。
SobotCallFragment callFragment =(SobotCallFragment)getSupportFragmentManager().findFragmentById(getResId("sobot_call_contentFrame"));
if (callFragment == null) {
callFragment = SobotCallFragment.newInstance(SobotCallConstant.STARTUP_MODE_ACTIVITY);
ddFragmentToActivity(getSupportFragmentManager(),callFragment, getResId("sobot_call_contentFrame"));
}
public void addFragmentToActivity(FragmentManager fragmentManager, Fragment fragment, int frameId) {
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(frameId, fragment);
transaction.commit();
}
2
3
4
5
6
7
8
9
10
11
# ● 登录
/**
* 通过邮箱密码方式登录呼叫系统
*
* @param context
* @param loginUser 客服账号
* @param loginPwd 登录密码
* @param block 回调结果 可为空
*/
ZCSobotCallApi.loginUser(Context context, String loginUser, String loginPwd, SobotResultBlock block);
/**
* 通过设置公司token方式登录呼叫系统
*
* @param context
* @param loginUser 客服账号
* @param companyToken 公司token
* @param isGoToActivity 是否跳转到呼叫中心页面 true 跳转,false 不跳转
* @param block 回调结果 可为空
*/
ZCSobotCallApi.loginWithCompanyToken(Context context, String loginUser, String companyToken, boolean isGoToActivity, SobotResultBlock block);
/**
* 通过设置appkey和appid方式登录呼叫系统
*
* @param context
* @param loginUser 客服账号
* @param appKey 登录appKey 找售后同事获取(客户账号开通时会有这个)
* @param appId 登录appId 找售后同事获取(客户账号开通时会有这个)
* @param isGoToActivity 是否跳转到呼叫中心页面 true 跳转,false 不跳转
* @param block 回调结果 可为空
*/
ZCSobotCallApi.loginWithAppkey(Context context, String loginUser, String appKey, String appId, boolean isGoToActivity, SobotResultBlock block);
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# ● 退出登录
/**
* 退出系统
* @param context
* @param loginUser 登录账号
* @param block 回调结果 可为空
*/
ZCSobotCallApi.out(Context context, String loginUser, SobotResultBlock block);
2
3
4
5
6
7
# 开放接口
# ● 初始化
初始化SDK,设置域名;
示例:
SobotCallOpenApi.initWithConfig(Application application, SobotCallConfigEntity config, SobotResultBlock block);
# 请求参数
属性 | 名称 | 类型 | 可空 | 说明 |
---|---|---|---|---|
application | 上下文 | Application | 否 | |
config | 初始化参数 | SobotCallConfigEntity | 否 | |
block | 回调函数 | SobotResultBlock | 是 | 接口调用的回调函数。 |
SobotCallConfigEntity 详情:
属性 | 名称 | 类型 | 可空 |
---|---|---|---|
openApiHost | 通用接口服务地址 | String | 否 |
callApiHost | 呼叫接口服务地址 | String | 否 |
stompSocketUri | 座席信令服务 | String | 否 |
janusSocketUri | janus 消息监听服务 | String | 否 |
sipProxy | janus 代理服务 | String | 否 |
# 返回值
回调函数说明 详见 SobotResultBlock 。
# ● 登录
/**
* 通过邮箱密码方式登录
*
* @param context
* @param loginUser 客服账号
* @param loginPwd 登录客服密码
* @param block 回调结果 可为空
*/
SobotCallOpenApi.loginWithAcount(Context context, String loginUser, String loginPwd, SobotResultBlock block);
/**
* 通过设置token方式登录
*
* @param context
* @param loginUser 客服账号
* @param companyToken 公司token
* @param block 回调结果 可为空
*/
SobotCallOpenApi.loginWithToken(Context context, String loginUser, String companyToken, SobotResultBlock block);
/**
* 通过设置appkey和appid方式登录呼叫系统
*
* @param context
* @param loginUser 登录客服账号
* @param appKey 登录appKey 找售后同事获取(客户账号开通时会有这个)
* @param appId 登录appId 找售后同事获取(客户账号开通时会有这个)
* @param block 回调结果 可为空
*/
SobotCallOpenApi.loginWithAppkey(Context context, String loginUser, String appKey, String appId, SobotResultBlock block);
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# ● 签入
- 从一个端调用签入接口会导致其他端断开连接(非座席离线);
- 支持座席服务端的登录状态=离线、在线等全部状态签入。但座席服务端工作状态=呼叫中、振铃中、通话中、保持中、整理中时,不允许签入。
SobotCallOpenApi.agentLogin(Context context, String agentState, String phoneType, String bindExt, String bindMobile, String agentPwd, String serverIP, SobotResultBlock block);
# 请求参数
属性 | 名称 | 类型 | 可空 | 说明 |
---|---|---|---|---|
context | 上下文 | Context | 否 | |
agentState | 登录状态 | String | 是 | 签入成功后的座席登录状态。 1:在线;2:勿扰。 为空时,默认勿扰。 |
phoneType | 接听方式 | String | 否 | 接口指定的接听方式签入成功后,会修改座席默认的接听方式。管理员重置座席接听方式权限也会改变座席默认的接听方式。 pstn:手机;webrtc:网页。 为空时,系统取座席默认的接听方式。 |
bindExt | 绑定分机账号 | String | 否 | 接口指定的分机账号会改变座席设置中绑定的分机账号。 不同座席绑定的分机账号不可相同。数据权限为操作座席已绑定的分机加其他未绑定座席的分机。 |
bindMobile | 绑定电话号码 | String | 是 | 手机号码或固话号码。 接听方式为手机时,绑定电话号码非空,接口指定的绑定电话号码会改变座席设置中绑定的电话号码。 不同座席绑定的电话号码不可相同。 |
unbindExtOnLogout | 离线时解绑分机 | boolean | 是 | false:不解绑;true:离线后自动解绑。 |
thisQueues | 接待技能组组号集合 | List | 否 | 呼叫技能组组号的集合,定义座席可以接待哪些技能组的分配电话。该字段仅限“呼叫功能设置\座席手动选择技能组签入”设置启用之后才生效;未启用时,系统按照座席加入的全部呼叫技能组进行签入。 |
block | 回调函数 | SobotResultBlock | 是 | 接口调用的回调函数。 |
# 返回值
回调函数说明 详见 SobotResultBlock 。
# 成功回调函数返回值
属性 | 名称 | 类型 | 说明 |
---|---|---|---|
agentState | 登录状态 | String | 签入成功后的座席登录状态。 1:在线;2:勿扰。 为空时,默认勿扰。 |
phoneType | 接听方式 | String | 接口指定的接听方式签入成功后,会修改座席默认的接听方式。管理员重置座席接听方式权限也会改变座席默认的接听方式。 sip:SIP话机;pstn:手机;webrtc:网页。 为空时,系统取座席默认的接听方式。 |
bindExt | 绑定分机账号 | String | 接口指定的分机账号会改变座席设置中绑定的分机账号。 为空时,系统取座席设置中绑定的分机账号。 |
bindMobile | 绑定电话号码 | String | 手机号码或固话号码。 接口指定的电话号码会改变座席设置中绑定的电话号码。 为空时,系统取座席设置中绑定的电话号码。 |
reasonCode | 置忙原因 | int | 置忙的原因。 2:勿扰;11:小休;12:小休(培训);13:小休(会议);14:小休(用餐);15:小休(活动);16:小休(自定义1);17:小休(自定义2);18:小休(自定义3)。 |
agentLoginQueueInfos | 接待技能组 | List | 是 |
# 技能组信息 QueueAgentCheckin
属性 | 名称 | 类型 | 说明 |
---|---|---|---|
queueID | 技能组编码 | String | 技能组号码 |
queueName | 队列名称 | String | 技能组名称 |
queueWeight | 队列权重 | int | 队列权重 |
checkin | 签入组类型 | int | 0:默认签入组,1:可选签入组 默认是签入组 |
# ● 签出
座席工作状态为就绪中、置忙中、锁定中才可以。否则,不允许。
SobotCallOpenApi.agentLogout(Context context, SobotResultBlock block);
# 请求参数
属性 | 名称 | 类型 | 可空 | 说明 |
---|---|---|---|---|
context | 上下文 | Context | 否 | |
block | 回调函数 | SobotResultBlock | 是 | 接口调用的回调函数。 |
# 返回值
回调函数说明 详见 SobotResultBlock 。
# ● 置忙
SobotCallOpenApi.agentNotReady(Context context, String reasonCode, SobotResultBlock block);
# 请求参数
属性 | 名称 | 类型 | 可空 | 说明 |
---|---|---|---|---|
context | 上下文 | Context | 否 | |
reasonCode | 置忙原因 | int | 否 | 置忙后显示的登录状态。 2:勿扰;11:小休;12:小休(培训);13:小休(会议);14:小休(用餐);15:小休(活动);16:小休(自定义1);17:小休(自定义2);18:小休(自定义3)。 |
block | 回调函数 | SobotResultBlock | 是 | 接口调用的回调函数。 |
# 返回值
回调函数说明 详见 SobotResultBlock 。
# ● 置闲
SobotCallOpenApi.agentReady(Context context, SobotResultBlock block);
# 请求参数
属性 | 名称 | 类型 | 可空 | 说明 |
---|---|---|---|---|
context | 上下文 | Context | 否 | |
block | 回调函数 | SobotResultBlock | 是 | 接口调用的回调函数。 |
# 返回值
回调函数说明 详见 SobotResultBlock 。
# ● 查询座席的签入信息
SobotCallOpenApi.queryLoginBindingInfo(Context context, SobotResultBlock block);
# 请求参数
属性 | 名称 | 类型 | 可空 | 说明 |
---|---|---|---|---|
context | 上下文 | Context | 否 | |
block | 回调函数 | SobotResultBlock | 是 | 接口调用的回调函数。 |
# 返回值
回调函数说明 详见 SobotResultBlock ,当回调成功时, SobotResultBlock中的 obj可转成 SobotLoginBindEntity 对象。
SobotLoginBindEntity说明:
属性 | 类型 | 描述 |
---|---|---|
agentUuid | String | 座席ID |
agentID | String | 座席工号 |
agentName | String | 座席名称 |
ext | String | 绑定分机账号 |
phone | String | 绑定电话号码 |
phoneTypes | List | 接听方式集合 |
receptionQueues | List | 查询座席实时已签入的技能组数据(当时已生效的接待技能组) |
接听方式PhoneType说明:
属性 | 类型 | 描述 |
---|---|---|
phoneType | String | 接听方式:sip:SIP话机;pstn:手机;webrtc:网页 |
defaultPhoneType | boolean | 默认的接听方式:true已设置默认接听方式;false未设置接听方式集合中只有1条数据为ture; |
QueueAgentCheckin说明:
属性 | 类型 | 描述 |
---|---|---|
queueID | String | 技能组号码 |
queueName | String | 技能组名称 |
queueWeight | int | 队列权重 |
checkin | int | 签入组类型:0:默认签入组,1:可选签入组 默认是签入组 ;为空时,代表未开启“呼叫功能设置\座席手动选择技能组签入”。 |
# ● 查询座席可用的分机号
SobotCallOpenApi.queryAvailableExts(Context context, SobotResultBlock block);
# 请求参数
属性 | 名称 | 类型 | 可空 | 说明 |
---|---|---|---|---|
context | 上下文 | Context | 否 | |
block | 回调函数 | SobotResultBlock | 是 | 接口调用的回调函数。 |
# 返回值
回调函数说明 详见 SobotResultBlock ,当回调成功时, SobotResultBlock中的 obj可转成
List
SobotExtEntity 说明:
属性 | 类型 | 描述 |
---|---|---|
ext | String | 分机号 |
bindStatus | int | 分机绑定状态 0-未绑定,1-表示已绑定 |
# ● 查询座席可用的置忙原因
SobotCallOpenApi.queryBusyStatus(Context context, SobotResultBlock block);
# 请求参数
属性 | 名称 | 类型 | 可空 | 说明 |
---|---|---|---|---|
context | 上下文 | Context | 否 | |
block | 回调函数 | SobotResultBlock | 是 | 接口调用的回调函数。 |
回调函数说明 详见 SobotResultBlock 。
# 返回值
回调函数说明 详见 SobotResultBlock ,当回调成功时, SobotResultBlock中的 obj 可转成
List
SobotBusyStatusEntity 说明:
属性 | 类型 | 描述 |
---|---|---|
name | String | 状态名称 |
code | String | 状态码 |
# ● 查询座席可签入的技能组
SobotCallOpenApi.queryAvailableQueues(Context context, SobotResultBlock block);
# 请求参数
属性 | 名称 | 类型 | 可空 | 说明 |
---|---|---|---|---|
context | 上下文 | Context | 否 | |
block | 回调函数 | SobotResultBlock | 是 | 接口调用的回调函数。 |
回调函数说明 详见 SobotResultBlock 。
# 返回值
回调函数说明 详见 SobotResultBlock ,当回调成功时, SobotResultBlock.obj 可转成
List
QueueAgentCheckin 说明:
属性 | 类型 | 描述 |
---|---|---|
queueID | String | 技能组号码 |
queueName | String | 技能组名称 |
queueWeight | int | 队列权重 |
checkin | int | 签入组类型 0默认签入组,1可选签入组 默认是签入组 |
# ● 重置离线(退出登录)
- 座席在任何登录状态、任何电话状态下都可以强制挂断座席电话并签出到离线状态;
- 可以用于座席端状态异常时,重置座席为离线。
SobotCallOpenApi.resetLogout(Context context, SobotResultBlock block);
# 请求参数
属性 | 名称 | 类型 | 可空 | 说明 |
---|---|---|---|---|
context | 上下文 | Context | 否 | |
block | 回调函数 | SobotResultBlock | 是 | 接口调用的回调函数。 |
# 返回值
回调函数说明 详见 SobotResultBlock 。
# ● 查询座席可用的接听方式
SobotCallOpenApi.queryPhoneType(Context context, SobotResultBlock block);
# 请求参数
属性 | 名称 | 类型 | 可空 | 说明 |
---|---|---|---|---|
context | 上下文 | Context | 否 | |
block | 回调函数 | SobotResultBlock | 是 | 接口调用的回调函数。 |
# 返回值
回调函数说明 详见 SobotResultBlock ,当回调成功时, SobotResultBlock中的 obj 可转成 SobotAgentEntity 。
SobotAgentEntity 说明:
属性 | 类型 | 描述 |
---|---|---|
serviceId | String | 座席ID |
agentID | String | 座席工号 |
agentName | String | 座席名称 |
thisDN | String | 绑定分机账号 |
phone | String | 绑定电话号码 |
phoneTypes | List | 接听方式 |
SobotPhoneTypesEntity 说明:
属性 | 类型 | 描述 |
---|---|---|
phoneType | String | 接听方式:sip:SIP话机;pstn:手机;webrtc:网页。 |
defaultPhoneType | boolean | 默认的接听方式:true已设置默认接听方式;false未设置接听方式集合中只有1条数据为ture; |
isDefault | boolean | 默认的接听方式:true已设置默认接听方式;false未设置接听方式集合中只有1条数据为ture;(建议使用defaultPhoneType,isDefault以后会删除掉) |
# 呼叫操作
# ● 外呼
SobotCallOpenApi.makeCall(Context context, String otherDN, String privacyNumber, String ANI,String outboundPlanCode,String agentANI, SobotResultBlock block) ;
# 请求参数
属性 | 名称 | 类型 | 可空 | 说明 |
---|---|---|---|---|
context | 上下文 | Context | 否 | |
otherDN | 客户号码 | String | 否 | |
privacyNumber | 客户号码加密 | String | 是 | |
ANI | 指定客户侧的外显号码 | String | 是 | |
outboundPlanCode | 指定客户侧的外显号码方案编码 | String | 是 | |
agentANI | 指定座席侧的外显号码 | String | 是 | |
block | 回调函数 | SobotResultBlock | 是 | 接口调用的回调函数。 |
# 返回值
回调函数说明 详见 SobotResultBlock 。
# ● 接听
/**
* 接听
* @param context 上下文
* @param block 回调
*/
SobotCallOpenApi.answer(Context context, SobotResultBlock block) ;
2
3
4
5
6
# 请求参数
属性 | 名称 | 类型 | 可空 | 说明 |
---|---|---|---|---|
context | 上下文 | Context | 否 | |
block | 回调函数 | SobotResultBlock | 是 | 接口调用的回调函数。 |
# 返回值
回调函数说明 详见 SobotResultBlock 。
# ● 挂机
/**
* 挂机
* @param context
* @param block
*/
SobotCallOpenApi.hangup(Context context, SobotResultBlock block) ;
2
3
4
5
6
# 请求参数
属性 | 名称 | 类型 | 可空 | 说明 |
---|---|---|---|---|
context | 上下文 | Context | 否 | |
block | 回调函数 | SobotResultBlock | 是 | 接口调用的回调函数。 |
# 返回值
回调函数说明 详见 SobotResultBlock 。
# ● 保持
/**
* 保持
* @param context
* @param block
*/
SobotCallOpenApi.holdCall(Context context, SobotResultBlock block) ;
2
3
4
5
6
# 请求参数
属性 | 名称 | 类型 | 可空 | 说明 |
---|---|---|---|---|
context | 上下文 | Context | 否 | |
block | 回调函数 | SobotResultBlock | 是 | 接口调用的回调函数。 |
# 返回值
回调函数说明 详见 SobotResultBlock 。
# ● 保持取消
/**
* 保持取消
* @param context
* @param block
*/
SobotCallOpenApi.retrieveCall(Context context, SobotResultBlock block) ;
2
3
4
5
6
# 请求参数
属性 | 名称 | 类型 | 可空 | 说明 |
---|---|---|---|---|
context | 上下文 | Context | 否 | |
block | 回调函数 | SobotResultBlock | 是 | 接口调用的回调函数。 |
# 返回值
回调函数说明 详见 SobotResultBlock 。
# ● 静音
/**
* 静音
* @param context
* @param block
*/
SobotCallOpenApi.muteCall(Context context, SobotResultBlock block) ;
2
3
4
5
6
# 请求参数
属性 | 名称 | 类型 | 可空 | 说明 |
---|---|---|---|---|
context | 上下文 | Context | 否 | |
block | 回调函数 | SobotResultBlock | 是 | 接口调用的回调函数。 |
# 返回值
回调函数说明 详见 SobotResultBlock 。
# ● 静音取消
/**
* 静音取消
* @param context
* @param block
*/
SobotCallOpenApi.unMuteCall(Context context, SobotResultBlock block) ;
2
3
4
5
6
# 请求参数
属性 | 名称 | 类型 | 可空 | 说明 |
---|---|---|---|---|
context | 上下文 | Context | 否 | |
block | 回调函数 | SobotResultBlock | 是 | 接口调用的回调函数。 |
# 返回值
回调函数说明 详见 SobotResultBlock 。
# ● 设置声音播放类型
/**
* 自动切换麦克风扬声器为 打开/关闭
* @param context
* @param isSpeakerphoneOn true :扬声器打开 ;false : 扬声器关闭
* @param block
*/
SobotCallOpenApi.changedPlayCategory(Context context,boolean isSpeakerphoneOn, SobotResultBlock block) ;
2
3
4
5
6
7
# 请求参数
属性 | 名称 | 类型 | 可空 | 说明 |
---|---|---|---|---|
context | 上下文 | Context | 否 | |
isSpeakerphoneOn | 扬声器是否打开 | boolean | 是 | |
block | 回调函数 | SobotResultBlock | 是 | 接口调用的回调函数。 |
# 返回值
回调函数说明 详见 SobotResultBlock ,当回调成功时, SobotResultBlock中的 obj 可转成String。
属性 | 名称 | 类型 | 说明 |
---|---|---|---|
SobotResultBlock.obj | 声音播放类型 | String | 范围:听筒播放或扬声器播放 |
# ● 查询声音播放类型
/**
* 查询麦克风扬声器是否打开
* @param context
* @param block
*/
SobotCallOpenApi.searchPlayCategory(Context context, SobotResultBlock block) ;
2
3
4
5
6
# 请求参数
属性 | 名称 | 类型 | 可空 | 说明 |
---|---|---|---|---|
context | 上下文 | Context | 否 | |
block | 回调函数 | SobotResultBlock | 是 | 接口调用的回调函数。 |
# 返回值
回调函数说明 详见 SobotResultBlock ,当回调成功时, SobotResultBlock中的 obj 可转成 boolean。
属性 | 名称 | 类型 | 说明 |
---|---|---|---|
SobotResultBlock.obj | 是否是扬声器播放 | boolean | true :扬声器打开 ;false : 扬声器关闭 |
# ● 发送满意度
/**
* 发送满意度
*
* @param autoSatisfy 1-表示手动发送满意度;0或者不传值-自动发送满意度(如果系统设置自动发送满意度)
*/
SobotCallOpenApi.sendSatisfacion(Context context, int autoSatisfy, SobotResultBlock block);
2
3
4
5
6
# 请求参数
属性 | 名称 | 类型 | 可空 | 说明 |
---|---|---|---|---|
context | 上下文 | Context | 否 | |
autoSatisfy | 1-表示手动发送满意度;0或者不传值-自动发送满意度(如果系统设置自动发送满意度) | int | 否 | 1-表示手动发送满意度;0或者不传值-自动发送满意度(如果系统设置自动发送满意度) |
block | 回调函数 | SobotResultBlock | 是 | 接口调用的回调函数。 |
# 返回值
回调函数说明 详见 SobotResultBlock 。
# ● 延长整理时长
/**
* 延长整理时长
*
* @param delayTime 延长秒数在30-900秒之间
*/
SobotCallOpenApi.delayCallAfterWork(Context context, int delayTime, SobotResultBlock block);
2
3
4
5
6
# 请求参数
属性 | 名称 | 类型 | 可空 | 说明 |
---|---|---|---|---|
context | 上下文 | Context | 否 | |
delayTime | 延长秒数 | String | 否 | 延长秒数在30-900秒之间 |
block | 回调函数 | SobotResultBlock | 是 | 接口调用的回调函数。 |
# 返回值
回调函数说明 详见 SobotResultBlock 。
# ● 结束整理
/**
* 结束整理
* @param context
*/
SobotCallOpenApi.finishCallAfterWork(Context context, SobotResultBlock block) ;
2
3
4
5
# 请求参数
属性 | 名称 | 类型 | 可空 | 说明 |
---|---|---|---|---|
context | 上下文 | Context | 否 | |
block | 回调函数 | SobotResultBlock | 是 | 接口调用的回调函数。 |
# 返回值
回调函数说明 详见 SobotResultBlock 。
# ● 发送按键
/**
* 发送按键
* @param context
* @param dtmfDigits 按键对应值:一次请求发送一个按键值,如,801#,则依次发送8、0、1、#这些按键请求
*/
SobotCallOpenApi.sendDtmf(Context context,String dtmfDigits, SobotResultBlock block) ;
2
3
4
5
6
# 请求参数
属性 | 名称 | 类型 | 可空 | 说明 |
---|---|---|---|---|
context | 上下文 | Context | 否 | |
dtmfDigits | 按键对应值 | String | 否 | 按键对应值:一次请求发送一个按键值,如,801#,则依次发送8、0、1、#这些按键请求 |
block | 回调函数 | SobotResultBlock | 是 | 接口调用的回调函数。 |
# 返回值
回调函数说明 详见 SobotResultBlock 。
# ● 结束整理并置忙
/**
* 查询座席的外呼路由规则
* @param context
*/
SobotCallOpenApi.finishCallAfterWorkAndBusy(Context context, SobotResultBlock block) ;
2
3
4
5
# 请求参数
属性 | 名称 | 类型 | 可空 | 说明 |
---|---|---|---|---|
context | 上下文 | Context | 否 | |
block | 回调函数 | SobotResultBlock | 是 | 接口调用的回调函数。 |
# 返回值
回调函数说明 详见 SobotResultBlock 。
# 辅助操作
# ● 查询座席的外呼路由规则
/**
* 查询座席的外呼路由规则
* @param context
*/
SobotCallOpenApi.queryOutBoudRoutesRules(Context context, SobotResultBlock block) ;
2
3
4
5
# 请求参数
属性 | 名称 | 类型 | 可空 | 说明 |
---|---|---|---|---|
context | 上下文 | Context | 否 | |
block | 回调函数 | SobotResultBlock | 是 | 接口调用的回调函数。 |
# 返回值
回调函数说明 详见 SobotResultBlock ,当回调成功时, SobotResultBlock中的obj 可转成 SobotOutboundRoutesEntity 对象。
属性 | 名称 | 类型 | 说明 |
---|---|---|---|
agentUuid | 座席id | String | 座席id |
agentID | 座席工号 | String | 座席工号 |
agentName | 座席名称 | String | 座席名称 |
explicitRule | 外显规则LIST | List | 外显规则LIST |
explicitSchema | 动态外显方案LIST | List | 动态外显方案LIST |
explicitNumbers | 外显号码LIST | List | 外显号码LIST |
# 外显规则(SobotExplicitRuleEntity)说明:
属性 | 名称 | 类型 | 说明 |
---|---|---|---|
code | 外显规则code | String | 1:企业号码池随机匹配;2:动态外显号码方案匹配;3:座席号码池指定 |
name | 外显规则name | String | 外显规则name |
hasSet | 座席最后设定的数据 | Boolean | false:不是true:是 |
# 外显方案(SobotExplicitRuleEntity)
属性 | 名称 | 类型 | 说明 |
---|---|---|---|
code | 外显方案code | String | 1:企业号码池随机匹配;2:动态外显号码方案匹配;3:座席号码池指定 |
name | 外显方案name | String | 外显规则name |
hasSet | 座席最后设定的数据 | Boolean | false:不是true:是 |
# 外显号码(SobotExplicitNumberEntity)
属性 | 名称 | 类型 | 说明 |
---|---|---|---|
number | 外显号码 | String | |
numberAlias | 号码别名 | String | |
hasSet | 座席最后设定的数据 | Boolean | false:不是true:是 |
# ● 修改座席的外呼路由规则
/**
* 切换座席的外呼外显规则
*
* @param explicitRule 外显规则:1:企业号码池随机匹配;2:动态外显号码方案匹配;3:座席号码池指定;单选;
* @param explicitCode 动态外显方案编码: 外显规则为动态外显号码方案时必传
* @param explicitNumber 外显号码:不使用外显规则,直接指定企业的某外显号码呼叫客户,外显号码和外显规则至少需要传一个
*/
SobotCallOpenApi.switchOutBoudRoutesRules(Context context, String explicitRule, String explicitCode, String explicitNumber, SobotResultBlock block) ;
2
3
4
5
6
7
8
# 请求参数
属性 | 名称 | 类型 | 可空 | 说明 |
---|---|---|---|---|
context | 上下文 | Context | 否 | |
explicitRule | 外显规则 | String | 否 | 1:企业号码池随机匹配;2:动态外显号码方案匹配;3:座席号码池指定;单选; |
explicitCode | 动态外显方案编码 | String | 是 | 外显规则为动态外显号码方案时必传 |
explicitNumber | 外显号码 | String | 是 | 使用外显规则,直接指定企业的某外显号码呼叫客户,外显号码和外显规则至少需要传一个 |
block | 回调函数 | SobotResultBlock | 是 | 接口调用的回调函数。 |
# 返回值
回调函数说明 详见 SobotResultBlock ,当回调成功时, SobotResultBlock中的obj 可转成 SobotOutboundRoutesEntity 对象。
属性 | 名称 | 类型 | 说明 |
---|---|---|---|
agentUuid | 座席id | String | 座席id |
agentID | 座席工号 | String | 座席工号 |
agentName | 座席名称 | String | 座席名称 |
explicitRule | 外显规则LIST | List | 外显规则LIST |
explicitSchema | 动态外显方案LIST | List | 动态外显方案LIST |
explicitNumbers | 外显号码LIST | List | 外显号码LIST |
# 外显规则(SobotExplicitRuleEntity)
属性 | 名称 | 类型 | 说明 |
---|---|---|---|
code | 外显规则code | String | 1:企业号码池随机匹配;2:动态外显号码方案匹配;3:座席号码池指定 |
name | 外显规则name | String | 外显规则name |
hasSet | 座席最后设定的数据 | Boolean | false:不是true:是 |
# 外显方案(SobotExplicitRuleEntity)
属性 | 名称 | 类型 | 说明 |
---|---|---|---|
code | 外显方案code | String | 1:企业号码池随机匹配;2:动态外显号码方案匹配;3:座席号码池指定 |
name | 外显方案name | String | |
hasSet | 座席最后设定的数据 | Boolean | false:不是true:是 |
# 外显号码(SobotExplicitNumberEntity)
属性 | 名称 | 类型 | 说明 |
---|---|---|---|
number | 外显号码 | String | |
numberAlias | 号码别名 | String | |
hasSet | 座席最后设定的数据 | Boolean | false:不是true:是 |
# 通用属性说明
# ● 接口统一回调 SobotResultBlock
属性 | 名称 | 类型 | 说明 |
---|---|---|---|
code | 调用状态 | SobotResultCode | SobotResultCode.CODE_FAILED 代表调用失败;SobotResultCode.CODE_SUCCEEDEDD 代表调用成功。 |
msg | 结果描述 | String | 接口调用结果的描述。 |
obj | 返回数据 | Object | 接口返回值,具体详情参考每个接口的返回值说明,可为空。 |
# ● 监听获取座席实时状态和呼叫事件
第一步: 注册后获取事件
事件说明参考呼叫事件(TS) (opens new window)
Observer<CallStompMsgModel> stompMsgObserver;//stomp 消息事件
stompMsgObserver = new Observer<CallStompMsgModel>() {
@Override
public void onChanged(CallStompMsgModel stompMsgModel) {
if (stompMsgModel == null) {
return;
}
SobotLogUtils.i(" 收到stomp 消息:" + SobotStringUtils.checkStringIsNull(stompMsgModel.getStompMessageID()));
String stompMessageID = SobotStringUtils.checkStringIsNull(stompMsgModel.getStompMessageID());
String stompMessageContent = SobotStringUtils.checkStringIsNull(stompMsgModel.getStompMessageContent());
if (!TextUtils.isEmpty(stompMessageContent) && !TextUtils.isEmpty(stompMessageID)) {
if (SobotStompEventConstant.EventAgentLogin.equals(stompMessageID)) {
//座席签入
} else if (SobotStompEventConstant.EventAgentLogout.equals(stompMessageID)) {
//座席签出
} else if (SobotStompEventConstant.EventAgentReady.equals(stompMessageID)) {
//座席置闲
} else if (SobotStompEventConstant.EventAgentNotReady.equals(stompMessageID)) {
//座席置忙
} else if (stompMessageID.toLowerCase().contains("error")) {
//返回异常事件
} else if (SobotStompEventConstant.EventDialing.equals(stompMessageID)) {
//呼入 来电了
}else if (SobotStompEventConstant.EventEstablished.equals(stompMessageID)) {
//通话接通了
} else if (SobotStompEventConstant.EventWebSocketSession.equals(stompMessageID)) {
//恢复座席
} else if (SobotStompEventConstant.EventAgentConnectionChanged.equals(stompMessageID)) {
//座席在其它端登录,被挤下线的事件
}
}
}
};
//在需要的地方注册,注意,在不用的地方还需要取消
SobotLiveEventBus.get(SobotCallLiveDataBusKey.RECEIVE_STOMP_MSG, CallStompMsgModel.class)
.observeForever(stompMsgObserver);
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
第二步:注销 例如:
protected void onDestroy() {
super.onDestroy();
if (stompMsgObserver != null) {
SobotLiveEventBus.get(SobotCallLiveDataBusKey.RECEIVE_STOMP_MSG, CallStompMsgModel.class).removeObserver(stompMsgObserver);
}
}
2
3
4
5
6
# ● 监听通话状态的变化
/**
* 监听通话状态的变化
* 监听状态: 用户来电、用户响铃中、通话中、通话结束
*/
SobotCallOpenApi.setVoipCallListener(new SobotVoipCallListener() {
@Override
public void onCallIncoming(String jsep, boolean isCallPhone,String userPhoneNumber) {
SobotLogUtils.e("SobotVoipCallListener == onCallIncoming 用户号码:"+userPhoneNumber);
if (isCallPhone) {
//外呼:客服外呼来电
}else{
//呼入:客户来电,手动接听,然后启动通话页面
SobotCallOpenApi.answer(getSobotActivity(), jsep, new SobotResultBlock() {
@Override
public void resultBolok(SobotResultCode code, String msg, Object obj) {
sessionDescription = "";
SobotToastUtil.showToast(SobotCallInterfaceTestActivity.this, msg);
}
});
}
}
@Override
public void onCallConnected() {
//通话建立,主叫端和被叫端语音通话中
SobotLogUtils.e("SobotVoipCallListener == onCallConnected");
}
@Override
public void onCallDisconnected() {
//通话结束
SobotLogUtils.e("SobotVoipCallListener == onCallDisconnected");
}
});
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# ● 设置调试模式
/**
* 是否显示智齿日志,日志过滤标识:sobot_log
*
* @param isShow true 显示;false 不显示,默认不显示
*/
ZCSobotCallApi.setShowLogDebug(boolean isShow);
2
3
4
5
6
s
# 资源配置
# ● UI 资源替换
在客户 APP 中 colors.xml 中添加同名颜色可覆盖智齿 SDK 中的颜色样式;也可通过在主项目中同一位置放一个同名的图片资源去替换智齿 SDK 界面中的图片;也可通过在主项目中同一位置放一个同名的文字资源去替换智齿 SDK 界面中的文字。
以下是常用的颜色配置,更多颜色、图片资源可到手动集成模块中下载源码包中去查找。
<!-- 主题色 默认绿色 -->
<color name="sobot_call_theme_color">#09AEB0</color>
<!--页面 通用背景颜色 -->
<color name="sobot_call_bg_color">#EFF3FA</color>
<!--页面 二级背景色 -->
<color name="sobot_call_second_bg_color">#FFFFFF</color>
<!--页面 三级颜色 -->
<color name="sobot_call_third_bg_color">#EFF3FA</color>
<!-- 一级文字 颜色 -->
<color name="sobot_call_wenzi_gray1">#3D4966</color>
<!-- 二级文字 颜色 -->
<color name="sobot_call_wenzi_gray2">#8B98AD</color>
<!-- 三级文字 颜色 -->
<color name="sobot_call_wenzi_gray3">#BDC3D1</color>
<!-- 四级文字 颜色 提示性文本:时间,输入提示 -->
<color name="sobot_call_wenzi_gray4">#CCCCCC</color>
<!-- 线 -->
<color name="sobot_call_line_color">#E6E6E6</color>
<!-- 头部背景 -->
<color name="sobot_color_title_bar_bg">@color/sobot_call_theme_color</color>
<!-- 状态栏的颜色设置 -->
<color name="sobot_status_bar_color">@color/sobot_color_title_bar_bg</color>
<!-- 头部中间昵称颜色 -->
<color name="sobot_color_title_bar_title">@color/sobot_call_white_color</color>
<!-- 头部两侧菜单字体颜色 -->
<color name="sobot_color_title_bar_menu_text">@color/sobot_call_white_color</color>
<!-- 控件布局按压背景颜色-->
<color name="sobot_call_item_pressed">@color/sobot_call_line_color</color>
<!-- 弹窗页面 头部背景颜色 -->
<color name="sobot_call_pop_header_bg_color">#EFF3FA</color>
<!-- 弹窗页面 头部 文字颜色 -->
<color name="sobot_call_pop_header_weizi_color">@color/sobot_call_wenzi_gray1</color>
<!--通话界面 背景色-->
<color name="sobot_call_activity_bg">#FFFFFF</color>
<!--拨号界面 电话号 区域 背景色-->
<color name="sobot_phone_numbe_bg">@color/sobot_call_bg_color</color>
<!--拨号界面 电话号 区域 文字 黑色-->
<color name="sobot_phone_numbe_wenzi_gray">@color/sobot_common_gray1</color>
<!--拨号界面 键盘 背景色-->
<color name="sobot_phone_keyword_bg">#FFFFFF</color>
<!--拨号界面 键盘 文字颜色1 黑色-->
<color name="sobot_phone_keyword_wenzi_gray1">@color/sobot_common_gray1</color>
<!--拨号界面 键盘 文字颜色2 黑色-->
<color name="sobot_phone_keyword_wenzi_gray2">@color/sobot_common_gray2</color>
<!--呼叫中心任务 黄色 未开始-->
<color name="sobot_call_yellow_color">#EEB049</color>
<!--呼叫中心任务 绿色 执行中-->
<color name="sobot_call_green_color">#21CFA6</color>
<!--呼叫中心任务 灰色 已过期-->
<color name="sobot_call_grey_color">#CFCFCF</color>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# 智齿呼叫 SDK 功能使用体验 Demo
点击下载 Demo 源码 (opens new window);
# 常见问题
1.token 怎么获取?
通过智齿登录接口获取登录 token,注意此处 token 为开发模块获取的 token,非新版 v6 版本
accessToken,如果无法获取请使用用户名、密码完成登录,体验效果完全一样,请放心使用。
2.无法正常登录?
登录之前请确认是否执行初始化操作,初始化操作为本地赋值;不会有异步请求,主要会设置域名及基础配置信息。
# 更新说明
<<SDK 版本更新说明>> (opens new window)