访客iOS SDK

1、下载SDK

2、导入SDK到工程

3、添加依赖库到工程和项目配置

4、在佳信官网上申请APPKEY

5、用APPKEY初始化SDK

6、用户注册

7、用户登录

8、联系客服进入技能组列表

9、选择技能组

9.1、后台设置机器人优先
     9.1.1、和机器人聊天
     9.1.2、转人工
9.2、后台设置人工优先

10、转人工服务

 10.1、有人工在线
        10.1.1、人工繁忙---->等待,取消等待重新选择技能组或留言
         10.1.2、接通人工
 10.2、无人工在线---->返回选择其他技能组或留言

11、与人工坐席沟通

12、沟通结束后评价客服

13、离开技能组

获取佳信移动客服iOS SDK,官网下载:http://jiaxincloud.com/download.html

3.1、导入SDK

3.1.1、添加静态库和头文件

下载好的SDK中包含一个静态库.a文件和相应的头文件夹,将两者导入到创建好的project中。

3.1.2 导入相关依赖库

由于移动客服SDK依赖许多系统提供的库,所以在集成时需要导入这些库,它们是:CFNetwork.framework, SystemConfiguration.framework, libsqlite3.dylib, libresolv.dylib, libxml2.dylib.

Build Settings → Linking → Other Linker Flags 添加 -ObjC ( 注意大小写 )

Build Settings → Enable Bitcode 设置改为 NO

编译工程

以上步骤进行完后,编译工程,如果没有报错,恭喜你,集成 sdk 成功,可以进行下一步了。

3.1.3、申请APPKEY

需要通过官网http://jiaxincloud.com开发者中心创建应用的APPKEY。创建前先注册账号,已有账号可直接登录。

注册页面如下:

填写邮箱,选中“我同意并遵守《佳信云平台服务协议》”,然后点击“点击这里发送注册邮件”,如下图:

点击“去邮箱验证”按钮,佳信官网会发送一封验证邮件到你的邮箱,里面有个链接,如下图所示:

点击链接弹出如下页面,按要求填写完信息后,点击“提交账号信息”按钮。

注册成功后会出现如下页面,点击“马上登陆体验”;

登陆成功后会点开您刚创建的应用,会出现如下页面:

获取到APPKEY,进入SDK的使用。

3.2、初始化 SDK

方法名称SDK初始化
方法[[JXIMClient shareInstance] registerSDKWithAppKey:key];
入参参数名类型说明
keyString在佳信官网上申请的appkey
返回值
类型说明
JXError错误对象

JXError异常errorCode存在如下取值:

错误代码定义说明
JXErrorTypeSDKInternalSDK内部错误
JXErrorTypeAppKeyNotExistAPPKEY不存在
JXErrorTypeOrgnameNotExist企业ID不存在
JXErrorTypeNotRegisterSDK没有注册SDK
JXErrorTypeRegisterSDKParameterInvalid注册SDK参数错误
JXErrorTypeOrgnameIllegalCharacter公司名含非法字符
JXErrorTypeAppnameIllegalCharacterapp名称含非法字符
JXErrorTypeOrgnameAndAppnameIllegalCharacter公司名和app名称含非法字符
JXErrorTypeAppnameLengthInvalidapp名称长度超过20字符


3.3、用户注册

通过SDK注册新用户。

方法名称用户注册
方法[[JXIMClient shareInstance].loginManager registerWithUserName: username password: password callback:callback];
入参参数名类型说明
usernameString用户名
passwordString密码
callbackblock参数为JXError的回调函数

注册成功时将回调callback(JXError); (JXError的errorCode为JXErrorTypeSuccess 操作成功)

注册失败时将回调callback(JXError);

失败错误代码存在如下取值:

错误代码定义说明
JXErrorTypeUsernameIllegalCharacter用户名只能输入字母或数字
JXErrorTypeUsernameExist用户名已存在
JXErrorTypeOther其他错误


3.4、用户登录

方法名称用户登录
方法[[JXIMClient shareInstance].loginManager loginWithUserName: userName password:passWord];
入参参数名类型说明
usernameString用户名
passwordString密码

JXLoginManagerDelegate代理的回调方法:

登录成功时回调方法:

- (void)didLoginSuccess;

登录失败时回调方法:
-(void)didLoginFailureWithError:(JXError *)error;

