# 自定义事件
iOS SDK 提供部分功能事件自定义,通过[QYSDK sharedSDK]
单例的customActionConfig
方法获取QYCustomActionConfig
自定义事件配置类,该类为单例模式。QYSessionViewController
类中也存在一些回调事件。
# 属性列表
QYCustomActionConfig
主要以回调形式实现事件自定义,提供较多block属性设置:
属性 | 类型 | 说明 |
---|---|---|
actionBlock | QYActionBlock | 部分通用动作事件,目前主要用于客服相关 |
linkClickBlock | QYLinkClickBlock | 所有消息中的链接回调 |
botClick | QYBotClickBlock | 机器人部分模板消息点击事件 |
pushMessageClick | QYLinkClickBlock | 七鱼推送消息点击事件 |
showBotCustomInfoBlock | QYShowBotCustomInfoBlock | 机器人自定义信息回调 |
commodityActionBlock | QYSelectedCommodityActionBlock | 订单卡片按钮点击事件 |
extraClickBlock | QYExtraViewClickBlock | 消息扩展视图点击事件 |
notificationClickBlock | QYSystemNotificationClickBlock | 系统消息点击 |
eventClickBlock | QYEventBlock | 消息内部分点击事件数据透传 |
customButtonClickBlock | QYCustomButtonBlock | 自定义事件按钮点击事件 |
avatarClickBlock | QYAvatarClickBlock | 消息头像点击事件 |
photoPermissionBlock | QYPermissionBlock | 相册权限请求回调 |
cameraPermissionBlock | QYPermissionBlock | 相机权限请求回调 |
microPermissionBlock | QYPermissionBlock | 麦克风权限请求回调 |
pullRoamMessage | BOOL | 账号登录后是否拉取漫游消息 |
# 接口列表
提供如下接口:
接口 | 说明 |
---|---|
setDeactivateAudioSessionAfterComplete: | 设置录制或者播放语音完成以后是否自动deactivate |
showQuitWaiting: | 显示退出排队提示 |
QYSessionViewController
提供如下事件回调:
接口 | 说明 |
---|---|
buttonClickBlock: | 输入区域上方工具栏内的按钮点击回调 |
evaluationBlock: | 人工满意度评价事件 |
robotEvaluationBlock: | 机器人满意度评价事件 |
preSessionEvaluationBlock: | 会话前强制人工满意度评价事件,自定义视图写在此回调中(web端可配置关闭,默认关闭) |
如果需要参考评价事件的使用示例,请查看满意度评价 (opens new window)
# 请求客服事件
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 表示中断请求客服。