# 洞察列表查询

按多种条件分页查询通话质检的洞察记录，并可同时返回该筛选条件下的合格 / 不合格统计，对应控制台「洞察明细」页面的筛选、表格与顶部统计。

<span style="display:inline-block;background:#e6f8ea;color:#fca130;border-radius:6px;padding:2px 8px;font-weight:bold;font-family:monospace;margin-right:8px;">POST</span>
`https://dashboard.avavox.com/open/api/v1/insight/records/query`

## 请求头

<span style="font-family:monospace; color:#3451b2; ">Authorization </span> <code style="background:#f0f0f0; ">string</code> <span style="background:#dc3545; color:white; padding:2px 6px; border-radius:3px; font-size:12px;">必填</span>

- 填写格式：`Authorization: Bearer <App Key>`
- `<App Key>` 为控制台「App Key 管理」页面生成的 Key。
- 获取方式详见：[《App Key 创建与管理》](https://avavox.com/docs/developer/app-key.html)。

---

<span style="font-family:monospace; color:#3451b2; ">Content-Type </span> <code style="background:#f0f0f0; ">string</code> <span style="background:#dc3545; color:white; padding:2px 6px; border-radius:3px; font-size:12px;">必填</span>

固定为 `application/json;charset=UTF-8`。

## 请求体参数

全部筛选字段均为可选，不传即不过滤。

<span style="font-family:monospace; color:#3451b2;">keyword</span> <code style="background:#f0f0f0;">string</code> <span style="background:#28a745; color:white; padding:2px 6px; border-radius:3px; font-size:12px;">可选</span>

通话记录 ID 或客户号码，长度 1 ~ 64，两端自动去空格。

**精确匹配**，不支持前缀或子串检索，传入值需与通话记录 ID 或客户号码完整相等。号码按**明文**检索，与响应是否脱敏无关。

---

<span style="font-family:monospace; color:#3451b2;">insightTimeRange</span> <code style="background:#f0f0f0;">object</code> <span style="background:#28a745; color:white; padding:2px 6px; border-radius:3px; font-size:12px;">可选</span>

**洞察分析时间**范围，注意不是通话时间。元素结构：

- `start`：起始时间，格式 `yyyy-MM-dd HH:mm:ss`，含边界
- `end`：结束时间，格式同上，含边界

`start` 与 `end` 必须同时提供；跨度须 ≤ 31 天，超出请求会失败。

::: warning 筛选的是分析时间，不是通话时间
一通 4 月 1 日的电话若在 4 月 2 日才完成分析，会落在 4 月 2 日的窗口内，而响应中的 `callStartTime` 仍是 4 月 1 日。按业务日期对账请以 `callStartTime` 二次归集，详见[对接须知](https://avavox.com/docs/developer/insight/#时间筛选的是洞察分析时间-不是通话时间)。
:::

---

<span style="font-family:monospace; color:#3451b2;">insightResult</span> <code style="background:#f0f0f0;">string</code> <span style="background:#28a745; color:white; padding:2px 6px; border-radius:3px; font-size:12px;">可选</span>

洞察结果，`PASS`（合格）或 `FAIL`（不合格），枚举见[洞察数据接口总览](https://avavox.com/docs/developer/insight/#insightresult-洞察结果)。

---

<span style="font-family:monospace; color:#3451b2;">insightStatus</span> <code style="background:#f0f0f0;">string</code> <span style="background:#28a745; color:white; padding:2px 6px; border-radius:3px; font-size:12px;">可选</span>

洞察状态，`PENDING` / `ANALYZING` / `ANALYZED` / `FAILED`，枚举见[洞察数据接口总览](https://avavox.com/docs/developer/insight/#insightstatus-洞察状态)。

---

<span style="font-family:monospace; color:#3451b2;">robotIds</span> <code style="background:#f0f0f0;">array</code> <span style="background:#28a745; color:white; padding:2px 6px; border-radius:3px; font-size:12px;">可选</span>

机器人 ID 列表，单次最多 20 个，多个之间为「或」的关系。ID 可通过[字典接口](https://avavox.com/docs/developer/insight/dicts.html)获取。

---

<span style="font-family:monospace; color:#3451b2;">ruleGroupIds</span> <code style="background:#f0f0f0;">array</code> <span style="background:#28a745; color:white; padding:2px 6px; border-radius:3px; font-size:12px;">可选</span>

规则组 ID 列表，单次最多 20 个，多个之间为「或」的关系。ID 可通过[字典接口](https://avavox.com/docs/developer/insight/dicts.html)获取。

---

<span style="font-family:monospace; color:#3451b2;">deductItemCodes</span> <code style="background:#f0f0f0;">array</code> <span style="background:#28a745; color:white; padding:2px 6px; border-radius:3px; font-size:12px;">可选</span>

主要失分项的**系统条目编码**列表（形如 `sys_item_0007`），单次最多 30 个，**命中任一即匹配**。取值只能来自[字典接口](https://avavox.com/docs/developer/insight/dicts.html)的 `deductItems[].itemCode`，请勿硬编码，也**不要拿本接口返回的 `mainDeductItems[].itemCode` 反填**。

仅系统内置条目支持筛选，用户在控制台自建的条目没有系统编码，不能作为筛选条件。

---

<span style="font-family:monospace; color:#3451b2;">tagIds</span> <code style="background:#f0f0f0;">array</code> <span style="background:#28a745; color:white; padding:2px 6px; border-radius:3px; font-size:12px;">可选</span>

数据标签 ID 列表，单次最多 20 个，多个之间为「或」的关系。ID 可通过[字典接口](https://avavox.com/docs/developer/insight/dicts.html)获取。

---

<span style="font-family:monospace; color:#3451b2;">durationRange</span> <code style="background:#f0f0f0;">object</code> <span style="background:#28a745; color:white; padding:2px 6px; border-radius:3px; font-size:12px;">可选</span>

通话时长范围（秒）。元素结构：

- `min`：最小时长，整数，≥ 0
- `max`：最大时长，整数，≥ `min`

---

<span style="font-family:monospace; color:#3451b2;">keyFocus</span> <code style="background:#f0f0f0;">boolean</code> <span style="background:#28a745; color:white; padding:2px 6px; border-radius:3px; font-size:12px;">可选</span>

是否重点关注。传 `true` / `false` 分别筛选是 / 否，**不传表示不按该条件过滤**。

---

<span style="font-family:monospace; color:#3451b2;">include</span> <code style="background:#f0f0f0;">array</code> <span style="background:#28a745; color:white; padding:2px 6px; border-radius:3px; font-size:12px;">可选</span>

附加返回内容，默认 `["summary"]`。可选值：

| 值 | 效果 |
| --- | --- |
| `summary` | 返回同筛选条件下的合格 / 不合格计数 |
| `diagnosis` | 每条记录附带完整诊断条目（**重查询**，按需使用） |
| `tags` | 每条记录附带数据标签 |

传空数组 `[]` 表示不附加任何内容，与不传（默认 `["summary"]`）语义不同。

---

<span style="font-family:monospace; color:#3451b2;">pageNo</span> / <span style="font-family:monospace; color:#3451b2;">pageSize</span> <code style="background:#f0f0f0;">int</code> <span style="background:#28a745; color:white; padding:2px 6px; border-radius:3px; font-size:12px;">可选</span>

分页参数。`pageNo` 从 1 开始，默认 `1`；`pageSize` 默认 `10`，最大 `100`。

`pageNo * pageSize` 须 ≤ 10000，超出请求会失败，详见[分页](https://avavox.com/docs/developer/insight/#分页)。

## 响应数据

<span style="font-family:monospace; color:#3451b2;">code</span> <code style="background:#f0f0f0;">int</code>

状态码，200 为成功，其他状态均为失败。

---

<span style="font-family:monospace; color:#3451b2;">success</span> <code style="background:#f0f0f0;">boolean</code>

是否成功，`true` 表示成功，`false` 表示失败。

---

<span style="font-family:monospace; color:#3451b2;">message</span> <code style="background:#f0f0f0;">string</code>

描述信息。

---

<span style="font-family:monospace; color:#3451b2;">data</span> <code style="background:#f0f0f0;">object</code>

<details>
<summary>点击展开字段说明</summary>
<div style="margin: 16px 0; padding: 16px;  border-left: 1px solid #f0f0f0; border-radius: 6px;">

<span style="font-family:monospace; color:#3451b2;">total</span> <code style="background:#f0f0f0;">long</code>

符合条件的洞察记录总条数。

---

<span style="font-family:monospace; color:#3451b2;">pageNo</span> / <span style="font-family:monospace; color:#3451b2;">pageSize</span> <code style="background:#f0f0f0;">int</code>

当前页码与每页条数。

---

<span style="font-family:monospace; color:#3451b2;">summary</span> <code style="background:#f0f0f0;">object</code>

统计信息，`include` 含 `summary` 时返回，否则为 `null`。元素结构：

- `passCount`：合格条数
- `failCount`：不合格条数

统计与列表使用同一份筛选条件。若请求已指定 `insightResult`，则 `total` 即为该侧计数、另一侧为 0。

---

<span style="font-family:monospace; color:#3451b2;">list</span> <code style="background:#f0f0f0;">array</code>

洞察记录列表，固定按洞察分析时间倒序。元素结构：

- `insightId`：洞察记录唯一 ID，[洞察详情](https://avavox.com/docs/developer/insight/record-detail.html)与[录音地址](https://avavox.com/docs/developer/insight/record-audio.html)接口的入参
- `sessionId`：通话记录 ID
- `customerNumber`：客户号码，**脱敏返回**，如 `183****6716`
- `robotId` / `robotName`：机器人 ID 与名称
- `callStartTime`：通话开始时间，`yyyy-MM-dd HH:mm:ss`
- `callDuration`：通话时长（秒）
- `totalScore`：综合得分，未分析完成时为 `null`
- `fullScore`：满分值，固定 `100`
- `insightResult`：洞察结果，未分析完成时为 `null`
- `insightStatus`：洞察状态
- `ruleGroupId` / `ruleGroupName`：规则组 ID 与名称
- `mainDeductItems`：主要失分项，**仅含命中项**，按 `level` 权重倒序；元素含 `itemCode`、`itemName`、`level`
- `keyFocus`：是否重点关注
- `analyzedTime`：分析完成时间，未完成时为 `null`
- `tags`：数据标签，`include` 含 `tags` 时返回，元素含 `tagId`、`tagName`
- `diagnosis`：完整诊断条目，`include` 含 `diagnosis` 时返回，结构见[洞察详情](https://avavox.com/docs/developer/insight/record-detail.html)

::: tip null 与空数组的区别
`tags` 与 `diagnosis` 未通过 `include` 请求时返回 `null`；请求了但确实没有数据时返回 `[]`。
:::

</div>
</details>

## 请求示例

查询 2026 年 4 月分析完成、结果为不合格的记录：

```shell
curl -X POST --location 'https://dashboard.avavox.com/open/api/v1/insight/records/query' \
--header 'Authorization: Bearer $Key' \
--header 'Content-Type: application/json;charset=UTF-8' \
--data '{
  "insightTimeRange": {
    "start": "2026-04-01 00:00:00",
    "end": "2026-04-30 23:59:59"
  },
  "insightResult": "FAIL",
  "insightStatus": "ANALYZED",
  "pageNo": 1,
  "pageSize": 10
}'
```

按号码精确查询，并附带标签：

```shell
curl -X POST --location 'https://dashboard.avavox.com/open/api/v1/insight/records/query' \
--header 'Authorization: Bearer $Key' \
--header 'Content-Type: application/json;charset=UTF-8' \
--data '{
  "keyword": "18395636716",
  "robotIds": ["robot_default"],
  "ruleGroupIds": ["rg_1001"],
  "deductItemCodes": ["sys_item_0007", "sys_item_0015"],
  "durationRange": { "min": 30, "max": 300 },
  "keyFocus": false,
  "include": ["summary", "tags"],
  "pageNo": 1,
  "pageSize": 10
}'
```

## 响应示例

```json
{
  "code": 200,
  "success": true,
  "message": "操作成功",
  "data": {
    "total": 2589,
    "pageNo": 1,
    "pageSize": 10,
    "summary": {
      "passCount": 684,
      "failCount": 189
    },
    "list": [
      {
        "insightId": "ins_9f2c81b0",
        "sessionId": "b4f26ded895a4e469c3a7f1e2d8b6a04",
        "customerNumber": "183****6716",
        "robotId": "robot_default",
        "robotName": "默认机器人",
        "callStartTime": "2026-04-28 11:35:13",
        "callDuration": 73,
        "totalScore": 81,
        "fullScore": 100,
        "insightResult": "PASS",
        "insightStatus": "ANALYZED",
        "ruleGroupId": "rg_1001",
        "ruleGroupName": "外呼合规通用组",
        "mainDeductItems": [
          {
            "itemCode": "ri_7c3a1f20",
            "itemName": "明确拒绝后持续纠缠",
            "level": "SEVERE"
          },
          {
            "itemCode": "ri_9f2c81b0",
            "itemName": "错误回应AI身份测试",
            "level": "MINOR"
          }
        ],
        "keyFocus": false,
        "analyzedTime": "2026-04-28 11:40:02",
        "tags": [
          { "tagId": "t_01", "tagName": "宽带满意度" }
        ],
        "diagnosis": null
      }
    ]
  }
}
```

::: tip 需要遍历大量数据时
不要靠增大 `pageNo` 翻到底，`pageNo * pageSize` 超过 10000 请求会失败。请把 `insightTimeRange` 拆成更短的窗口分段拉取，并以 `insightId` 去重。
:::
