Skip to content

查询任务术语

检索指定任务在 术语扫描(TB_SCAN) 阶段发现的新术语条目。结果字段与控制台「术语扫描报告」页面一致。

触发条件

术语扫描是 创建翻译任务 链路的第一步:系统从任务的 content 里提取所有候选词,过滤掉项目术语库已存在的,剩余部分送入 TB_SCAN 工作流进行分类评分。

scan_status 的 5 种取值

状态含义
pending任务刚受理,后台还没决定是否要扫描(CSV 还在上传 / 参数还在解析)
runningTB_SCAN 工作流在跑,此时可能已能查到部分结果
completedTB_SCAN 成功结束,返回的是完整结果
skipped后台直接跳到翻译,没有扫描过程。可能原因:所有 content 都已在项目术语库 / 无新内容 / 创建时 scan_terms=false / 准备阶段异常降级
failed任务整体因前置步骤失败(例如 xlsx_url 下载失败、CSV 上传失败)

请求地址

GET {BASE_URL}/api/open/v1/tasks/terms

也支持 POST(参数可放在 body 里,JSON 格式)。

鉴权 Header

创建翻译任务 完全一样:

Header
X-Loxily-AppKey项目 App Key
X-Loxily-TimestampUnix 秒(5 分钟有效)
X-Loxily-SignMD5(timestamp + "" + appSecret) —— GET 无 body,body 以空字符串参与签名

查询参数

参数类型必填默认说明
task_idstring创建任务时返回的 task_id
pagenumber1页码,从 1 起
page_sizenumber100单页大小,上限 500

响应字段

成功(HTTP 200):

json
{
  "success": true,
  "code": 0,
  "msg": "ok",
  "trace_id": "...",
  "data": {
    "task_id": "68a12cb7e1f9a88b4ea23c77",
    "scan_status": "completed",
    "page": 1,
    "page_size": 100,
    "total": 42,
    "items": [
      {
        "id": "6626f0a32e8e5d24b6c9f1a2",
        "term": "战斗力",
        "content": "总战斗力的构成由其它战斗力按权重加和得出",
        "source_language": "zh-cn",
        "category": "Attributes",
        "glossary_score": 4.0,
        "judgment": "Extracted '战斗力' from content. Refers to a game stat, 'Combat Power', which likely requires consistent translation.",
        "translation_source": "ai",
        "translations": {
          "en": "Combat Power",
          "zh-cn": "Combat Power"
        },
        "updated_at": "2026-04-22T10:25:17.455Z"
      }
    ]
  }
}

字段说明

字段类型说明
task_idstring回显
scan_statusstring"pending" / "running" / "completed" / "skipped" / "failed",见上方详细说明
page / page_size / totalnumber分页信息;total 为本次扫描发现的术语总数
items[].idstring该条术语的唯一 ID(对应 /tasks/terms/update / /tasks/terms/delete 的入参 id
items[].termstringAI 从 content 中提取出来的术语本身
items[].contentstring出现该术语的源文上下文
items[].source_languagestring源语言代码
items[].categorystringAI 判定的术语类别(如 Character / Location / Item / Attributes / Skill 等)
items[].glossary_scorenumber术语重要度评分 0–10(越高越应该加入术语库)
items[].judgmentstringAI 给出的推荐理由
items[].translation_sourcestring译文来源:ai / tm / manual
items[].translationsobject各目标语言的译文,key 为语言代码(连字符格式,如 en / zh-cn / ja);空值会被省略
items[].updated_atstringISO 8601 时间

错误码

code说明
400缺少 task_id / 签名 Header 无效
401签名校验失败或时间戳过期
403任务不属于该 App Key
404task_id 不存在
500系统错误

示例

cURL

bash
APP_KEY="5685414646a54423c891d87194d87f3f"
APP_SECRET="<你的 App Secret>"
TASK_ID="68a12cb7e1f9a88b4ea23c77"
BASE_URL="https://api.loxily.com"

TIMESTAMP=$(date +%s)
# GET 无 body,body 以空字符串参与签名
SIGN=$(printf '%s' "${TIMESTAMP}${APP_SECRET}" | md5)

curl -s "${BASE_URL}/api/open/v1/tasks/terms?task_id=${TASK_ID}&page=1&page_size=100" \
  -H "X-Loxily-AppKey: ${APP_KEY}" \
  -H "X-Loxily-Timestamp: ${TIMESTAMP}" \
  -H "X-Loxily-Sign: ${SIGN}"

Node.js

javascript
import crypto from 'crypto';

const timestamp = Math.floor(Date.now() / 1000).toString();
const body = '';  // GET 无 body
const sign = crypto.createHash('md5')
  .update(`${timestamp}${body}${process.env.LOXILY_APP_SECRET}`, 'utf8')
  .digest('hex');

const qs = new URLSearchParams({ task_id: taskId, page: '1', page_size: '100' });
const resp = await fetch(
  `${process.env.LOXILY_BASE_URL}/api/open/v1/tasks/terms?${qs}`,
  {
    headers: {
      'X-Loxily-AppKey': process.env.LOXILY_APP_KEY,
      'X-Loxily-Timestamp': timestamp,
      'X-Loxily-Sign': sign,
    },
  },
);
const { data } = await resp.json();
console.log(`Found ${data.total} terms, status=${data.scan_status}`);
for (const item of data.items) {
  console.log(`${item.term} (${item.category}, score ${item.glossary_score})`);
}

使用时机

推荐的集成流程:

  1. POST /api/open/v1/tasks/create 创建任务
  2. 收到回调 term_scan.completed 后(或者直接轮询也行),调本接口一次就能拿到所有术语
  3. 业务侧自行决定如何处理这些术语(比如落库审核、自动追加到本地术语库、提示给翻译操作人员等)