差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
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>​