# 洞察详情

查询单条洞察记录的评分、诊断条目与通话对话内容，对应控制台洞察详情页的评分环、诊断卡片列表与通话原声文本。

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

## 请求头

<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;">insightId</span> <code style="background:#f0f0f0;">string</code> <span style="background:#dc3545; color:white; padding:2px 6px; border-radius:3px; font-size:12px;">必填</span>

洞察记录 ID，由[洞察列表查询](https://avavox.com/docs/developer/insight/record-query.html)接口的 `list[].insightId` 返回。

## 请求参数

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

附加返回内容，多个用英文逗号分隔。当前可选值仅 `dialogues`（通话对话内容），不传表示不附加。

::: tip 录音不在本接口返回
录音播放地址请通过[通话录音地址](https://avavox.com/docs/developer/insight/record-audio.html)接口单独获取。
:::

## 响应数据

<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;">insightId</span> / <span style="font-family:monospace; color:#3451b2;">sessionId</span> <code style="background:#f0f0f0;">string</code>

洞察记录 ID 与通话记录 ID。

---

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

客户号码，**脱敏返回**，如 `183****6716`。

---

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

机器人 ID 与名称。

---

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

通话开始时间，`yyyy-MM-dd HH:mm:ss`。

---

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

通话时长（秒）。

---

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

洞察结果与状态，枚举见[洞察数据接口总览](https://avavox.com/docs/developer/insight/#枚举定义)。未分析完成时 `insightResult` 为 `null`。

---

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

评分信息，元素结构：

- `totalScore`：综合得分，未分析完成时为 `null`
- `fullScore`：满分值，固定 `100`
- `scoreDesc`：分值说明文案
- `ruleGroupId` / `ruleGroupName`：规则组 ID 与名称

---

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

诊断卡片列表，返回该规则组下的**全部条目**，命中与未命中都返回，用 `hit` 区分。元素结构：

- `itemCode`：条目编码，形如 `ri_9f2c81b0`，请当作不透明字符串使用，勿硬编码
- `itemName`：条目名称
- `level`：严重程度，`VETO` / `SEVERE` / `MINOR`
- `hit`：是否命中（命中即失分）
- `aiReason`：AI 判定依据，未命中时为 `null`
- `rounds`：命中的对话轮次数组，未命中时为空数组

排序规则：**命中项优先**，组内按 `level` 权重倒序，权重相同按条目配置顺序。

条目名称与严重程度取自**分析当时的条目快照**，规则组后续被修改不影响历史记录。

---

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

通话对话内容，`include` 含 `dialogues` 时返回，否则为 `null`。元素结构：

- `totalRound`：总轮次
- `list`：对话列表，按 `seq` 升序，元素含：
  - `seq`：全局序号，从 1 递增
  - `round`：轮次编号（一问一答为一轮）
  - `role`：说话人角色，`ROBOT` / `CUSTOMER`
  - `speakerName`：展示名，客户侧固定为「客户」，机器人侧为机器人名称
  - `content`：文本内容
  - `hitItems`：该句所在轮次命中的失分条目，用于渲染「失分点」标签，元素含 `itemCode`、`itemName`、`level`

::: warning totalRound 不等于 list 长度
一轮最多拆出两条对话（机器人 + 客户）；某一侧内容为空时会被跳过且不占用 `seq`，例如开场白轮次没有客户发言。请勿用 `list.length` 推算轮次。
:::

通话记录缺失或无法解析时，`dialogues` 返回 `null`。

</div>
</details>

## 请求示例

只取评分与诊断：

```shell
curl -X GET --location 'https://dashboard.avavox.com/open/api/v1/insight/records/ins_9f2c81b0' \
--header 'Authorization: Bearer $Key'
```

同时取通话对话内容：

```shell
curl -X GET --location 'https://dashboard.avavox.com/open/api/v1/insight/records/ins_9f2c81b0?include=dialogues' \
--header 'Authorization: Bearer $Key'
```

## 响应示例

```json
{
  "code": 200,
  "success": true,
  "message": "操作成功",
  "data": {
    "insightId": "ins_9f2c81b0",
    "sessionId": "b4f26ded895a4e469c3a7f1e2d8b6a04",
    "customerNumber": "183****6716",
    "robotId": "robot_default",
    "robotName": "默认机器人",
    "callStartTime": "2026-04-28 11:35:13",
    "callDuration": 73,
    "insightResult": "PASS",
    "insightStatus": "ANALYZED",
    "score": {
      "totalScore": 81,
      "fullScore": 100,
      "scoreDesc": "分值基于分析当时启用的规则条目动态计算",
      "ruleGroupId": "rg_1001",
      "ruleGroupName": "外呼合规通用组"
    },
    "diagnosis": [
      {
        "itemCode": "ri_7c3a1f20",
        "itemName": "明确拒绝后持续纠缠",
        "level": "SEVERE",
        "hit": true,
        "aiReason": "客户在第7、8轮连续明确表示不想说，机器人第9轮继续解释并试图挽留，构成明确拒绝后持续纠缠。",
        "rounds": [7, 8]
      },
      {
        "itemCode": "ri_9f2c81b0",
        "itemName": "错误回应AI身份测试",
        "level": "MINOR",
        "hit": true,
        "aiReason": "客户在第4轮对话明确询问是否为机器人，机器人未正面回应身份质疑，而是强行推进业务回访。",
        "rounds": [4]
      },
      {
        "itemCode": "ri_1a4d92c8",
        "itemName": "向无关方泄露敏感信息",
        "level": "VETO",
        "hit": false,
        "aiReason": null,
        "rounds": []
      },
      {
        "itemCode": "ri_5b8e30f1",
        "itemName": "未核实对象即继续敏感沟通",
        "level": "SEVERE",
        "hit": false,
        "aiReason": null,
        "rounds": []
      },
      {
        "itemCode": "ri_2f6c74a9",
        "itemName": "展开无关话题沟通",
        "level": "MINOR",
        "hit": false,
        "aiReason": null,
        "rounds": []
      }
    ],
    "dialogues": null
  }
}
```

传 `include=dialogues` 时，`dialogues` 字段的结构如下：

```json
{
  "totalRound": 12,
  "list": [
    {
      "seq": 1,
      "round": 1,
      "role": "ROBOT",
      "speakerName": "默认机器人",
      "content": "您好！我是中国移动的小张，想了解一下您对我们宽带和手机网络的满意情况，可以吗？",
      "hitItems": []
    },
    {
      "seq": 2,
      "round": 2,
      "role": "CUSTOMER",
      "speakerName": "客户",
      "content": "可以呀你好你好",
      "hitItems": []
    },
    {
      "seq": 7,
      "round": 4,
      "role": "ROBOT",
      "speakerName": "默认机器人",
      "content": "我是中国移动回访专员小张哈，咱们继续回访哈，您对近期使用宽带网络和手机网络的情况是否满意？",
      "hitItems": [
        {
          "itemCode": "ri_9f2c81b0",
          "itemName": "错误回应AI身份测试",
          "level": "MINOR"
        }
      ]
    }
  ]
}
```
