自定义事件
事件配置
本节说明事件回调能力的配置入口和整体使用方式。
iOS SDK 提供部分功能事件自定义,通过 QYSDK 单例的 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 | 账号登录后是否拉取漫游消息,默认值: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 表示中断请求客服。
这篇文档有帮助吗?