七鱼开发文档中心
总览服务端 APIWebiOSAndroid鸿蒙Uniapp微信小程序插件三方接入

自定义事件

事件配置

本节说明事件回调能力的配置入口和整体使用方式。

iOS SDK 提供部分功能事件自定义,通过 QYSDK 单例的 customActionConfig 方法获取 QYCustomActionConfig 自定义事件配置类,该类为单例模式。QYSessionViewController 中也存在一些回调事件。

属性列表

QYCustomActionConfig主要以回调形式实现事件自定义,提供较多 block 属性设置:

属性类型说明
actionBlockQYActionBlock部分通用动作事件,目前主要用于客服相关,非必填
linkClickBlockQYLinkClickBlock所有消息中的链接回调
botClickQYBotClickBlock机器人部分模板消息点击事件
pushMessageClickQYLinkClickBlock七鱼推送消息点击事件
showBotCustomInfoBlockQYShowBotCustomInfoBlock机器人自定义信息回调
commodityActionBlockQYSelectedCommodityActionBlock订单卡片按钮点击事件
extraClickBlockQYExtraViewClickBlock消息扩展视图点击事件
notificationClickBlockQYSystemNotificationClickBlock系统消息点击
eventClickBlockQYEventBlock消息内部分点击事件数据透传
customButtonClickBlockQYCustomButtonBlock自定义事件按钮点击事件
avatarClickBlockQYAvatarClickBlock消息头像点击事件
photoPermissionBlockQYPermissionBlock相册权限请求回调
cameraPermissionBlockQYPermissionBlock相机权限请求回调
microPermissionBlockQYPermissionBlock麦克风权限请求回调
pullRoamMessageBOOL账号登录后是否拉取漫游消息,默认值:NO

超链点击回调示例

[[QYSDK sharedSDK] customActionConfig].linkClickBlock = ^QYLinkClickActionPolicy(NSString *linkAddress) {
        NSString *toast = [NSString stringWithFormat:@"您点击了链接:%@", linkAddress];
        return QYLinkClickActionPolicyCancel;
   };

接口列表

提供如下接口:

接口参数类型说明
setDeactivateAudioSessionAfterComplete:Block设置录制或者播放语音完成以后是否自动deactivate
showQuitWaitingAlert:Block显示退出排队提示

QYSessionViewController提供如下事件回调:

接口说明
buttonClickBlock:输入区域上方工具栏内的按钮点击回调
evaluationBlock:人工满意度评价事件
robotEvaluationBlock:机器人满意度评价事件
preSessionEvaluationBlock:会话前强制人工满意度评价事件,自定义视图写在此回调中(web端可配置关闭,默认关闭)

如果需要参考评价事件的使用示例,请查看会话管理 - 满意度评价

请求客服事件

V4.6.0 版本后,SDK 完善了客服相关事件的对外接口,可以拦截所有请求客服前和请求客服后的事件,需要设置QYCustomActionConfig中的actionBlock属性,该block返回一个QYAction对象,此对象定义如下:

/**
 *  QYAction定义了部分动作,通过type区分不同情形,并调用各自对应的回调
 *  若需要获取这部分动作,请在QYCustomActionConfig单例中设置QYAction属性
 */
@interface QYAction : NSObject

/**
 *  动作类型
 */
@property (nonatomic, assign) QYActionType type;

/**
 *  请求客服前调用
 */
@property (nonatomic, copy) QYRequestStaffBeforeBlock requestStaffBeforeBlock;

/**
 *  请求客服后调用
 */
@property (nonatomic, copy) QYRequestStaffAfterBlock requestStaffAfterBlock;

@end

其中 QYActionType 目前定义了如下动作场景:

/**
 *  动作类型
 */
typedef NS_ENUM(NSInteger, QYActionType) {
    QYActionTypeNone = 0,
    QYActionTypeRequestStaffBefore,     //请求客服前
    QYActionTypeRequestStaffAfter,      //请求客服后
    QYActionTypeSessionAllocation       //会话分配
};

QYRequestStaffBeforeBlock为请求客服前回调的block,该事件给出了当前请求客服是何种场景,开发者可针对不同场景做定制化处理,其定义如下:

/**
 *  通用回调,一般用于告诉SDK是否继续进行后续操作
 *  例如:设置了请求客服前回调后,通过调用此QYCallback来继续或是中断请求客服
 */
typedef void (^QYCallback)(BOOL continueIfNeeded);

/**
 *  请求客服场景
 */
typedef NS_ENUM(NSInteger, QYRequestStaffBeforeScene) {
    QYRequestStaffBeforeSceneNone,               //无需关心的请求客服场景
    QYRequestStaffBeforeSceneInit,               //进入会话页面,初次请求客服
    QYRequestStaffBeforeSceneRobotUnable,        //机器人模式下告知无法解答,点击消息中人工按钮
    QYRequestStaffBeforeSceneNavHumanButton,     //机器人模式下,点击右上角人工按钮
    QYRequestStaffBeforeSceneActiveRequest,      //主动请求人工客服
    QYRequestStaffBeforeSceneChangeStaff,        //切换人工客服
};

/**
 *  请求客服前回调
 *
 *  @param scene 请求客服场景
 *  @param onlyHuman 是否只请求人工客服
 *  @param callback 处理完成后的回调,若需继续请求客服,则调用callback(YES);若需停止请求,调用callback(NO)
 */
typedef void (^QYRequestStaffBeforeBlock)(QYRequestStaffBeforeScene scene, BOOL onlyHuman, QYCallback callback);

QYRequestStaffAfterBlock为请求客服后回调的block,其中info为新会话的相关信息,包括客服ID、昵称、头像等,block定义如下:

/**
 *  请求客服后回调
 *
 *  @param info 会话相关信息
 *  @param error 错误信息
 */
typedef void (^QYRequestStaffAfterBlock)(NSDictionary *info, NSError *error);

以下为客服相关事件处理的示例代码:

QYActionBlock actionBlock = ^(QYAction *action) {
    if (action.type == QYActionTypeRequestStaffBefore) {
        action.requestStaffBeforeBlock = ^(QYRequestStaffBeforeScene scene, BOOL onlyHuman, QYCallback callback) {
            NSLog(@"当前请求客服的场景是:%lld", (long long)scene);
            ......
            
            //若继续请求客服
            if (callback) {
                callback(YES);
            }
            //若中断请求客服
            if (callback) {
                callback(NO);
            }
        }
    } else if (action.type == QYActionTypeRequestStaffAfter) {
        action.requestStaffAfterBlock = ^(NSDictionary *info, NSError *error) {
            if (error) {
                NSLog(@"请求客服失败,error:%@", error);
            } else {
                NSLog(@"请求客服成功,info:%@", (info ? info : @"none"));
            }
        };
    }
};
[[QYSDK sharedSDK] customActionConfig].actionBlock = actionBlock;

注:在 V4.4.0 版本中,仅可拦截请求客服前事件;若要拦截,请设置QYCustomActionConfig中的requestStaffBlock,处理完成后,请主动调用该block中的completion回调,并设置needed参数,YES 表示继续请求客服,NO 表示中断请求客服。

这篇文档有帮助吗?

目录