失败参数JXError的errorCode存在如下取值:

错误代码定义说明
JXErrorTypeLoginUserNameEmpty用户名为空
JXErrorTypeLoginPasswordEmpty密码为空
JXErrorTypeLoginUserNameNotExist用户名不存在
JXErrorTypeLoginPasswordError密码错误
JXErrorTypeLoginInvalidUsernameOrPassword用户名或密码错误
JXErrorTypeNetworkDisconnected无网络连接
JXErrorTypeNetworkTimeout网络连接超时
JXErrorTypeServerInternal服务器内部错误
JXErrorTypeServerShutdown服务器被关闭
JXErrorTypeNoConnection与服务端连接未建立


3.5、退出登录

方法名称退出登录
方法[[JXIMClient shareInstance]. loginManager logout];

JXLoginManagerDelegate代理的回调方法:

退出登录成功时回调方法:
- (void)didLoginoutSuccess;

示例代码:

[[JXIMClient shareInstance]. loginManager logout];

代理回调

- (void)didLogoutSuccess{ }


4.1、获取客服技能组

4.1.1、通过block回调获得客服技能组

方法名称获取客服技能组
方法[[JXIMClient shareInstance].mcsManager fetchCustomServicesWithCallback: callback];
入参参数名类型说明
callbackBlock没有返回值,参数为responseObject(技能组列表)和 JXError的回调
返回值

示例代码:

[[JXIMClient shareInstance].mcsManager fetchCustomServicesWithCallback:^(id responseObject, JXError *error) {
if (!error) {
get cs success}else{get cs failure
}}];

4.1.2、通过返回值获得客服技能组

方法名称获取客服技能组
方法[[JXIMClient shareInstance].mcsManager fetchCustomServicesSync];
入参
返回值类型说明
NSArray技能组列表的数组

示例代码:

NSArray * workGroups = [[JXIMClient shareInstance].mcsManager fetchCustomServicesSync];


4.2、获取满意度

4.2.1、通过block回调获得满意度

方法名称获取满意度
方法[[JXIMClient shareInstance].mcsManager fetchEvaluationConfigWithCallback: callback];
入参参数名类型说明
callbackBlock没有返回值,参数为res(满意度信息)和 JXError的回调
返回值

示例代码

[[JXIMClient shareInstance].mcsManager fetchEvaluationConfigWithCallback:^(id responseObject, JXError *error) {

if (!error) {

get cs success}else{get cs failure

}}];

4.2.2、通过返回值获得满意度

方法名称获取满意度
方法[[JXIMClient shareInstance].mcsManager fetchEvaluationConfigSync];
入参
返回值类型说明
JXMcsEvaluation满意度对象

示例代码:

JXMcsEvaluation * mcsEvaluation= [[JXIMClient shareInstance].mcsManager fetchEvaluationConfigSync];


4.3、获取快捷提问列表

4.3.1、通过block回调获得快捷提问列表

方法名称获取快捷提问列表
方法[[JXIMClient shareInstance].mcsManager fetchQuickQuestionsWithCallback: callback];
入参参数名类型说明
callbackBlock没有返回值,参数为responseObject(技能组列表)和 JXError的回调
返回值

示例代码:

[[JXIMClient shareInstance].mcsManager fetchQuickQuestionsWithCallback:^(id responseObject, JXError *error) {

if (!error) {

get cs success}else{get cs failure

}}];

4.3.2、通过返回值获得快捷提问列表

方法名称获取快捷提问列表
方法[[JXIMClient shareInstance].mcsManager fetchQuickQuestionsSync];
入参
返回值类型说明
NSArray技能组列表的数组

示例代码:

NSArray * workGroups = [[JXIMClient shareInstance].mcsManager fetchQuickQuestionsSync];


4.4、获得当前技能组

方法名称获得当前技能组
方法[[JXIMClient shareInstance].mcsManager activeService];
入参
返回值类型说明
JXWorkgroup技能组对象

示例代码:

JXWorkgroup *workgroup = [[JXIMClient shareInstance].mcsManager activeService];


4.5、请求客服进入技能组

方法名称请求客服进入技能组
方法[[JXIMClient shareInstance].mcsManager requestCustomerService: service];
入参参数名类型说明
serviceJXWorkgroup技能组对象
返回值

JXMCSManagerDelegate代理的回调方法:

服务状态改变

