差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
cs:300visitoraccess:iossdkapi [2020/03/25 09:52] candywang [桌面共享] |
cs:300visitoraccess:iossdkapi [2023/11/21 07:26] (当前版本) 侯力 [关闭会话] |
||
---|---|---|---|
行 1: | 行 1: | ||
====== CEC iOS SDK API ====== | ====== CEC iOS SDK API ====== | ||
- | |||
* [[#消息|消息]] | * [[#消息|消息]] | ||
* [[#会话|会话]] | * [[#会话|会话]] | ||
行 6: | 行 5: | ||
* [[#满意度评价|满意度评价]] | * [[#满意度评价|满意度评价]] | ||
* [[#实时音视频|实时音视频]] | * [[#实时音视频|实时音视频]] | ||
+ | * [[#集成声网音视频|集成声网音视频]] | ||
+ | * [[#欢迎语|欢迎语]] | ||
* [[#高级功能|高级功能]] | * [[#高级功能|高级功能]] | ||
+ | * [[#初始化访客语种|初始化访客语种]] | ||
行 24: | 行 26: | ||
</code> | </code> | ||
+ | ==== 发送文件消息 ==== | ||
+ | |||
+ | <code> | ||
+ | //filePath为本地文件路径,toUser为IM服务号 | ||
+ | HDMessage *message = [HDMessage createFileSendMessageWithLocalPath:filePath displayName:@"123" to:toUser]; | ||
+ | [[HDClient sharedClient].chatManager sendMessage:message progress:^(int progress){ | ||
+ | //发送消息进度 | ||
+ | }completion:^(HDMessage *aMessage, HDError *aError){ | ||
+ | //发送消息完成,aError为空则为发送成功 | ||
+ | }]; | ||
+ | </code> | ||
==== 发送语音消息 ==== | ==== 发送语音消息 ==== | ||
行 114: | 行 127: | ||
visitor.email = @"abv@126.com"; | visitor.email = @"abv@126.com"; | ||
visitor.desc = @"环信客服云"; | visitor.desc = @"环信客服云"; | ||
+ | //自定义字段传参集成用户信息 userDefineColumn 是 json 字符串 如下格式: | ||
+ | visitor.userDefineColumn = @"{"WQQ":"帅哥","QAZ":"LLLLLLLTTTTTTTT"}" | ||
HDMessage *message = [....];//构造相关消息 | HDMessage *message = [....];//构造相关消息 | ||
[message addContent:visitor]; //传访客的属性 | [message addContent:visitor]; //传访客的属性 | ||
行 134: | 行 149: | ||
vst.imageUrl = imageUrl; //图片url | vst.imageUrl = imageUrl; //图片url | ||
vst.itemUrl = itemUrl; //点击图片的链接 | vst.itemUrl = itemUrl; //点击图片的链接 | ||
+ | NSDictionary *dic2 = @{@"ios":@"我是ios表单预填写的值"}; | ||
+ | [vst.customDic addEntriesFromDictionary:dic2]; | ||
[message addContent:vst]; | [message addContent:vst]; | ||
+ | | ||
+ | //预填工单功能 一定要添加如下代码 不然没有这个功能 | ||
+ | NSDictionary *dic1 = @{@"createTicketEnable":@"true"}; | ||
+ | [message addMsgTypeDictionary:dic1]; | ||
+ | | ||
[[HDClient sharedClient].chatManager sendMessage:message progress:^(int progress) { | [[HDClient sharedClient].chatManager sendMessage:message progress:^(int progress) { | ||
//发送消息进度 | //发送消息进度 | ||
行 154: | 行 176: | ||
ord.imageUrl = imageUrl; | ord.imageUrl = imageUrl; | ||
ord.itemUrl = itemUrl; | ord.itemUrl = itemUrl; | ||
+ | //预填工单功能 填写如下方法 一定要在 addContent 方法前添加自定义字段 要不添加不上去 | ||
+ | NSDictionary *dic2 = @{@"ios":@"我是ios表单预填写的值"}; | ||
+ | [ord.customDic addEntriesFromDictionary:dic2]; | ||
+ | //添加订单信息 | ||
[message addContent:ord]; | [message addContent:ord]; | ||
+ | | ||
+ | //预填工单功能 一定要添加如下代码 不然没有这个功能 | ||
+ | NSDictionary *dic1 = @{@"createTicketEnable":@"true"}; | ||
+ | [message addMsgTypeDictionary:dic1]; | ||
+ | | ||
[[HDClient sharedClient].chatManager sendMessage:message progress:^(int progress) { | [[HDClient sharedClient].chatManager sendMessage:message progress:^(int progress) { | ||
//发送消息进度 | //发送消息进度 | ||
行 278: | 行 309: | ||
[conversation markAllMessagesAsRead:nil]; | [conversation markAllMessagesAsRead:nil]; | ||
</code> | </code> | ||
+ | ==== 更新会话为已读 ==== | ||
+ | <code> | ||
+ | [[HDClient sharedClient].chatManager markAllMessagesAsRead:@'需要标记已读的会话id' Completion:^(id responseObject, HDError *error) { | ||
+ | | ||
+ | }]; | ||
+ | </code> | ||
+ | ==== 关闭CEC会话 ==== | ||
+ | <code> | ||
+ | [[HDClient sharedClient].chatManager cec_closeServiceSessionId:@"会话id" withImServiceNum:@"im服务号" Completion:^(id responseObject, HDError *error) { | ||
+ | | ||
+ | }]; | ||
+ | </code> | ||
+ | ==== 获取访客id ==== | ||
+ | <code> | ||
+ | [[HDClient sharedClient].chatManager fetchCurrentVisitorId:@"im服务号" completion:^(HDError *aError, NSString *visitorId) { | ||
+ | | ||
+ | NSLog(@"=====visitorId=%@",visitorId); | ||
+ | }]; | ||
+ | </code> | ||
===== 满意度评价 ===== | ===== 满意度评价 ===== | ||
行 302: | 行 352: | ||
[conversation sendSatisfactionEvaluationCompletion:^(BOOL send, HDError *error) {}]; | [conversation sendSatisfactionEvaluationCompletion:^(BOOL send, HDError *error) {}]; | ||
</code> | </code> | ||
+ | ==== 获取配置对应的接口 ==== | ||
+ | <code> | ||
+ | typedef NS_ENUM (NSInteger, HDOptionConfig) { | ||
+ | /**< 问题解决评价 开关 */ | ||
+ | HDOption_Satisfaction_ProblemSolvingEvaluationOn = 1, | ||
+ | /**< 请对我的服务做出评价 文案 */ | ||
+ | HDOption_Satisfaction_GreetingMsgEnquiryInvite, | ||
+ | /**< 问题解决评价引导语 */ | ||
+ | HDOption_Satisfaction_EvaluteSolveWord, | ||
+ | }; | ||
+ | /* | ||
+ | * 获取配置接口对应参数 | ||
+ | * option : HDOptionConfig 枚举类型 | ||
+ | * serviceSessionId 会话id | ||
+ | */ | ||
+ | [[HDClient sharedClient].chatManager getOptionsConfig: option WithServiceSessionId: Completion:^(id responseObject, HDError *error) { | ||
+ | |||
+ | NSLog(@"返回对应的值%@",responseObject); | ||
+ | }]; | ||
+ | |||
+ | </code> | ||
+ | ==== 获取满意度评价解决未解决 标签接口 ==== | ||
+ | <code> | ||
+ | // ServiceSessionId 是 当前会话ID | ||
+ | [[HDClient sharedClient].chatManager getResolutionParamServiceSessionId:@"当前会话id" Completion:^(id responseObject, HDError *error) { | ||
+ | |||
+ | }]; | ||
+ | </code> | ||
===== 留言 ===== | ===== 留言 ===== | ||
行 308: | 行 385: | ||
<code> | <code> | ||
- | /* | + | /** |
- | @param tenantId 租户Id | + | @brief 获取留言列表 |
- | @param cname IM 服务号 | + | @discussion 失败返回NSError,成功返回responseObject |
- | @param projectId 留言的Project ID | + | |
- | @param page 第几页,从0开始,默认为第0页 | + | @param projectId 留言ProjectId 进入“管理员模式 → 留言”,可以看到这个Project ID |
- | @param pageSize 每一页的大小,默认为10,最大不能超过100 | + | @param targetUser IM 服务号 |
- | */ | + | @param page 第几页从0开始 |
- | [[[HDClient sharedClient] leaveMsgManager] getLeaveMsgsWithProjectId:<#projectId#> cname:<#NSString *#> page:<#page#> pageSize:<#pageSize#> completion:^(id responseObject, NSError *error) { | + | @param pageSize 每页显示个数 |
- | if(!error) { //请求成功 | + | @param completion 返回结果 |
- | } else { //请求失败 | + | */ |
- | } | + | - (void)getLeaveMsgsWithProjectId:(NSString *)projectId |
- | }]; | + | targetUser:(NSString *)imCustomerService |
+ | page:(NSInteger)page | ||
+ | pageSize:(NSInteger)pageSize | ||
+ | completion:(void(^)(id responseObject,NSError *error))completion; | ||
</code> | </code> | ||
行 325: | 行 405: | ||
<code> | <code> | ||
- | //留言包括:创建者信息、附件[数组]以及其他属性 | + | /** |
- | Creator *creator = [Creator new]; | + | @brief 创建一个留言 |
- | creator.name = <#创建者名称#>; | + | @discussion 失败返回NSError,成功返回responseObject |
- | creator.avatar = <#头像地址#>; | + | @param projectId 留言ProjectId 进入“管理员模式 → 留言”,可以看到这个Project ID |
- | creator.email = <#邮箱#>; | + | @param imCustomerService im服务号 |
- | creator.phone = <#电话号码#>; | + | |
- | creator.qq = <#qq号码#>; | + | |
- | creator.companyName = <#公司#>; | + | |
- | creator.desc = <#备注#>; | + | |
- | //附件(附件可以没有,也可以是多个) | + | |
- | LeaveMsgAttachment *attachment = [LeaveMsgAttachment new]; | + | |
- | attachment.name = <#文件名#>; | + | |
- | attachment.type = <#类型 AttachmentType#>; | + | |
- | attachment.url = <#url#>; | + | |
- | LeaveMsgRequestBody *body = [[LeaveMsgRequestBody alloc] init]; | + | |
- | body.subject = <#主题#>; | + | |
- | body.content = <#内容#>; | + | |
- | body.status = <#默认处理状态#>; | + | |
- | body.creator = creator; | + | |
- | NSArray *attachments = @[attachment]; | + | |
- | body.attachments = attachments; | + | |
- | /* | + | |
- | @param tenantId 租户Id | + | |
- | @param projectId 留言的Project ID | + | |
- | @param cname IM服务号 | + | |
@param requestBody 留言参数 | @param requestBody 留言参数 | ||
- | */ | + | @param completion 返回结果 |
- | [[[HDClient sharedClient] leaveMsgManager] createLeaveMsgWithProjectId:<#NSString *#> cname:<#NSString *#> requestBody:<#LeaveMsgRequestBody *#> completion:^(id responseObject, NSError *error) { | + | */ |
- | if(error == nil){ //发送留言成功 | + | - (void)createLeaveMsgWithProjectId:(NSString *)projectId |
- | } else {//发送留言失败 | + | targetUser:(NSString *)imCustomerService |
- | } | + | requestBody:(LeaveMsgRequestBody *)requestBody |
- | }]; | + | completion:(void(^)(id responseObject,NSError *error))completion; |
</code> | </code> | ||
行 362: | 行 423: | ||
<code> | <code> | ||
- | /* | + | /** |
- | @param tenantId 租户Id | + | @brief 获取留言详情 |
- | @param projectId 留言的Project ID | + | @discussion 失败返回NSError,成功返回responseObject |
- | @param cname IM服务号 | + | |
- | @param tickedId 留言Id | + | @param projectId 留言的Project ID |
- | */ | + | @param targetUser im服务号 |
- | [[[HDClient sharedClient] leaveMsgManager] getLeaveMsgDetailWithProjectId:projectId:<#NSString *#> cname:<#NSString *#> ticketId:<#NSString *#> completion:^(id responseObject, NSError *error) { | + | @param ticketId 留言ID |
- | if(error == nil){ //获取成功 | + | @param completion 返回结果 通过error判断成败 |
- | } else {//获取失败 | + | */ |
- | } | + | - (void)getLeaveMsgDetailWithProjectId:(NSString *)projectId |
- | }]; | + | targetUser:(NSString *)imCustomerService |
+ | ticketId:(NSString*)ticketId | ||
+ | completion:(void(^)(id responseObject,NSError *error))completion; | ||
</code> | </code> | ||
行 378: | 行 441: | ||
<code> | <code> | ||
- | /* | + | /** |
- | @param tenantId 租户Id | + | @brief 获取留言下所有评论 |
- | @param projectId 留言的Project ID | + | @discussion 失败返回NSError,成功返回responseObject |
- | @param cname IM服务号 | + | @param targetUser im服务号 |
- | @param tickedId 留言Id | + | @param projectId 留言ProjectId 进入“管理员模式 → 留言”,可以看到这个Project ID |
- | @param page 第几页,从0开始,默认为第0页 | + | @param ticketId 留言ID |
- | @param pageSize 每页数据数目,每一页的大小,默认为10,最大不能超过100 | + | @param page 第一页从0开始 |
- | */ | + | @param pageSize 每页显示的个数 |
- | [[[HDClient sharedClient] leaveMsgManager] getLeaveMsgCommentsWithProjectId:<#(NSString *)#> cname:<#NSString *#> ticketId:<#(NSString *)#> page:<#(NSUInteger)#> pageSize:<#(NSUInteger)#> completion:^(id responseObject, NSError *error) { | + | @param completion 返回结果 通过error判断成败 |
- | if(error == nil){ //获取成功 | + | */ |
- | } else {//获取失败 | + | |
- | } | + | - (void)getLeaveMsgCommentsWithProjectId:(NSString*)projectId |
- | }]; | + | targetUser:(NSString *)imCustomerService |
+ | ticketId:(NSString *)ticketId | ||
+ | page:(NSUInteger)page | ||
+ | pageSize:(NSUInteger)pageSize | ||
+ | completion:(void(^)(id responseObject,NSError *error))completion; | ||
</code> | </code> | ||
行 396: | 行 463: | ||
<code> | <code> | ||
- | //回复包括:创建者信息、附件[数组]以及其他属性 | + | /** |
- | Creator *creator = [Creator new]; | + | @brief 给一个留言添加评论 |
- | creator.identity = <#可选,创建这个评论人的id#>; | + | @discussion 失败返回NSError,成功返回responseObject |
- | creator.name = <#创建者名称#>; | + | @param targetUser im服务号 |
- | creator.avatar = <#头像地址#>; | + | @param projectId 留言ProjectId 进入“管理员模式 → 留言”,可以看到这个Project ID |
- | creator.email = <#邮箱#>; | + | @param ticketId 留言ID |
- | creator.phone = <#电话号码#>; | + | @param requestBody 请求体 |
- | creator.qq = <#qq号码#>; | + | @param completion 返回结果block |
- | creator.companyName = <#公司#>; | + | */ |
- | //附件(附件可以没有,也可以是多个) | + | - (void)createLeaveMsgCommentWithProjectId:(NSString*)projectId |
- | LeaveMsgAttachment *attachment = [LeaveMsgAttachment new]; | + | targetUser:(NSString *)imCustomerService |
- | attachment.name = <#文件名#>; | + | ticketId:(NSString *)ticketId |
- | attachment.type = <#类型 AttachmentType#>; | + | requestBody:(LeaveMsgRequestBody*)requestBody |
- | attachment.url = <#url#>; | + | completion:(void(^)(id responseObject,NSError *error))completion; |
- | LeaveMsgRequestBody *body = [[LeaveMsgRequestBody alloc] init]; | + | |
- | body.subject = <#主题#>; | + | |
- | body.content = <#内容#>; | + | |
- | body.replyId = <#回复评论的Id#> | + | |
- | body.status = <#默认处理状态#>; | + | |
- | body.creator = creator; | + | |
- | NSArray *attachments = @[attachment]; | + | |
- | body.attachments = attachments; | + | |
- | + | ||
- | /* | + | |
- | @param tenantId 租户Id | + | |
- | @param projectId 留言的Project ID | + | |
- | @param cname IM服务号 | + | |
- | @param tickedId 留言Id | + | |
- | @param requestBody 请求体 | + | |
- | */ | + | |
- | [[[HDClient sharedClient] leaveMsgManager] createLeaveMsgCommentWithProjectId:<#projectId#> cname:<#NSString *#> ticketId:<#留言id#> requestBody:<#LeaveMsgRequestBody*#> completion:^(id responseObject, NSError *error) { | + | |
- | if(error == nil){ //回复成功 | + | |
- | } else {//回复失败 | + | |
- | } | + | |
- | }]; | + | |
</code> | </code> | ||
行 436: | 行 482: | ||
<code> | <code> | ||
- | @param toUser IM服务号 | + | /** |
- | [[[HDClient sharedClient] leaveMsgManager] getWorkStatusWithToUser:<#(NSString *)#> completion:^(BOOL isWork, NSError *error) { | + | @brief 获取当前是否是留言状态 |
- | if (error == nil) { //成功 | + | |
- | if (isWork) { //工作状态 | + | @param imServiceNumber im服务号 |
- | } else { //下班 | + | @param completion 返回结果 true or false |
- | } | + | */ |
- | } else { //请求失败 | + | - (void)getWorkStatusWithToUser:(NSString *)imServiceNumber completion:(void (^)(BOOL,NSError *))completion; |
- | } | + | |
- | }]; | + | |
</code> | </code> | ||
行 571: | 行 615: | ||
completionHandler:nil]; | completionHandler:nil]; | ||
}]; | }]; | ||
+ | </code> | ||
+ | |||
+ | ===== 集成声网音视频 ===== | ||
+ | |||
+ | ==== 监听呼入通话 ==== | ||
+ | |||
+ | <code> | ||
+ | //注册实时通话回调 | ||
+ | [[HDClient sharedClient].callManager addDelegate:<#(id<HDCallManagerDelegate>)#> delegateQueue:nil]; | ||
+ | //queue默认为main //移除实时通话回调 | ||
+ | [[HDClient sharedClient].callManager removeDelegate:<#(id<HDCallManagerDelegate>)#>]; | ||
+ | //收到一个视频通话请求,参数为加入房间 相关参数 | ||
+ | - (void)onCallReceivedParameter:(HDKeyCenter *)keyCenter; | ||
+ | //第三方坐席进来 获取对应的坐席信息 | ||
+ | - (void)onCallReceivedInvitation:(NSString *)thirdAgentNickName withUid:(NSString *)uid; | ||
+ | </code> | ||
+ | 更多集成可以参考访客demo中Call模块中的实现。[[cs:300visitoraccess:iosdemo|CEC iOS UI]] | ||
+ | |||
+ | ===== 欢迎语 ===== | ||
+ | |||
+ | ==== 获取机器人欢迎语 ==== | ||
+ | |||
+ | <code> | ||
+ | //使用<HDClient.sharedClient.chatManager>调用 | ||
+ | // 获取机器人欢迎语 翻译使用api aServerNumber:im服务号 visitorUserName:访客用户名 | ||
+ | - (void)getRobotWelcomeWithImServerNumber:(NSString *)aServerNumber withVisitorUserName:(NSString *)visitorUserName | ||
+ | completion:(void(^)(NSDictionary *info, HDError *error))aCompletion; | ||
+ | // 获取机器人欢迎语 aServerNumber:im服务号 | ||
+ | - (void)getRobotWelcomeWithImServerNumber:(NSString *)aServerNumber | ||
+ | completion:(void(^)(NSDictionary *info, HDError *error))aCompletion; | ||
+ | </code> | ||
+ | |||
+ | ==== 获取企业欢迎语 ==== | ||
+ | |||
+ | <code> | ||
+ | // 获取企业欢迎语 使用<HDClient.sharedClient.chatManager>调用 | ||
+ | - (void)getEnterpriseWelcomeWithCompletion:(void(^)(NSString *welcome, HDError *error))aCompletion; | ||
+ | // 获取企业欢迎语 设置语种 visitorUserName 访客登录用户名 | ||
+ | - (void)getEnterpriseWelcomeWithVisitorUserName:(NSString *)visitorUserName WithCompletion:(void(^)(NSString *welcome, HDError *error))aCompletion; | ||
+ | </code> | ||
+ | |||
+ | ==== 获取app关联中个性化会话设置的企业欢迎语 ==== | ||
+ | |||
+ | <code> | ||
+ | // 获取企业欢迎语 使用<HDClient.sharedClient.chatManager>调用 | ||
+ | // 获取 APP关联设置:个性化会话设置增加企业欢迎语 visitorUserName 用户名 aServerNumber : im服务号 也就是to | ||
+ | - (void)getAppRelevanceEnterpriseWelcomeWithVisitorUserName:(NSString *)visitorUserName withImServerNumber:(NSString *)aServerNumber Completion:(void(^)(NSString *welcome, HDError *error))aCompletion; | ||
+ | </code> | ||
+ | |||
+ | ==== 获取技能组菜单 ==== | ||
+ | |||
+ | <code> | ||
+ | // 获取技能组菜单 设置语种 visitorUserName 访客登录用户名 使用<HDClient.sharedClient.chatManager>调用 | ||
+ | - (void)getSkillGroupMenuWithVisitorUserName:(NSString *)visitorUserName Completion:(void (^)(NSDictionary *, HDError *))aCompletion | ||
+ | </code> | ||
+ | ==== 获取app关联中个性化会话设置的欢迎语菜单指定技能组 ==== | ||
+ | |||
+ | <code> | ||
+ | // 使用<HDClient.sharedClient.chatManager>调用 | ||
+ | // 获取 APP关联设置:个性化会话设置增加获取技能组菜单界面skillgroup-menu visitorUserName 用户名 aServerNumber : im服务号 也就是to | ||
+ | - (void)getAppRelevanceSkillGroupMenuWithVisitorUserName:(NSString *)visitorUserName withImServerNumber:(NSString *)aServerNumber Completion:(void(^)(NSDictionary *info, HDError *error))aCompletion; | ||
+ | </code> | ||
+ | |||
+ | ==== 获取当前会话id ==== | ||
+ | <code> | ||
+ | /** | ||
+ | * 获取当前会话id | ||
+ | * @param aUsername IM服务号 | ||
+ | * @param aCompletionBlock 发送完成回调block,如果当前有会话,则返回,没有时,返回nil, 表示当前无有效会话 | ||
+ | */ | ||
+ | |||
+ | // 使用<HDClient.sharedClient.chatManager>调用 | ||
+ | - (void)fetchCurrentSessionId:(NSString *)aUsername | ||
+ | completion:(void(^)(NSString *sessionId, HDError *aError))aCompletionBlock; | ||
+ | // 当返回sessionId为空时,则代表此会话不存在,也就是未咨询或者咨询已结束,下次咨询可先发欢迎语 | ||
+ | // 当返回value不为空时,则返回的当前会话的会话ID,也就是说会话正在咨询中,不需要发送欢迎语 | ||
+ | |||
</code> | </code> | ||
行 598: | 行 719: | ||
</code> | </code> | ||
+ | ==== 获取坐席的输入状态 ==== | ||
+ | 1. 初始化时设置需要监听输入状态: | ||
+ | <code> | ||
+ | options.showAgentInputState = YES; | ||
+ | </code> | ||
+ | |||
+ | 2. 需要监听<HDChatManagerDelegate>的agentInputStateChange:方法 | ||
+ | |||
+ | <code> | ||
+ | /** | ||
+ | 坐席输入状态变化 | ||
+ | |||
+ | @param content 内容 | ||
+ | */ | ||
+ | - (void)agentInputStateChange:(NSString *)content; | ||
+ | |||
+ | [[HDClient sharedClient].chatManager addDelegate:self delegateQueue:nil]; | ||
+ | </code> | ||
+ | |||
+ | 3. 在聊天页面调用以下方法后,可以收到agentInputStateChange: 回调 | ||
+ | <code> | ||
+ | [[HDClient sharedClient].chatManager bindChatWithConversationId:self.conversation.conversationId]; | ||
+ | </code> | ||
+ | ===== 初始化访客语种 ===== | ||
+ | <code> | ||
+ | // 获取企业欢迎语 设置语种 visitorUserName 访客登录用户名 language需要翻译的语言代码 使用<HDClient.sharedClient>调用 | ||
+ | // 传递语言代码 可以参考 文档 http://docs.easemob.com/cs/100agentmode/10conversation#智能翻译 | ||
+ | - (void)hd_SetVisitorLanguage:(NSString *)language withVisitorUserName:(NSString *)visitorUserName completion:(void (^)(id responseObject,HDError *aError))aCompletionBlock | ||
+ | </code> |