# 10 工单接口
注意: 工单接口对应 CJ 客户端「My CJ > 工单」的全部功能。典型流程是:先用「工单类型」拿到问题类型与必填项 → 「提交工单」建单 → 用「工单列表」「工单详情」「留言记录」跟进 → 「回复工单」补充信息 → 「标记完成」结单。带附件时必须先调「上传附件」把文件转存到 CJ,再把返回的地址填进提单/回复。
状态说明(重要): 本组接口的
status只使用下面这套语义化取值,入参和出参是同一套,不要传数字:
取值 含义 能否用于列表筛选 AWAITING_CJ_REPLY等待 CJ 处理 是 AWAITING_YOUR_REPLY等待你回复/确认 是 COMPLETED已完成 是 EXPIRED已失效 是 REVIEWED已评价 是 ON_HOLD已挂起 否(仅出现在返回值中) COLLABORATING协作处理中 否(仅出现在返回值中) 传
ON_HOLD/COLLABORATING/ 数字 / 其它值筛选会返回参数错误,不会被当作"不筛选"处理。
调用频率(重要):本组接口的限流为 1 次/秒。连续调用会返回
1600200 Too Many Requests, QPS limit is 1 time/1second。请串行调用并在两次请求之间留出间隔, 不要按并发设计——批量拉取请用分页(pageSize最大 100),而不是并发打多个请求。
# 1 工单列表(POST)
# URL
https://developers.cjdropshipping.com/api2.0/v1/ticket/list
# CURL
curl --location --request POST 'https://developers.cjdropshipping.com/api2.0/v1/ticket/list' \
--header 'CJ-Access-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
--header 'Content-Type: application/json' \
--data '{"pageNum":1,"pageSize":20,"status":"AWAITING_YOUR_REPLY"}'
| 参数名称 | 参数意义 | 参数类型 | 是否必传 | 长度 | 备注 |
|---|---|---|---|---|---|
| pageNum | 页码 | integer | 否 | 从 1 开始,默认 1 | |
| pageSize | 每页条数 | integer | 否 | 默认 20,最大 100,超出返回参数错误 | |
| searchType | 搜索维度 | string | 否 | TICKET_NO / CJ_ORDER_NO / YOUR_ORDER_NO,与 search 配对使用 | |
| search | 搜索值 | string | 否 | 100 | |
| ticketTypeId | 工单类型 id | long | 否 | 取自「工单类型」接口 | |
| status | 工单状态 | string | 否 | 见上方状态说明 | |
| shopIds | 店铺 id 列表 | string[] | 否 | 取自店铺接口 /shop/getShops |
# 返回
success
{
"code": 200,
"result": true,
"message": "Success",
"data": {
"pageNum": 1,
"pageSize": 20,
"total": 1,
"list": [
{
"ticketId": "9001",
"ticketNo": "T202609050001",
"ticketType": "Service Consultation",
"issueType": "Fulfillment Service Consultation",
"status": "AWAITING_YOUR_REPLY",
"createTime": 1788500000000,
"lastUpdateTime": 1788500100000,
"cjOrderNo": ["CJ2026090400001"],
"yourOrderNo": ["#1024"],
"shopName": ["my-shop"],
"canRemind": true,
"hasReminded": false,
"createdByCj": false,
"unread": true
}
]
},
"requestId": "0242ad78-eea2-481d-876a-7cf64398f07f",
"success": true
}
| 返回字段 | 字段意思 | 字段类型 | 备注 |
|---|---|---|---|
| ticketId | 工单 id | string | 其它接口用它定位工单 |
| ticketNo | 工单编号 | string | 展示用 |
| ticketType | 工单类型名 | string | |
| issueType | 问题类型名 | string | |
| status | 工单状态 | string | 见状态说明;极少数历史状态可能为 null |
| createTime | 创建时间 | long | UTC 毫秒时间戳 |
| lastUpdateTime | 最后更新时间 | long | UTC 毫秒时间戳 |
| cjOrderNo | 关联 CJ 订单号 | string[] | 无关联时为空数组 |
| yourOrderNo | 你的订单号 | string[] | 无关联时为空数组 |
| shopName | 关联店铺名 | string[] | 无关联时为空数组 |
| canRemind | 当前是否可催单 | boolean | |
| hasReminded | 是否已催过单 | boolean | 一张工单只能催一次 |
| createdByCj | 是否 CJ 客服代提 | boolean | |
| unread | 是否有未读回复 | boolean |
# 2 工单详情(GET)
# URL
https://developers.cjdropshipping.com/api2.0/v1/ticket/detail?ticketId=9001
| 参数名称 | 参数意义 | 参数类型 | 是否必传 | 备注 |
|---|---|---|---|---|
| ticketId | 工单 id | string | 是 | 取自工单列表 |
# 返回字段(在列表字段基础上补充)
| 返回字段 | 字段意思 | 字段类型 | 备注 |
|---|---|---|---|
| message | 首条问题描述 | string | |
| expectResult | 期望结果 | string | |
| sku | 关联 SKU | string | |
| sourcingId | 关联搜品 id | string | |
| canReply | 当前是否可回复 | boolean | 调用回复接口前请先看它 |
| canComplete | 当前是否可标记完成 | boolean | 后勤类工单恒为 false |
| attachments | 附件列表 | Object[] | fileName / url |
| formList | 提交时填写的表单 | Object[] | fieldName / value |
| evaluation | 客户评价 | Object | 未评价时为 null;level / comment / evaluateTime |
提示: 工单不存在、或不属于当前 API 账号,都返回
1609005 Ticket not found(两种情况不作区分)。
# 3 留言记录(GET)
# URL
https://developers.cjdropshipping.com/api2.0/v1/ticket/messages?ticketId=9001&pageNum=1&pageSize=20
| 参数名称 | 参数意义 | 参数类型 | 是否必传 | 备注 |
|---|---|---|---|---|
| ticketId | 工单 id | string | 是 | |
| pageNum | 页码 | integer | 否 | 默认 1 |
| pageSize | 每页条数 | integer | 否 | 默认 20,最大 100 |
| 返回字段 | 字段意思 | 字段类型 | 备注 |
|---|---|---|---|
| messageId | 留言 id | string | |
| sender | 发送方 | string | CJ 或 CUSTOMER |
| senderName | 发送人显示名 | string | |
| messageTime | 留言时间 | long | UTC 毫秒时间戳 |
| messageHtml | 留言正文 | string | HTML 格式,按 HTML 渲染 |
| messageText | 留言纯文本 | string | 已去标签,供不做 HTML 渲染的场景使用 |
| action | 消息动作 | string | 如 Reply / Resubmit,可能为空 |
| attachments | 附件列表 | Object[] | fileName / url |
# 4 工单类型(GET)
# URL
https://developers.cjdropshipping.com/api2.0/v1/ticket/types
无入参。返回三层结构:工单类型 → 问题类型 → 表单范式。
{
"code": 200,
"data": [
{
"ticketTypeId": "1001",
"ticketTypeName": "Order Issue",
"questionTypes": [
{
"questionTypeId": "2001",
"questionTypeName": "Logistics Issue",
"formFields": [
{"fieldName": "Order Number", "required": true}
]
}
]
}
],
"success": true
}
提交工单前必须先调本接口:
formFields中required=true的项在提交时必填,且formList里只能出现本接口给出的fieldName——传范式之外的字段会返回参数错误(不会被静默丢弃)。
# 5 提交工单(POST)
# URL
https://developers.cjdropshipping.com/api2.0/v1/ticket/create
| 参数名称 | 参数意义 | 参数类型 | 是否必传 | 长度 | 备注 |
|---|---|---|---|---|---|
| ticketTypeId | 工单类型 id | long | 是 | 取自「工单类型」 | |
| questionTypeId | 问题类型 id | long | 是 | 取自「工单类型」第二层 | |
| message | 问题描述 | string | 是 | 1000 | |
| expectResult | 期望结果 | string | 是 | 1000 | |
| formList | 表单填写项 | Object[] | 视范式 | fieldName / value,见「工单类型」 | |
| cjOrderNo | 关联 CJ 订单号 | string | 否 | 100 | |
| yourOrderNo | 你的订单号 | string | 否 | 100 | |
| sku | 关联 SKU | string | 否 | 100 | |
| attachments | 附件 | Object[] | 否 | fileName / url,最多 10 个,url 必须来自「上传附件」接口 | |
| requestNo | 重复提交保护键 | string | 否 | 64 | 见下方说明,注意它不是幂等键 |
# 返回
{
"code": 200,
"data": {"estimatedHandleTime": 1788600000000},
"success": true
}
| 返回字段 | 字段意思 | 字段类型 | 备注 |
|---|---|---|---|
| estimatedHandleTime | CJ 预计处理完成时间 | long | UTC 毫秒时间戳;CJ 未给出时为 null,属正常情况 |
⚠️ 关于
requestNo的保护范围(2026-09-07 生产实测修正):它只能挡住 5 秒内用同一
requestNo的重复提交(返回1609006 Duplicate submit)——这是一把 5 秒过期的并发锁,不是幂等键。超过 5 秒后用同一个
requestNo再提交,会新建一张工单。 实测:两次提交间隔 5.7 秒,建出了两张内容相同的工单。所以网络超时后不能直接重试。正确做法是:先调
POST /ticket/list(按创建时间倒序)确认上一次是否已经建单成功,再决定是否重提。requestNo的价值只在于挡住"用户连点两次"这类几秒内的重复。
本接口不返回 ticketId。需要拿到刚创建的工单时,请随后调用「工单列表」按创建时间倒序取第一条。
# 6 回复工单(POST)
# URL
https://developers.cjdropshipping.com/api2.0/v1/ticket/reply
| 参数名称 | 参数意义 | 参数类型 | 是否必传 | 长度 | 备注 |
|---|---|---|---|---|---|
| ticketId | 工单 id | string | 是 | ||
| message | 回复内容 | string | 是 | 5~1000 | |
| attachments | 附件 | Object[] | 否 | 同提交工单 |
调用前请先看「工单详情」的
canReply:并非所有状态都允许回复,状态不允许时返回1609009。本接口没有幂等保护:重复调用会产生多条留言,超时后请先用「留言记录」确认是否已经回复成功。
# 7 标记完成(POST)
# URL
https://developers.cjdropshipping.com/api2.0/v1/ticket/complete
| 参数名称 | 参数意义 | 参数类型 | 是否必传 |
|---|---|---|---|
| ticketId | 工单 id | string | 是 |
后勤类工单不允许自助结单,会返回
1609009;请先看「工单详情」的canComplete。
# 8 催单(POST)
# URL
https://developers.cjdropshipping.com/api2.0/v1/ticket/remind
| 参数名称 | 参数意义 | 参数类型 | 是否必传 |
|---|---|---|---|
| ticketId | 工单 id | string | 是 |
两条限制:一张工单只能催一次(已催过返回
1609010);距创建时间不足时暂不能催(返回1609011,稍后可再试)。调用前先看「工单列表/详情」的canRemind与hasReminded,可以省掉一次必然失败的调用。
# 9 工单评价(POST)
# URL
https://developers.cjdropshipping.com/api2.0/v1/ticket/evaluate
| 参数名称 | 参数意义 | 参数类型 | 是否必传 | 长度 | 备注 |
|---|---|---|---|---|---|
| ticketId | 工单 id | string | 是 | ||
| level | 评价等级 | string | 是 | GOOD / AVERAGE / POOR | |
| comment | 评价说明 | string | 否 | 1000 |
# 10 待处理工单数(GET)
# URL
https://developers.cjdropshipping.com/api2.0/v1/ticket/pendingCount
无入参。
| 返回字段 | 字段意思 | 字段类型 | 备注 |
|---|---|---|---|
| pendingCount | 待你处理的工单数 | integer | 没有待办时为 0 |
| updateTime | 统计时间 | long | UTC 毫秒时间戳 |
# 11 上传附件(POST)
# URL
https://developers.cjdropshipping.com/api2.0/v1/ticket/attachment/upload
| 参数名称 | 参数意义 | 参数类型 | 是否必传 | 备注 |
|---|---|---|---|---|
| fileName | 目标文件名 | string | 是 | 必须带扩展名,不能含 / \ .. 及尖括号引号 |
| sourceUrl | 源文件地址 | string | 是 | 需可公网下载的 http/https 地址 |
| 返回字段 | 字段意思 | 字段类型 | 备注 |
|---|---|---|---|
| fileName | 文件名 | string | |
| url | CJ 附件地址 | string | 直接填进提交工单/回复的 attachments |
限制: 单个文件 ≤5MB;扩展名需在
jpg / jpeg / png / bmp / gif / txt / rar / zip / doc / docx / xls / xlsx / pdf / ini / conf / eml之内;sourceUrl必须是公网地址(内网、回环地址会被拒绝)。返回的
url形如https://cj-commodity.oss-accelerate.aliyuncs.com/cj-openapi-rest/<日期路径>/<uuid>.png(2026-09-07 生产实测),直接原样填进attachments即可,不要自行拼接或改写。
# 12 订单/搜品问题类型(GET)
# URL
https://developers.cjdropshipping.com/api2.0/v1/ticket/order/questionTypes?type=ORDER_ISSUE
| 参数名称 | 参数意义 | 参数类型 | 是否必传 | 备注 |
|---|---|---|---|---|
| type | 业务类型 | string | 是 | ORDER_ISSUE / PRODUCT_ISSUE |
| 返回字段 | 字段意思 | 字段类型 |
|---|---|---|
| questionTypeId | 问题类型 id | string |
| questionTypeName | 问题类型名 | string |
本接口与「工单类型」不是同一套数据:针对具体订单/搜品提单时,请用本接口返回的 id。
# 13 针对订单/搜品提交工单(POST)
# URL
https://developers.cjdropshipping.com/api2.0/v1/ticket/order/create
| 参数名称 | 参数意义 | 参数类型 | 是否必传 | 长度 | 备注 |
|---|---|---|---|---|---|
| businessNo | 订单号或搜品 id | string | 是 | 100 | type=ORDER_ISSUE 传 CJ 订单号;PRODUCT_ISSUE 传 Sourcing ID |
| type | 业务类型 | string | 是 | ORDER_ISSUE / PRODUCT_ISSUE | |
| questionTypeId | 问题类型 id | long | 是 | 取自「订单/搜品问题类型」 | |
| message | 问题描述 | string | 是 | 1000 | |
| expectResult | 期望结果 | string | 是 | 1000 | |
| yourOrderNo | 你的订单号 | string | 否 | 100 | |
| attachments | 附件 | Object[] | 否 | 同提交工单 |
本接口没有幂等保护,重复调用会建出多张工单。超时后请先用「工单列表」按订单号确认再决定是否重试。
# 错误码
| 错误码 | 说明 | 处理建议 |
|---|---|---|
| 1609000 | 不支持的工单状态 | 检查 status 取值,见开头的状态说明 |
| 1609001 | 该状态不支持筛选 | 改用可筛选的 5 个状态之一 |
| 1609002 | pageSize 超过上限 | 改为 ≤100 |
| 1609003 | 工单查询失败 | 稍后重试 |
| 1609004 | 不支持的搜索类型 | 检查 searchType 取值 |
| 1609005 | 工单不存在 | 工单不存在或不属于当前账号 |
| 1609006 | 重复提交 | 相同 requestNo 已提交过,无需重试 |
| 1609007 | 工单/问题类型不存在 | 重新获取问题类型列表 |
| 1609008 | 提交工单失败 | 稍后重试 |
| 1609009 | 当前状态不允许该操作 | 先看详情的 canReply / canComplete |
| 1609010 | 该工单已催单 | 无需重试 |
| 1609011 | 该工单暂不可催单 | 稍后再试 |
| 1609012 | 缺少必填表单项 / 传了范式外的字段 | 对照「工单类型」的 formFields |
| 1609013 | 不支持的评价等级 | 使用 GOOD / AVERAGE / POOR |
| 1609014 | 操作失败 | 稍后重试 |
| 1609015 | 附件不合法 | 检查文件名、地址来源与数量 |
| 1609016 | 附件转存失败 | 确认源地址可公网访问且 ≤5MB |
| 1600200 | 超过调用频率限制 | 限流 1 次/秒,请串行调用并留出间隔 |