反垃圾(内容审核)
更新时间: 2024/05/27 14:22:51
目前云信支持三类反垃圾功能,分别为客户端本地反垃圾、易盾反垃圾与客户自定义反垃圾。
客户端本地反垃圾
该功能需要联系商务顾问申请开通。支持单聊、群聊和聊天室的文本消息反垃圾。反垃圾规则支持关键字和正则表达式两种匹配方式。
反垃圾词库由开发者在云信后台管理配置,SDK 内负责下载并管理这个词库。垃圾词汇命中后支持三种替换规则:
- 客户端替换 将命中反垃圾的词语替换成指定的文本,再将替换后的消息发送给服务器
- 客户端拦截 命中后,开发者不应发送此消息
- 服务器处理 开发者将消息相应属性配置为已命中服务端拦截库,再将消息发送给服务器(发送者能看到该消息发送,但是云信服务器不会投递该消息,接收者不会收到该消息),配置方法请见下文描述。
获取词库
SDK 在登录的时候会自动向服务器获取词库。
敏感词检测
- API 原型
dartclass MessageService {
/// 检验本地反垃圾词库,支持单聊、群聊和聊天室的文本消息反垃圾
/// <p>[content] 需要检查的文本
/// <p>[replacement] 指定 content 中被反垃圾词库命中后的替换文本
/// <p>[NIMLocalAntiSpamResult] 检验结果
///
Future<NIMResult<NIMLocalAntiSpamResult>> checkLocalAntiSpam(
String content, String replacement);
}
Web 端不支持本地反垃圾接口。
- NIMLocalAntiSpamResult 参数说明
参数 | 说明 |
---|---|
operator | 命中的垃圾词操作类型,0:未命中;1:客户端替换;2:客户端拦截;3:服务器拦截; |
content | 将垃圾词替换后的文本 |
- 示例
dartString content = "美国"
String replacement = "河蟹"
LocalAntiSpamResult result = await NimCore.instance.messageService.checkLocalAntiSpam(content,replacement);
final operator = result.operator;
if (operator == LocalAntiSpamResult.pass){
// 未命中
}else if(operator == LocalAntiSpamResult.clientReplace){
// 客户端替换
content = result.content;
}else if(operator == LocalAntiSpamResult.clientIntercept){
// 客户端拦截
// 就不要发消息了
}else if(operator == LocalAntiSpamResult.serverIntercept){
// 交给服务器
// 在消息中设置命中属性
message.clientAntiSpam = true;
}
易盾反垃圾
易盾反垃圾是指在控制台开通了易盾功能,通过易盾进行反垃圾,支持:单聊、群聊、聊天室消息,用户头像和用户资料等反垃圾。
如需使用易盾反垃圾,请先申请开通。开通后,可以到控制台配置开启易盾反垃圾的类型,例如:IM 的单聊、群聊、聊天室的文本和图片消息等经由易盾反垃圾。
自定义消息比较特殊,开发者如需自定义消息经由易盾反垃圾,在发送消息时需要通过配置 NIMMessage 的 antiSpamOption,来说明自定义消息的内容是文本还是图片、视频等,以便易盾按照相应类型进行反垃圾处理。
云信易盾反垃圾功能是指开通了易盾反垃圾的 App,消息将优先转发到易盾进行反垃圾过滤。如果需要对当前消息进行特殊配置,Android、Windows 和 macOS 需要对即将发送的消息调用 NIMMessage
的 antiSpamOption
属性,传递参数为 NIMAntiSpamOption
对象,开发者需要构造这个 NIMAntiSpamOption
对象。支持的配置项目如下所示:
- 参数说明
NIMAntiSpamOption 参数说明
NIMAntiSpamOption 参数 | 说明 |
---|---|
enable | boolean,是否过易盾反垃圾,若 App 并没有开通易盾,则设置无效。若设置为 false,则此消息不使用反垃圾 |
content | String,自定义反垃圾字段,仅对自定义消息有效 |
antiSpamConfigId | String,可选项,易盾反垃圾配置 id,可以指定此消息过易盾某个反垃圾配置 |
content 必须传递 json 对象,长度不超过 5000 字节,格式如下
json{
"type": 1, //1:文本,2:图片,3视频
"data": "" //文本内容or图片地址or视频地址
}
- 示例
dart// 该帐号为示例,请先注册
String account = "testAccount";
// 以单聊类型为例
NIMSessionType sessionType = NIMSessionType.p2p;
String text = "这条不需要过易盾";
// 创建一个文本消息
NIMMessage textMessage = await MessageBuilder.createTextMessage(
sessionId: account,
sessionType: sessionType,
text: text,
);
// 构造反垃圾对象
NIMAntiSpamOption antiSpamOption = new NIMAntiSpamOption();
antiSpamOption.enable = false;
textMessage.antiSpamOption = antiSpamOption;
// 发送给对方
final result = await NimCore.instance.messageService.sendMessage(
message: textMessage,
resend: false,
);
此文档是否对你有帮助?