跳到主要内容

一键上传并创建任务(整合接口)

POST /api/openapi/uploadAndCreateTask

功能说明​

  • 将「上传文件」和「创建任务」两步合并为一步
  • 简化调用流程,减少网络请求次数
  • 适合需要快速创建任务的场景

请求参数​

参数位置类型必填说明
fileform-dataFile是仅 .txt,≤ 1 GB,≤ 100 万行
taskTypeform-dataString是业务类型,见任务类型列表
descriptionform-dataString是任务描述(通常为原始文件名)
countryCodeform-dataString是国家代码(如:US)
countryAreaCodeform-dataString手机号类必填区域代码(如:1)。邮箱/用户名类任务可不传;skipCountryFilter=true 时可不传
skipDedupform-dataBoolean否是否跳过去重,默认 false。仅白名单任务类型支持,见下方说明
skipCountryFilterform-dataBoolean否是否跳过国家/区号过滤,默认 false。仅白名单任务类型支持,见下方说明
countryAreaCode 说明

手机号类任务必须传入 countryAreaCode,缺失将直接返回错误「手机号类任务必须传入countryAreaCode(国家区号)」,不会创建任务。

邮箱类任务(email 及所有以 Email 结尾的类型)和 TG 用户名筛活跃(usernameActive)无需传入该参数。传了 skipCountryFilter=true 的请求也无需传入该参数。

跳过去重 / 跳过国家过滤(skipDedup / skipCountryFilter)​

默认情况下,系统会对上传文件做两件事:去重(相同号码只保留一条)和国家过滤(只保留以 countryCode 对应区号开头的号码;US / CA / DO 还会按各自的三位区号白名单再过滤一次,例如选 US 时 +1 开头但属于加拿大、波多黎各等地区的号码会被丢弃)。

如果你的业务需要原样提交文件内容,可以通过以下两个可选参数关闭对应处理:

参数取值效果
skipDeduptrue/falsetrue 时不去重,文件中的重复号码全部保留,重复项同样计费
skipCountryFiltertrue/falsetrue 时不按国家区号过滤,也不做 US/CA/DO 区号白名单校验;countryAreaCode 可不传

两个参数相互独立,可以只传其中一个。不传或传 false 时行为与以前完全一致。

使用限制
  • 只有白名单内的任务类型才允许传这两个参数,当前白名单为 tgAdvanced。其它任务类型携带 skipDedup=true 或 skipCountryFilter=true 会直接返回错误「任务类型 xxx 不支持 skipDedup/skipCountryFilter 参数」,不会创建任务。白名单由平台配置,如需为其它任务类型开通请联系客服。
  • countryCode 仍然必传。即使跳过了国家过滤,任务结果仍按 countryCode 归档存储。
  • skipDedup=true 时计费条数为文件中的全部有效行数(含重复),请先确认文件内容再提交。
  • 基础清洗不受影响:空行、首尾空白、号码中的 + 和空格始终会被去掉。
  • 这两个参数只在本接口和批量接口生效,分步接口(上传 + 创建任务)不支持。

错误返回示例:

{
"code": 500,
"msg": "任务类型 wsExist 不支持 skipDedup/skipCountryFilter 参数"
}

返回示例​

{
"code": 200,
"msg": "文件上传并创建任务成功",
"data": "TASK-20250120110901-1001"
}

返回说明:

  • data 字段直接返回任务 ID(字符串格式)
  • 可以立即使用返回的 taskId 查询任务状态

优势​

  • ✅ 一次请求完成两步操作
  • ✅ 减少网络延迟和请求次数
  • ✅ 简化代码逻辑
  • ✅ 自动处理文件上传和任务创建的关联

错误返回示例​

{
"code": 500,
"msg": "文件上传失败:文件解析失败或文件内容为空"
}
使用建议

推荐使用此整合接口,可以简化调用流程。如需分步查看上传结果和预估费用,可使用原有的分步接口。

参数不确定时,可先在在线调试台(https://console.ts-filter.com/)上传小文件试一次,再把调试台给出的 curl 命令搬到自己的代码里。

数据量可能超过单任务上限(100 万行)时,请使用批量接口,系统会自动拆分为多个任务并返回全部任务 ID。

调用示例(Java)​

// 1. 生成签名
String timestamp = String.valueOf(System.currentTimeMillis());
String data = account + ":" + timestamp;
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(new SecretKeySpec(apiKey.getBytes(), "HmacSHA256"));
String signature = Base64.getEncoder().encodeToString(mac.doFinal(data.getBytes()));
String headerKey = timestamp + "." + signature;

// 2. 构建请求
HttpClient client = HttpClient.newHttpClient();
MultipartBodyPublisher publisher = new MultipartBodyPublisher()
.addPart("file", Paths.get("data.txt"))
.addPart("taskType", "wsExist")
.addPart("description", "data.txt")
.addPart("countryCode", "US")
.addPart("countryAreaCode", "1");
// 白名单任务类型(如 tgAdvanced)可按需追加:
// .addPart("skipDedup", "true")
// .addPart("skipCountryFilter", "true")

HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.ts-filter.com/api/openapi/uploadAndCreateTask"))
.header("X-Api-Account", account)
.header("X-Api-Key", headerKey)
.POST(publisher.build())
.build();

// 3. 发送请求并获取任务ID
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
JSONObject json = new JSONObject(response.body());
String taskId = json.getString("data");
System.out.println("任务创建成功,任务ID: " + taskId);

调用示例(Python)​

import requests
import hmac
import hashlib
import base64
import time

# 1. 生成签名
timestamp = str(int(time.time() * 1000))
data = f"{account}:{timestamp}"
signature = base64.b64encode(
hmac.new(api_key.encode(), data.encode(), hashlib.sha256).digest()
).decode()
header_key = f"{timestamp}.{signature}"

# 2. 发送请求
files = {'file': open('data.txt', 'rb')}
data = {
'taskType': 'wsExist',
'description': 'data.txt',
'countryCode': 'US',
'countryAreaCode': '1'
# 白名单任务类型(如 tgAdvanced)可按需追加:
# 'skipDedup': 'true',
# 'skipCountryFilter': 'true',
}
headers = {
'X-Api-Account': account,
'X-Api-Key': header_key
}

response = requests.post(
'https://api.ts-filter.com/api/openapi/uploadAndCreateTask',
files=files,
data=data,
headers=headers
)

# 3. 获取任务ID
result = response.json()
task_id = result['data']
print(f"任务创建成功,任务ID: {task_id}")