用户问题反馈读取
- Scope:
admin.v1.client-feedback.read - 权限项:用户问题反馈读取(
client-feedback) - 权限类型:读取
- 接口:GET
/api/openapi/v1/client-feedback
认证与请求头
使用应用 API Key 调用。当前接口只校验上方独立 Scope;读取、管理与执行权限互不隐含。
| 名称 | 位置 | 类型 | 必填 | 说明 | 示例 |
|---|---|---|---|---|---|
Authorization | header | string | 是 | 应用 API Key,使用 Bearer 方式传递。 | Bearer qwk_*** |
X-Request-Id | header | string | 否 | 可选的调用追踪标识;未传入时由服务端生成。 | req-20260831-001 |
请求参数
| 名称 | 位置 | 类型 | 必填 | 说明 | 示例 |
|---|---|---|---|---|---|
from | query | string · date-time | 必填 | Inclusive creation/event time, RFC3339 with timezone; keep fixed while paging. | "2026-08-27T10:00:00Z" |
to | query | string · date-time | 必填 | Exclusive creation/event time, after from and at most 180 days later; keep fixed while paging. | "2026-08-27T10:00:00Z" |
cursor | query | string | 否 | Opaque next_cursor from the previous page of the same organization and time interval. | "<string>" |
page_size | query | integer · int64 | 否 | - | 20 |
请求示例
cURL
curl --request GET \
--url 'https://example.invalid/api/openapi/v1/client-feedback?from=<from>&to=<to>&cursor=<cursor>&page_size=20' \
--header 'Authorization: Bearer <API_KEY>'文件链接有效期与转存
截图的 screenshots[].url、screenshots[].download_url 和诊断日志的 diagnostic.url 均为临时签名链接,不保证长期可用。各文件链接的到期时间以对应的 expires_at 为准,不要在对接程序中硬编码有效时长。
拉取数据后,应及时在 expires_at 之前下载需要保留的文件,并转存至对接方自有的对象存储或文件存储;保存反馈 id 与转存文件的关联关系。不能只保存接口返回的链接作为长期文件地址。
下载文件时直接请求返回的完整链接,无需携带 OpenAPI API Key,也不要把 API Key 发送给对象存储。链接包含临时访问签名,应按凭据保护,避免写入公开日志。
若下载前链接已过期,可使用原 from、to 时间区间重新拉取并按 id 去重,获取新链接后立即下载。刷新链接不代表文件永久保留;原文件不存在时不能依赖重新拉取恢复文件。
diagnostic 在没有诊断文件时为 null;有文件时为包含 url、name 和 expires_at 的对象。截图与诊断日志均遵循上述下载和转存要求。
响应
200 OK
| 名称 | 类型 | 必填 | 说明 | 示例 |
|---|---|---|---|---|
has_more | boolean | 是 | - | false |
items | array<OpenapifacadeFeedbackRecord> | 是 | - | [{"can_report":false,"created_at":"2026-08-27T10:00:00Z","description":"<string>","diagnostic":{"url":"<signed-url>","name":"diagnostic.zip","expires_at":"2026-08-27T10:15:00Z"},"diagnostic_available":true,"diagnostic_filename":"<string>","id":"<string>","official_issue_id":"<string>","org_id":"<string>","read_at":"2026-08-27T10:00:00Z","read_by":"<string>","report_status":"<string>","reported_at":"2026-08-27T10:00:00Z","screenshots":[{"download_url":"<string>","expires_at":"2026-08-27T10:00:00Z","name":"<string>","url":"<string>"}],"status":"unread","updated_at":"2026-08-27T10:00:00Z","updated_by":"<string>","updated_by_email":"<string>","updated_by_name":"<string>","user_email":"<string>","user_id":"<string>","user_name":"<string>"}] |
items[].can_report | boolean | 是 | - | false |
items[].created_at | string · date-time | 是 | - | "2026-08-27T10:00:00Z" |
items[].description | string | 是 | - | "<string>" |
items[].diagnostic | object | null | 是 | 诊断日志文件;无文件时为 null,有文件时包含下列字段。 | null |
items[].diagnostic.url | string | 有文件时 | 临时签名下载链接;到期前下载并转存,不保证长期可用。 | "<signed-url>" |
items[].diagnostic.name | string | 有文件时 | 诊断日志文件名。 | "diagnostic.zip" |
items[].diagnostic.expires_at | string · date-time | 有文件时 | 诊断日志链接的到期时间,RFC3339 格式。 | "2026-08-27T10:15:00Z" |
items[].diagnostic_available | boolean | 是 | - | false |
items[].diagnostic_filename | string | 否 | - | "<string>" |
items[].id | string | 是 | - | "<string>" |
items[].official_issue_id | string | null | 是 | - | "<string>" |
items[].org_id | string | 是 | - | "<string>" |
items[].read_at | string | null · date-time | 是 | - | "2026-08-27T10:00:00Z" |
items[].read_by | string | null | 是 | - | "<string>" |
items[].report_status | string | 是 | - | "<string>" |
items[].reported_at | string | null · date-time | 是 | - | "2026-08-27T10:00:00Z" |
items[].screenshots | array<OpenapifacadeFeedbackAttachment> | 是 | - | [{"download_url":"<string>","expires_at":"2026-08-27T10:00:00Z","name":"<string>","url":"<string>"}] |
items[].screenshots[].download_url | string | 否 | 临时签名下载链接;到期前下载并转存。 | "<string>" |
items[].screenshots[].expires_at | string · date-time | 是 | 该截图预览与下载链接的到期时间,RFC3339 格式。 | "2026-08-27T10:00:00Z" |
items[].screenshots[].name | string | 是 | - | "<string>" |
items[].screenshots[].url | string | 是 | 临时签名预览链接,不保证长期可用。 | "<string>" |
items[].status | string | 是 | - | "unread" |
items[].updated_at | string · date-time | 否 | - | "2026-08-27T10:00:00Z" |
items[].updated_by | string | 否 | - | "<string>" |
items[].updated_by_email | string | 否 | - | "<string>" |
items[].updated_by_name | string | 否 | - | "<string>" |
items[].user_email | string | 是 | - | "<string>" |
items[].user_id | string | 是 | - | "<string>" |
items[].user_name | string | 是 | - | "<string>" |
next_cursor | string | 是 | - | "<string>" |
official_reporting_enabled | boolean | 是 | - | false |
响应示例
{
"has_more": false,
"items": [
{
"can_report": false,
"created_at": "2026-08-27T10:00:00Z",
"description": "<string>",
"diagnostic": {
"url": "<signed-url>",
"name": "diagnostic.zip",
"expires_at": "2026-08-27T10:15:00Z"
},
"diagnostic_available": true,
"diagnostic_filename": "<string>",
"id": "<string>",
"official_issue_id": "<string>",
"org_id": "<string>",
"read_at": "2026-08-27T10:00:00Z",
"read_by": "<string>",
"report_status": "<string>",
"reported_at": "2026-08-27T10:00:00Z",
"screenshots": [
{
"download_url": "<string>",
"expires_at": "2026-08-27T10:00:00Z",
"name": "<string>",
"url": "<string>"
}
],
"status": "unread",
"updated_at": "2026-08-27T10:00:00Z",
"updated_by": "<string>",
"updated_by_email": "<string>",
"updated_by_name": "<string>",
"user_email": "<string>",
"user_id": "<string>",
"user_name": "<string>"
}
],
"next_cursor": "<string>",
"official_reporting_enabled": false
}default Flat business error
| 名称 | 类型 | 必填 | 说明 | 示例 |
|---|---|---|---|---|
code | string | 否 | Stable business error code | "<string>" |
detail | string | 是 | Human-readable error description | "<string>" |
details | OpenapiErrorDetails | 否 | - | {"field":"<string>","reason":"<string>","suggestion":"<string>"} |
details.field | string | 否 | Request field that failed validation | "<string>" |
details.reason | string | 否 | Stable validation failure reason | "<string>" |
details.suggestion | string | 否 | Suggested normalized value | "<string>" |
error | string | 是 | Stable HTTP error type | "<string>" |
响应示例
{
"code": "<string>",
"detail": "<string>",
"details": {
"field": "<string>",
"reason": "<string>",
"suggestion": "<string>"
},
"error": "<string>"
}