- (void)didServiceStatusUpdated:(JXWorkgroup *)workgroup ;

- 服务结束

-(void)didServiceEnd:(JXWorkgroup *)workgroup withError:(JXError *)error ;

等待队列的状态更新

- (void)didService:(JXWorkgroup *)workgroup positionChanged:(NSInteger)position;

示例代码:

[[JXIMClient shareInstance].mcsManager requestCustomerService: serviceId];

服务状态改变

- (void)didServiceStatusUpdated:(JXWorkgroup *)workgroup {

}

服务结束

-(void)didServiceEnd:(JXWorkgroup *)workgroup withError:(JXError *)error {
}

等待队列的状态更新

- (void)didService:(JXWorkgroup *)workgroup positionChanged:(NSInteger)position {

}


4.6、转人工

方法名称转人工
方法[[JXIMClient shareInstance].mcsManager transferCustomerService];
入参
返回值

JXMCSManagerDelegate代理的回调方法:

服务状态改变

-(void)didServiceStatusUpdated:(JXWorkgroup *)workgroup ;

服务结束

-(void)didServiceEnd:(JXWorkgroup *)workgroup withError:(JXError *)error ;

示例代码:

[[JXIMClient shareInstance].mcsManager requestCustomerService: serviceId];

相关代理回调

服务状态改变

-(void)didServiceStatusUpdated:(JXWorkgroup *)workgroup {

}

服务结束

-(void)didServiceEnd:(JXWorkgroup *)workgroup withError:(JXError *)error {

}

4.7、转机器人

转机器人和请求客服加入技能组是同一方法,就是重新加入该技能组,如果后台配置了机器人优先,则会转到机器人客服。

方法名称请求客服
方法[[JXIMClient shareInstance].mcsManager requestCustomerService: service];
入参参数名类型说明
serviceJXWorkgroup技能组对象
返回值

JXMCSManagerDelegate代理的回调方法:

服务状态改变

- (void)didServiceStatusUpdated:(JXWorkgroup *)workgroup ;

- 服务结束

-(void)didServiceEnd:(JXWorkgroup *)workgroup withError:(JXError *)error ;

等待队列的状态更新

- (void)didService:(JXWorkgroup *)workgroup positionChanged:(NSInteger)position;

示例代码:

[[JXIMClient shareInstance].mcsManager requestCustomerService: serviceId];

服务状态改变

- (void)didServiceStatusUpdated:(JXWorkgroup *)workgroup {

}

服务结束

-(void)didServiceEnd:(JXWorkgroup *)workgroup withError:(JXError *)error {
}

等待队列的状态更新

- (void)didService:(JXWorkgroup *)workgroup positionChanged:(NSInteger)position {

}


4.8、取消等待

方法名称取消等待客服服务
方法[[JXIMClient shareInstance].mcsManager cancelWait];
入参
返回值

示例代码:

[[JXIMClient shareInstance].mcsManager cancelWait];


4.9、离开技能组(访客主动结束会话)

方法名称离开技能组(访客主动结束会话)
方法[[JXIMClient shareInstance].mcsManager leaveService];
入参
返回值

JXMCSManagerDelegate代理的回调方法:

收到评价请求

-(void)didReceiveEvaluationRequest:(JXWorkgroup *)workgroup;

服务状态改变

-(void)didServiceStatusUpdated:(JXWorkgroup *)workgroup;

服务结束

- (void)didServiceEnd:(JXWorkgroup *)workgroup withError:(JXError *)error;

示例代码:

[[JXIMClient shareInstance].mcsManager leaveService];

代理回调

收到评价请求

-(void)didReceiveEvaluationRequest:(JXWorkgroup *)workgroup{
}

服务状态改变

-(void)didServiceStatusUpdated:(JXWorkgroup *)workgroup {

}

服务结束

- (void)didServiceEnd:(JXWorkgroup *)workgroup withError:(JXError *)error {

}


4.10、发送满意度评价

方法名称发送满意度评价
方法[[JXIMClient shareInstance].mcsManager evaluateService: service andScore: scoreandCallback: callback];
入参参数名类型说明
serviceJXWorkgroup技能组对象
scoreNSInteger满意度评价分数
callbackblock没有返回值,参数为error的block
返回值

示例代码:

 [[JXIMClient shareInstance].mcsManager evaluateService: service andScore: scoreandCallback: callback];


