文本在线检测
接口地址
https://as.dun.163yun.com/v3/text/check
接口描述
根据发布的内容、发布者、ip、设备id等信息来检测是否为需拦截内容。接口同步返回易盾内容安全服务实时反垃圾引擎检测结果,产品可以根据该结果对数据进行初步过滤。该接口返回结果状态分以下三种:
- 不通过:表示是确认内容非法,产品可对数据做删除隐藏处理。
- 嫌疑:表示该内容疑似非法,需内容安全云服务离线检测模块进一步确认处理,确认结果需产品自行定期调用文本离线检测结果获取获取,产品对嫌疑数据可以做特殊策略处理,如本人可见等。
- 通过:表示云安全反垃圾云服务实时反垃圾引擎未识别为非法内容,产品对该类数据可以直接放过,发表成功。云安全反垃圾云服务离线检测模块也会对这些数据做进一步分析处理,分析结果需产品自行定期调用文本离线检测结果获取获取。
文本限制
单次请求<5000字符,字段长度超过5000字符,会截取前面5000字符进行检测和存储;
请求参数
公共参数已省略,详细见 请求公共参数,其他参数如下:
请求参数
公共参数已省略,详细见 请求公共参数,其他参数如下:
基本参数
参数名称 | 类型 | 是否必选 | 最大长度 | 描述 |
---|---|---|---|---|
dataId | String | Y | 128 | 数据唯一标识,能够根据该值定位到该条数据,如对数据结果有异议,可以发送该值给客户经理查询 |
content | String | Y | 5000 | 用户发表内容,建议对内容中JSON、表情符、HTML标签、UBB标签等做过滤,只传递纯文本,以减少误判概率 |
title | String | N | 512 | 内容标题,适用于贴子、博客的文章标题等场景,建议抄送,辅助机审策略精准调优 |
dataType | Number | N | 4 | 子数据类型,与易盾内容安全服务约定即可 |
version | String | Y | 4 | 接口版本号,可选值 v3.1 |
callback | String | N | 2^16-1 | 数据回调参数,调用方根据业务情况自行设计,当调用文本离线结果获取接口时,该接口会原样返回该字段,详细见文本离线检测结果获取。作为数据处理标识,因此该字段应该设计为能唯一定位到该次请求的数据结构,如对用户的昵称进行检测,dataId可设为用户标识(用户ID),用户修改多次,每次请求数据的dataId可能一致,但是callback参数可以设计成定位该次请求的数据结构,比如callback字段设计成json,包含dataId和请求的时间戳等信息,当然如果不想做区分,也可以直接把callback设置成dataId的值。 |
publishTime | Number | N | 13 | 发表时间,UNIX 时间戳(毫秒值) |
callbackUrl | String | N | 256 | 人工审核结果回调通知到客户的URL。主动回调数据接口超时时间设置为2s,为了保证顺利接收数据,需保证接收接口性能稳定并且保证幂等性。 |
checkLabels | String | N | 512 | 业务过检分类,如果没有勾选分类提交返回参数错误,您可指定多个垃圾类别进行机器检测,多个垃圾类别以逗号分隔("100,200"),指定后业务配置过检分类即失效,过检分类列表:100:色情,200:广告,260:广告法,300:暴恐,400:违禁,500:涉政,600:谩骂,700:灌水 |
业务扩展参数
业务扩展参数,有助于通过业务维度辅助反垃圾结果判定
参数名称 | 类型 | 是否必选 | 最大长度 | 描述 |
---|---|---|---|---|
用户信息 | - | N | - | 用户信息包含账号、昵称、等级、角色等,请查看 业务扩展参数—用户信息 |
设备信息 | - | N | - | 设备信息包含设备ID、设备ID类型等,请查看 业务扩展参数—设备信息 |
场景信息 | - | N | - | 场景信息包含私聊、群聊、直播、帖子等场景字段,请查看 业务扩展参数—场景信息 |
ip | String | N | 128 | 用户IP地址,建议抄送,辅助机审策略精准调优 |
relatedKeys | String | N | 512 | String数组,多个关联Key以逗号分隔("xxx,xxx"),最多三个Key,单个Key长度不超过128,适用于私聊/评论/跟帖等情况同一用户或不同用户发送多条违规内容关联检测的场景。如需要检测同一评论下的同一用户或不同用户发送违规内容盖楼场景,Key传值方式可以为("评论ID用户ID,评论ID") |
extStr1 | String | N | 128 | 自定义扩展参数 |
extStr2 | String | N | 128 | 自定义扩展参数 |
extLon1 | Long | N | 2^63-1 | 自定义扩展参数 |
extLon2 | Long | N | 2^63-1 | 自定义扩展参数 |
响应结果
响应字段如下,响应通用字段已省略,详细见响应通用字段:
result 数据结构
参数名称 | 类型 | 描述 |
---|---|---|
action | Number | 检测结果,0:通过,1:嫌疑,2:不通过 |
censorType | Number | 审核模式,0:纯机审,1:机审+部分人审,2:机审+全量人审 |
strategyVersion | String | 策略版本号,策略更新时该参数会更新,可用于追溯策略调优效果 |
taskId | String | 本次请求数据标识,可以根据该标识查询数据最新结果 |
lang | json数组 | 语种代码数组,详见 语种代码表 |
isRelatedHit | boolean | 是否关联检测命中,true:关联检测命中,false:原文命中 |
labels | json数组 | 分类信息 |
labels 数据结构
参数名称 | 类型 | 描述 |
---|---|---|
label | Number | 分类信息,100:色情,200:广告,260:广告法,300:暴恐,400:违禁,500:涉政,600:谩骂,700:灌水,900:其他 |
subLabels | json数组 | 细分类信息,可能包含多个,可能为空 |
level | Number | 分类级别,0:通过, 1:嫌疑,2:不通过 |
details | json对象 | 其他信息 |
subLabels 数据结构
参数名称 | 类型 | 描述 |
---|---|---|
subLabel | Number | 细分类,详细编码请参考下方对应细分类编码 对照表 |
自定义细分类
易盾支持subLabel自定义细分类过检并返回,如有需求,可联系您的专属安全策略经理添加。
details 数据结构
参数名称 | 类型 | 描述 |
---|---|---|
hint | json数组 | 线索信息,用于定位文本中有问题的部分,辅助人工审核 |
hitInfos | json数组 | 线索详细信息 |
hitInfos 数据结构
参数名称 | 类型 | 描述 |
---|---|---|
hitType | Number | 线索分类信息,返回10:表示命中用户自定义添加用户名单,返回11:表示命中用户自定义添加ip名单,返回30:表示命中用户自定义添加敏感词,返回140:标识命中反作弊(hitReason为反作弊命中原因,1:数据异常 2:行为模型 3:设备模型 4:业务类型 5:校验异常 6:模拟器 7:越狱或root 8:浏览器异常 9:ip异常 10:易盾黑名单 11:自定义黑名单 12:自定义白名单) |
请求示例
/** 产品密钥ID,产品标识 */
private final static String SECRETID = "your_secret_id";
/** 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 */
private final static String SECRETKEY = "your_secret_key";
/** 业务ID,易盾根据产品业务特点分配 */
private final static String BUSINESSID = "your_business_id";
/** 易盾内容安全文本在线检测接口地址 */
private final static String API_URL = "https://as.dun.163yun.com/v3/text/check";
/** 实例化HttpClient,发送http请求使用,可根据需要自行调参 */
private static HttpClient httpClient = HttpClient4Utils.createHttpClient(100, 20, 2000, 2000, 2000);
/**
*
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
Map<String, String> params = new HashMap<String, String>();
// 1.设置公共参数
params.put("secretId", SECRETID);
params.put("businessId", BUSINESSID);
params.put("version", "v3.1");
params.put("timestamp", String.valueOf(System.currentTimeMillis()));
params.put("nonce", String.valueOf(new Random().nextInt()));
// 2.设置私有参数
params.put("dataId", "ebfcad1c-dba1-490c-b4de-e784c2691768");
params.put("content", "易盾测试内容!v3接口! ");
params.put("dataType", "1");
params.put("ip", "123.115.77.137");
params.put("account", "java@163.com");
params.put("deviceType", "4");
params.put("deviceId", "92B1E5AA-4C3D-4565-A8C2-86E297055088");
params.put("callback", "ebfcad1c-dba1-490c-b4de-e784c2691768");
params.put("publishTime", String.valueOf(System.currentTimeMillis()));
// 3.生成签名信息
String signature = SignatureUtils.genSignature(SECRETKEY, params);
params.put("signature", signature);
// 4.发送HTTP请求,这里使用的是HttpClient工具包,产品可自行选择自己熟悉的工具包发送请求
String response = HttpClient4Utils.sendPost(httpClient, API_URL, params, Consts.UTF_8);
// 5.解析接口返回值
JsonObject jObject = new JsonParser().parse(response).getAsJsonObject();
int code = jObject.get("code").getAsInt();
String msg = jObject.get("msg").getAsString();
if (code == 200) {
JsonObject resultObject = jObject.getAsJsonObject("result");
int action = resultObject.get("action").getAsInt();
String taskId = resultObject.get("taskId").getAsString();
JsonArray labelArray = resultObject.getAsJsonArray("labels");
/*for (JsonElement labelElement : labelArray) {
JsonObject lObject = labelElement.getAsJsonObject();
int label = lObject.get("label").getAsInt();
int level = lObject.get("level").getAsInt();
JsonObject detailsObject=lObject.getAsJsonObject("details");
JsonArray hintArray=detailsObject.getAsJsonArray("hint");
}*/
if (action == 0) {
System.out.println(String.format("taskId=%s,文本机器检测结果:通过", taskId));
} else if (action == 1) {
System.out.println(String.format("taskId=%s,文本机器检测结果:嫌疑,需人工复审,分类信息如下:%s", taskId, labelArray.toString()));
} else if (action == 2) {
System.out.println(String.format("taskId=%s,文本机器检测结果:不通过,分类信息如下:%s", taskId, labelArray.toString()));
}
} else {
System.out.println(String.format("ERROR: code=%s, msg=%s", code, msg));
}
}
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""云安全(易盾)文本在线检测接口python示例代码
接口文档: http://dun.163.com/api.html
python版本:python2.7
运行:
1. 修改 SECRET_ID,SECRET_KEY,BUSINESS_ID 为对应申请到的值
2. $ python text_check_api_demo.py
"""
__author__ = 'yidun-dev'
__date__ = '2016/3/10'
__version__ = '0.1-dev'
import hashlib
import time
import random
import urllib
import urllib2
import json
class TextCheckAPIDemo(object):
"""文本在线检测接口示例代码"""
API_URL = "https://as.dun.163yun.com/v3/text/check"
VERSION = "v3.1"
def __init__(self, secret_id, secret_key, business_id):
"""
Args:
secret_id (str) 产品密钥ID,产品标识
secret_key (str) 产品私有密钥,服务端生成签名信息使用
business_id (str) 业务ID,易盾根据产品业务特点分配
"""
self.secret_id = secret_id
self.secret_key = secret_key
self.business_id = business_id
def gen_signature(self, params=None):
"""生成签名信息
Args:
params (object) 请求参数
Returns:
参数签名md5值
"""
buff = ""
for k in sorted(params.keys()):
buff += str(k)+ str(params[k])
buff += self.secret_key
return hashlib.md5(buff).hexdigest()
def check(self, params):
"""请求易盾接口
Args:
params (object) 请求参数
Returns:
请求结果,json格式
"""
params["secretId"] = self.secret_id
params["businessId"] = self.business_id
params["version"] = self.VERSION
params["timestamp"] = int(time.time() * 1000)
params["nonce"] = int(random.random()*100000000)
params["signature"] = self.gen_signature(params)
try:
params = urllib.urlencode(params)
request = urllib2.Request(self.API_URL, params)
content = urllib2.urlopen(request, timeout=1).read()
return json.loads(content)
except Exception, ex:
print "调用API接口失败:", str(ex)
if __name__ == "__main__":
"""示例代码入口"""
SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识
SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露
BUSINESS_ID = "your_business_id" # 业务ID,云安全(易盾)根据产品业务特点分配
text_api = TextCheckAPIDemo(SECRET_ID, SECRET_KEY, BUSINESS_ID)
params = {
"dataId": "ebfcad1c-dba1-490c-b4de-e784c2691768",
"content": "易盾测试内容!",
"dataType": "1",
"ip": "123.115.77.137",
"account": "python@163.com",
"deviceType": "4",
"deviceId": "92B1E5AA-4C3D-4565-A8C2-86E297055088",
"callback": "ebfcad1c-dba1-490c-b4de-e784c2691768",
"publishTime": str(int(time.time() * 1000))
}
ret = text_api.check(params)
if ret["code"] == 200:
action = ret["result"]["action"]
taskId = ret["result"]["taskId"]
labelArray=json.dumps(ret["result"]["labels"],ensure_ascii=False)
if action == 0:
print "taskId=%s,文本机器检测结果:通过" % (taskId)
elif action == 1:
print "taskId=%s,文本机器检测结果:嫌疑,需人工复审,分类信息如下:%s" %(taskId,labelArray)
elif action == 2:
print "taskId=%s,文本机器检测结果:不通过,分类信息如下:%s" % (taskId,labelArray)
else:
print "ERROR: ret.code=%s, ret.msg=%s" % (ret["code"], ret["msg"])
<?php
/** 产品密钥ID,产品标识 */
define("SECRETID", "your_secret_id");
/** 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 */
define("SECRETKEY", "your_secret_key");
/** 业务ID,易盾根据产品业务特点分配 */
define("BUSINESSID", "your_business_id");
/** 易盾内容安全服务文本在线检测接口地址 */
define("API_URL", "https://as.dun.163yun.com/v3/text/check");
/** api version */
define("VERSION", "v3.1");
/** API timeout*/
define("API_TIMEOUT", 2);
/** php内部使用的字符串编码 */
define("INTERNAL_STRING_CHARSET", "auto");
/**
* 计算参数签名
* $params 请求参数
* $secretKey secretKey
*/
function gen_signature($secretKey, $params){
ksort($params);
$buff="";
foreach($params as $key=>$value){
if($value !== null) {
$buff .=$key;
$buff .=$value;
}
}
$buff .= $secretKey;
return md5($buff);
}
/**
* 将输入数据的编码统一转换成utf8
* @params 输入的参数
*/
function toUtf8($params){
$utf8s = array();
foreach ($params as $key => $value) {
$utf8s[$key] = is_string($value) ? mb_convert_encoding($value, "utf8", INTERNAL_STRING_CHARSET) : $value;
}
return $utf8s;
}
/**
* 内容安全请求接口简单封装
* $params 请求参数
*/
function check($params){
$params["secretId"] = SECRETID;
$params["businessId"] = BUSINESSID;
$params["version"] = VERSION;
$params["timestamp"] = sprintf("%d", round(microtime(true)*1000));// time in milliseconds
$params["nonce"] = sprintf("%d", rand()); // random int
$params = toUtf8($params);
$params["signature"] = gen_signature(SECRETKEY, $params);
// var_dump($params);
$options = array(
'http' => array(
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'timeout' => API_TIMEOUT, // read timeout in seconds
'content' => http_build_query($params),
),
);
$context = stream_context_create($options);
$result = file_get_contents(API_URL, false, $context);
if($result === FALSE){
return array("code"=>500, "msg"=>"file_get_contents failed.");
}else{
return json_decode($result, true);
}
}
// 简单测试
function main(){
echo "mb_internal_encoding=".mb_internal_encoding()."\n";
$params = array(
"dataId"=>"ebfcad1c-dba1-490c-b4de-e784c2691768",
"content"=>"易盾测试内容!v3接口!",
"dataType"=>"1",
"ip"=>"123.115.77.137",
"account"=>"php@163.com",
"deviceType"=>"4",
"deviceId"=>"92B1E5AA-4C3D-4565-A8C2-86E297055088",
"callback"=>"ebfcad1c-dba1-490c-b4de-e784c2691768",
"publishTime"=>round(microtime(true)*1000)
);
$ret = check($params);
var_dump($ret);
if ($ret["code"] == 200) {
$action = $ret["result"]["action"];
$taskId = $ret["result"]["taskId"];
$labelArray = $ret["result"]["labels"];
if ($action == 0) {
echo "taskId={$taskId},文本机器检测结果:通过\n";
} else if ($action == 1) {
echo "taskId={$taskId},文本机器检测结果:嫌疑,需人工复审,分类信息如下:".json_encode($labelArray)."\n";
} else if ($action == 2) {
echo "taskId={$taskId},文本机器检测结果:不通过,分类信息如下:".json_encode($labelArray)."\n";
}
}else{
var_dump($ret); // error handler
}
}
main();
?>
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Net.Http;
namespace Com.Netease.Is.Antispam.Demo
{
class TextCheckApiDemo
{
public static void textCheck()
{
/** 产品密钥ID,产品标识 */
String secretId = "your_secret_id";
/** 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 */
String secretKey = "your_secret_key";
/** 业务ID,易盾根据产品业务特点分配 */
String businessId = "your_business_id";
/** 易盾内容安全服务文本在线检测接口地址 */
String apiUrl = "https://as.dun.163yun.com/v3/text/check";
Dictionary<String, String> parameters = new Dictionary<String, String>();
long curr = (long)(DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds;
String time = curr.ToString();
// 1.设置公共参数
parameters.Add("secretId", secretId);
parameters.Add("businessId", businessId);
parameters.Add("version", "v3.1");
parameters.Add("timestamp", time);
parameters.Add("nonce", new Random().Next().ToString());
// 2.设置私有参数
parameters.Add("dataId", "ebfcad1c-dba1-490c-b4de-e784c2691768");
parameters.Add("content", "易盾测试内容!v3接口!");
parameters.Add("dataType", "1");
parameters.Add("ip", "123.115.77.137");
parameters.Add("account", "csharp@163.com");
parameters.Add("deviceType", "4");
parameters.Add("deviceId", "92B1E5AA-4C3D-4565-A8C2-86E297055088");
parameters.Add("callback", "ebfcad1c-dba1-490c-b4de-e784c2691768");
parameters.Add("publishTime", time);
// 3.生成签名信息
String signature = Utils.genSignature(secretKey, parameters);
parameters.Add("signature", signature);
// 4.发送HTTP请求
HttpClient client = Utils.makeHttpClient();
String result = Utils.doPost(client, apiUrl, parameters, 1000);
Console.WriteLine(result);
if(result != null)
{
JObject ret = JObject.Parse(result);
int code = ret.GetValue("code").ToObject<Int32>();
String msg = ret.GetValue("msg").ToObject<String>();
if (code == 200)
{
JObject resultObject = (JObject)ret["result"];
String taskId = resultObject["taskId"].ToObject<String>();
int action = resultObject["action"].ToObject<Int32>();
JArray labelArray = (JArray)resultObject.SelectToken("labels");
if (action == 0)
{
Console.WriteLine(String.Format("taskId={0},文本机器检测结果:通过", taskId));
}
else if (action == 1)
{
Console.WriteLine(String.Format("taskId={0},文本机器检测结果:嫌疑,需人工复审,分类信息如下:{1}", taskId, labelArray));
}
else if (action == 2)
{
Console.WriteLine(String.Format("taskId={0},文本机器检测结果:不通过,分类信息如下:{1}", taskId, labelArray));
}
}
else
{
Console.WriteLine(String.Format("ERROR: code={0}, msg={1}", code, msg));
}
}
else
{
Console.WriteLine("Request failed!");
}
}
}
}
var utils=require("./utils");
//产品密钥ID,产品标识
var secretId="your_secret_id";
// 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露
var secretKey="your_secret_key";
// 业务ID,易盾根据产品业务特点分配
var businessId="your_business_id";
// 易盾内容安全服务文本在线检测接口地址
var apiurl="https://as.dun.163yun.com/v3/text/check";
//请求参数
var post_data = {
// 1.设置公有有参数
secretId:secretId,
businessId:businessId,
version:"v3.1",
timestamp:new Date().getTime(),
nonce:utils.noncer(),
// 2.设置私有参数
dataId:"ebfcad1c-dba1-490c-b4de-e784c2691768",
content:"易盾测试内容!v3接口!",
ip:"123.115.77.137",
dataType:"1",
account:"nodejs@163.com",
deviceType:"4",
deviceId:"92B1E5AA-4C3D-4565-A8C2-86E297055088",
callback:"ebfcad1c-dba1-490c-b4de-e784c2691768",
publishTime:new Date().getTime()
};
var signature=utils.genSignature(secretKey,post_data);
post_data.signature=signature;
//http请求结果
var responseCallback=function(responseData){
var data = JSON.parse(responseData);
var code=data.code;
var msg=data.msg;
if(code==200){
var result=data.result;
var taskId=result.taskId;
var action=result.action;
var labelArray=result.labels;
if(action==0){
console.log("taskId="+taskId+",文本机器检测结果:通过")
}else if(action==1){
console.log("taskId="+taskId+",文本机器检测结果:嫌疑,需人工复审,分类信息如下:"+JSON.stringify(labelArray))
}else if(action==2){
console.log("taskId="+taskId+",文本机器检测结果:不通过,分类信息如下:"+JSON.stringify(labelArray))
}
}else{
console.log('ERROR:code=' + code+',msg='+msg);
}
}
utils.sendHttpRequest(apiurl,"POST",post_data,responseCallback);
响应示例
结果为不通过时,输出示例如下:
{
"code": 200,
"msg": "ok",
"result": {
"taskId": "fx6sxdcd89fvbvg4967b4787d78a",
"action": 1,
"censorType": 0,
"lang": ["en","vi"],
"isRelatedHit":false,
"labels": [
{
"label": 100,
"level": 1,
"details": {
"hint": [
"xxx,ooo"
],
"hitInfos": []
},
"subLabels": [
{
"subLabel": "100002"
}
]
}
]
}
}
结果为通过时,输出示例如下:
{
"code": 200,
"msg": "ok",
"result": {
"taskId": "079560a6c9f34783bdce47e168510038",
"action": 0,
"labels": [
]
}
}
文本批量检测
接口地址
http://as.dun.163.com/v3/text/batch-check
接口描述
建议您使用POST请求, 且仅接受 application/x-www-form-urlencoded 编码格式。
批量文本检测接口当前设计为检测前会统一对所有的文本参数做合法性校验,校验失败则此次提交失败,参数校验通过后,批量文本检测,最终每个文本会有对应的检测结果(该结果是业务性的错误,如文本检测超时、服务异常等),调用方可以根据dataId获取到每个文本的检测结果,所以批量接口中各个内容的dataId不能重复,否则调用方无确定对应文本的检测结果,目前接口侧没有做校验,需要调用方自己保证,为了保证通用性,接口数据返回顺序和提交顺序保持一致。
文本限制
单次批量提交 1-100条,每条 < 5000字符
请求参数
公共参数已省略,详细见 请求公共参数,其他参数如下:
基本参数
参数名称 | 数据类型 | 是否必填 | 取值范围 | 描述 |
---|---|---|---|---|
version | String | Y | v3.1 | 接口版本号,可选值 v3.1 |
texts | String(json数组) | Y | 1-100条文本数据 | json格式对象数组 |
texts结构如下:
参数名称 | 数据类型 | 是否必填 | 取值范围 | 描述 |
---|---|---|---|---|
dataId | String | Y | 128 | 数据唯一标识,能够根据该值定位到该条数据,如对数据结果有异议,可以发送该值给客户经理查询 |
content | String | Y | 2^24-1 | 用户发表内容,建议对内容中JSON、表情符、HTML标签、UBB标签等做过滤,只传递纯文本,以减少误判概率。请注意为了检测效果和性能,如果该字段长度超过5000字符,会截取前面5000字符进行检测和存储。该字段不能为空,如果为空会返回参数错误。 |
title | String | N | 512 | 内容标题,适用于贴子、博客的文章标题等场景,建议抄送,辅助机审策略精准调优 |
dataType | Integer | N | 4 | 子数据类型,与易盾内容安全服务约定即可 |
callback | String | N | 2^16-1 | 数据回调参数,调用方根据业务情况自行设计,当调用文本离线结果获取接口时,该接口会原样返回该字段,详细见文本离线检测结果获取。作为数据处理标识,因此该字段应该设计为能唯一定位到该次请求的数据结构,如对用户的昵称进行检测,dataId可设为用户标识(用户ID),用户修改多次,每次请求数据的dataId可能一致,但是callback参数可以设计成定位该次请求的数据结构,比如callback字段设计成json,包含dataId和请求的时间戳等信息,当然如果不想做区分,也可以直接把callback设置成dataId的值 |
publishTime | Long | N | 13 | 用户发表时间,UNIX 时间戳(毫秒值) |
callbackUrl | String | N | 256 | 人工审核结果回调通知到客户的URL。主动回调数据接口超时时间设置为2s,为了保证顺利接收数据,需保证接收接口性能稳定并且保证幂等性 |
checkLabels | String | N | 512 | String数组,可指定多个垃圾类别进行机器检测,多个垃圾类别以逗号分隔("100,200") |
业务扩展参数
参数名称 | 数据类型 | 是否必填 | 取值范围 | 描述 |
---|---|---|---|---|
用户信息 | - | N | - | 用户信息包含账号、昵称、等级、角色等,请查看 业务扩展参数—用户信息 |
设备信息 | - | N | - | 设备信息包含设备ID、设备ID类型等,请查看 业务扩展参数—设备信息 |
场景信息 | - | N | - | 场景信息包含私聊、群聊、直播、帖子等场景字段,请查看 业务扩展参数—场景信息 |
| ip | String | N | 32 | 用户IP地址 |
| extStr1 | String | N | 128 | 自定义扩展参数 | | extStr2 | String | N | 128 | 自定义扩展参数 | | extLon1 | Long | N | 2^63-1 | 自定义扩展参数 | | extLon2 | Long | N | 2^63-1 | 自定义扩展参数 |
响应结果
响应字段如下,响应通用字段已省略,详细见响应通用字段:
result 数据结构:
参数名称 | 数据类型 | 是否必填 | 描述 |
---|---|---|---|
result | List |
Y | 返回具体的检测结果数据 |
TextBatchCheckResult数据结构如下:
参数名称 | 数据类型 | 描述 |
---|---|---|
dataId | String | 数据唯一标识,能够根据该值定位到该条数据 |
taskId | String | 本次请求数据标识,可以根据该标识查询数据最新结果 |
status | Integer | 文本检测状态码,定义为:0:检测成功,1:检测失败 |
censonrType | Number | 审核模式,0:纯机审,1:机审+部分人审,2:机审+全量人审 |
action | Integer | 检测结果,0:通过,1:嫌疑,2:不通过 |
lang | json数组 | 语种代码数组,详见 语种代码表 |
labels | json数组 | 分类信息 |
labels数据结构如下:
参数名称 | 数据类型 | 描述 |
---|---|---|
label | Integer | 分类信息,100:色情,200:广告,260:广告法,400:违禁,500:涉政,600:谩骂,700:灌水,900:其他 |
level | Integer | 分类级别,1:不确定,2:确定 |
details | json对象 | 其他信息 |
subLabels | List |
二级细分类 |
subLabels数据结构如下:
参数名称 | 数据类型 | 描述 |
---|---|---|
subLabel | String | 细分类,详细编码请参考下方对应细分类编码 对照表 |
自定义细分类
易盾支持subLabel自定义细分类过检并返回,如有需求,可联系您的专属安全策略经理添加。
details数据结构如下:
参数名称 | 数据类型 | 描述 |
---|---|---|
hint | json数组 | 线索信息,用于定位文本中有问题的部分,辅助人工审核 |
hitInfos | List |
命中信息(目前只返回命中用户自定义的) |
HitInfo数据结构如下:
参数名称 | 数据类型 | 描述 |
---|---|---|
hitType | Integer | 命中类型 |
请求示例
Request: {
"businessId": "30e92b6c84c274abf01e949729077034",
"nonce": 478525692,
"secretId": "deec28356fe8596d18fa8364a8cfbfd0",
"timestamp": " 1546925205000",
"version": "v3.1",
"signature": "294407a232cc7d417d70e4f785eb7377",
"texts": [{
"dataId": "123",
"content": "文本检测",
"dataType": 1,
"ip": "127.0.0.1",
"account": "baijw",
"deviceType": 1,
"deviceId": "yneeeooooo-xl",
"callback": "124",
"publishTime": 1546925205001
},{
"dataId": "456",
"content": "文本检测2",
"dataType": 2,
"ip": "127.0.0.1",
"account": "baijw",
"deviceType": 1,
"deviceId": "yneeeooooo-xl2",
"callback": "456",
"publishTime": 1546925205001
}]
}
响应示例
Response: {
"code": 200,
"msg": "ok",
"result": [
{
"dataId": "123",
"taskId": "079560a6c9f34783bdce47e168510038",
"status": 0,
"action": 2,
"lang": ["en","vi"],
"labels": [{
"label": 100,
"level": 2,
"details": {
"hint": [
"xxx","ooo"
],
"hitInfos": [{
"hitType": 10
}]
},
"subLabels": [{
"subLabel": "21000"
}]
}]
}, {
"dataId": "456",
"taskId": "079560a6c9f34783bdce47e168510066",
"status": 0,
"action": 1,
"lang": ["en","vi"],
"labels": [{
"label": 200,
"level": 2,
"details": {
"hint": [
"xxx","ooo"
],
"hitInfos": [{
"hitType": 10
}]
},
"subLabels": [{
"subLabel": "21000"
}]
}]
}
]
}