4.11、在线留言

留言是加载H5网页来做的,不同技能组的H5网页的URL不一样,获得URL以后,用webview加载出来。

方法名称在线留言
方法[[JXIMClient shareInstance].mcsManager leaveMessageURL: service];
入参参数名类型说明
serviceJXWorkgroup技能组对象
返回值类型说明
NSURL留言H5网页的URL

4.12、获得开发者中心配置

在获取配置之前,先更新开发者中心配置,然后就获得了服务端返回的各项配置。

4.12.1、更新开发者中心配置

方法名称更新开发者中心配置
方法[JXAppConfig updateConfig];
入参
返回值

4.12.2、是否开启预知消息

方法名称是否开启预知消息
方法[JXAppConfig sharedInstance].prepareFlag;
入参
返回值类型说明
BOOLYES为开启,NO为不开启

4.12.3、获得客服头像网址

方法名称获得客服头像网址
方法[JXAppConfig sharedInstance].agentHeadImg;
入参
返回值类型说明
NSString图片的网址字符串

4.12.4、是否开启访客满意度评价

方法名称是否开启访客满意度评价
方法[JXAppConfig sharedInstance].visitorSatisfyFlag;
入参
返回值类型说明
BOOLYES为开启,NO为不开启

4.12.5、访客是否能发送表情

方法名称访客是否能发送表情
方法[JXAppConfig sharedInstance].userEmoticonFlag
入参
返回值类型说明
BOOLYES为能,NO为不能


4.13、获得满意度评价后的感谢语

方法名称获得满意度评价后的感谢语
方法[[JXIMClient sharedInstance].mcsManager fetchEvaluationConfigSync].thanksMsg;
入参
返回值类型说明
NSString感谢语字符串

4.14、添加客服事件监听器

方法名称添加客服事件监听器
方法[[JXIMClient sharedInstance].chatManager addDelegate:delegate];
入参参数名类型说明
delegateid添加代理来监听事件回调

JXMCSManagerDelegate代理的回调:

技能组服务状态改变的回调

- (void)didServiceStatusUpdated:(JXWorkgroup *)workgroup;

技能组等待位置改变的回调

- (void)didService:(JXWorkgroup *)workgroup positionChanged:(NSInteger)position;

服务结束的回调

- (void)didServiceEnd:(JXWorkgroup *)workgroup withError:(JXError *)error;

接收到满意度评价邀请的回调

- (void)didReceiveEvaluationRequest:(JXWorkgroup *)workgroup;

 机器人多次回答错误收到转人工要求

- (void)didReceiveTransferCustomerServiceRequest:(JXWorkgroup *)workgroup;


4.15、移除客服事件监听器

方法名称移除客服事件监听器
方法[[JXIMClient sharedInstance].chatManager addDelegate:nil];
入参参数名类型说明
delegatenil移除代理就无法监听

5.1、获取会话列表

方法名称获取会话列表
方法[[JXIMClient shareInstance].chatManager sessionList];
入参
返回值类型说明
NSArray会话对象JXConversation的列表

示例代码:

NSArray *sessionArray = [[JXIMClientshareInstance].chatManager sessionList];


5.2、获取单条会话

方法名称获取单条会话
方法[[JXIMClient shareInstance].chatManager conversationForChatter:chatter andType: type];
入参参数名类型说明
ChatterString会话的唯一标识
typeJXConversationType会话类型
返回值类型说明
JXConversation返回chatter对应的JXConversation对象

示例代码:

JXConversation *session = [[JXIMClientshareInstance].chatManagerconversationForChatter:chatterandType:JXConversationTypeCS];


5.3、获取单条消息

方法名称获取单条消息
方法[session messageForId:messageId];
入参参数名类型说明
messageIdString消息的Id
返回值类型说明
JXMessage返回messageId对应的JXMessage对象

示例代码:

JXConversation *session;    //获取会话

[session messageForId:messageId];


5.4、添加消息到会话

方法名称添加消息到会话
方法[[JXIMClient shareInstance].chatManager addMessage:message];
入参参数名类型说明
messageJXMessage收到新消息时需要加入会话消息列表

示例代码:

[[JXIMClient shareInstance].chatManager addMessage:message];

5.5、设置消息内容

5.5.1、设置文本消息的内容

方法名称设置文本消息的内容
方法[message setTextContent:content];
入参参数名类型说明
contentString文本消息的内容
返回值类型说明
BOOLYES为设置成功,NO为设置失败

5.5.2、设置文件消息的内容

方法名称设置文件消息的内容
方法[message setFileContent:data];
入参参数名类型说明
dataNSData文件消息的内容
返回值类型说明
BOOLYES为设置成功,NO为设置失败

5.5.3、设置图片消息的内容

方法名称设置图片消息的内容
方法[message setImageContent:imageData compressionRate:rate];
入参参数名类型说明
imageDataNSData图片消息的内容
rateCGFloat旋转角度
返回值类型说明
BOOLYES为设置成功,NO为设置失败

5.5.4、设置音频消息的内容

方法名称设置音频消息的内容
方法[message setAudioContent:filePath duration:duration];
入参参数名类型说明
filePathNSString音频消息的路径
durationNSInteger音频消息的时长
返回值类型说明
BOOLYES为设置成功,NO为设置失败

5.5.5、设置视频消息的内容

方法名称设置视频消息的内容
方法[message setVideoContent:filePath thumbPath:thumbPath];
入参参数名类型说明
filePathNSString视频消息的路径
thumbPathNSString视频消息缩略图的路径
返回值类型说明
BOOLYES为设置成功,NO为设置失败

5.5.6、设置位置消息的内容

方法名称设置位置消息的内容
方法[message setLocContent:label latitude:latitude longitude:longitude];
入参参数名类型说明
labelNSString位置标题
latitudedouble纬度
longitudedouble经度
返回值类型说明
BOOLYES为设置成功,NO为设置失败

5.5.7、设置富文本消息的内容

方法名称设置富文本消息的内容
方法[message setRichTextContent:contenttitle:titlelinkURL:urlimage:imageData];
入参参数名类型说明
contentNSString消息的内容
titleNSString消息的标题
urlNSString富文本消息中链接的网址
imageDataNSData富文本消息中图片的内容
返回值类型说明
BOOLYES为设置成功,NO为设置失败

5.5.8、设置提示消息的内容

方法名称设置提示消息的内容
方法[message setTipsContent:tips];
入参参数名类型说明
tipsNSString提示消息的内容
返回值类型说明
BOOLYES为设置成功,NO为设置失败

5.5.9、设置预知消息的内容

方法名称设置预知消息的内容
方法[message setForeseeContent:content andType:type];
入参参数名类型说明
contentString消息的内容
typeJXMessageType消息的类型
返回值类型说明
BOOLYES为设置成功,NO为设置失败


5.6、发送消息

方法名称发送消息
方法[[JXIMClient shareInstance].chatManager sendMessage:message];
入参参数名类型说明
messageJXMessage发送的消息对象

示例代码:

[[JXIMClientshareInstance].chatManagersendMessage:message];


5.7、删除单条消息

方法名称删除单条消息
方法[session deleteMessage:message];
入参参数名类型说明
messageJXMessage要删除的消息对象

示例代码:

JXConversation *session;

[session deleteMessage:message];


5.8、删除单条会话

方法名称删除单条会话
方法[[JXIMClient shareInstance].chatManager destoryConversation:conversation];
入参参数名类型说明
conversationJXConversation会话对象

示例代码:

JXConversation *session;  //目标会话

[[JXIMClientshareInstance].chatManagerdestoryConversation:session];


5.9、下载文件消息

方法名称下载文件消息
方法 [[JXIMClient shareInstance].chatManager downloadAttachmentForMessage:message result:callback progress:progressBlock];
入参参数名类型说明
messageJXMessage消息对象
callbackblock参数为result和JXError的block,下载完成后会调用这个Block的方法
progressBlockblock参数为progress的block,下载过程中会调用这个biock,监控下载进度

示例代码:

[[JXIMClientshareInstance].chatManagerdownloadAttachmentForMessage:modelresult:^(id result, JXError *error){

if (error) {

//下载附件失败}else{

//下载附件成功

}


5.10、获取历史消息

方法名称获取会话的历史消息
方法[conversation loadMessagesBefore:message count:count];
入参参数名类型说明
messageJXMessage消息对象
countInt消息条数
返回值类型说明
NSArray历史消息数组

示例代码:

NSArray *loading = [weakSelf.conversation loadMessagesBefore:message count:weakSelf.messageCountOfPage];