> ## Documentation Index
> Fetch the complete documentation index at: https://docs.flashduty.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 腾讯云直播告警集成

> 通过直播回调把腾讯云直播（CSS）的推流中断同步到 Flashduty On-call，推流恢复或主播正常停播时自动关闭告警。

腾讯云直播（CSS）在推流开始和推流中断时向回调地址发送事件通知。本集成把回调地址指向 Flashduty：每路直播流对应一条 Flashduty 告警，推流异常中断时触发，同一路流重新推流时自动关闭。主播正常停播不会产生告警。

本集成只处理 **推流回调** 和 **断流回调** 两类事件。回调模板中的其他事件（推流异常、录制、截图、审核、拉流转推等）即使发到 Flashduty，也会被接收并忽略，不会产生告警。

<div className="hide">
  ## 在 Flashduty On-call

  ***

  您可通过以下两种方式获取集成推送地址，任选其一即可。

  ### 使用专属集成

  1. 进入 Flashduty 控制台，选择 **协作空间**，打开一个协作空间
  2. 选择 **配置** → **集成数据** → **专属集成**，点击 **新增一个集成**
  3. 选择 **腾讯云直播**，点击 **保存**
  4. 打开生成的集成卡片，复制 **推送地址**

  ### 使用共享集成

  1. 进入 Flashduty 控制台，选择 **集成中心 → 告警事件**
  2. 选择 **腾讯云直播**，填写集成名称
  3. 配置默认路由并选择协作空间；创建后可在 **路由** 中增加更多规则
  4. 点击 **保存**，复制生成的 **推送地址**
</div>

## 在腾讯云直播中配置

***

回调通过「回调模板」配置，模板需要绑定到推流域名后才会生效。

<Steps>
  <Step title="创建回调模板">
    1. 登录 [云直播控制台](https://console.cloud.tencent.com/live)，选择 **功能配置 > 直播回调**
    2. 点击 **创建模板**，填写 **模板名称**
    3. **回调密钥** 可以留空，也可以沿用已有设置。Flashduty 通过推送地址中的 `integration_key` 识别集成，不校验回调中的 `sign` 字段
    4. 在 **回调类型** 中，在 **推流回调** 和 **断流回调** 两项填写 Flashduty 的推送地址。两项都要填写：只填断流回调时，告警不会在推流恢复后自动关闭
    5. 点击 **保存**

    <Note>如果推流域名已经绑定了回调模板（例如用于录制回调），可以直接在该模板的推流回调和断流回调中填写 Flashduty 推送地址。这两项已填写业务系统的地址时，需要由业务系统把回调转发给 Flashduty。</Note>
  </Step>

  <Step title="把模板绑定到推流域名">
    1. 在模板创建成功的提示中点击 **去绑定域名**，或在模板列表中点击 **绑定域名**
    2. 选择上一步的回调模板，勾选需要告警的推流域名
    3. 点击 **确定**

    绑定后约 5 到 10 分钟生效。也可以在 **域名管理** 中打开推流域名的 **管理** 页，在 **模板配置** 中查看或更换该域名绑定的回调模板。
  </Step>

  <Step title="验证生命周期">
    云直播没有「发送测试回调」按钮。用 OBS 等推流工具向该推流域名推一路测试流：

    1. 开始推流：Flashduty 收到推流回调，此时没有告警需要关闭，不会产生告警
    2. 在推流过程中断开推流端的网络：Flashduty 收到断流回调并触发告警
    3. 恢复网络后重新推流：原告警自动关闭
    4. 在推流工具中点击停止推流：这是正常停播，不会产生告警
  </Step>
</Steps>

## Alert Key

***

Flashduty 用账号 APPID `appid`、推流域名 `app`、推流路径 `appname` 和流名称 `stream_id` 计算 Alert Key。同一路流的推流回调和断流回调携带相同的这四个字段，因此落在同一条告警上。

错误码、错误描述、推流节点、推流端 IP、推流时长和 `sequence` 的变化都不会改变 Alert Key。`sequence` 标识一次推流活动，重新推流时会变化，因此不用于计算 Alert Key。

推流回调或断流回调缺少 `appid`、`app`、`appname` 或 `stream_id`，或回调没有 `event_type` 时，Flashduty 会拒绝该请求并返回错误，云直播会按回调重试规则重试。

## 告警生命周期

***

| 云直播回调 | Flashduty 处理 |
| :- | :- |
| 断流回调（`event_type` 为 `0`），`errcode` 不为 `1` | 触发告警；该路流的告警未关闭前再次异常断流，更新已有告警 |
| 断流回调，`errcode` 为 `1`（推流端主动断流） | 关闭该路流未关闭的告警；没有未关闭的告警时不做处理，不会产生告警 |
| 推流回调（`event_type` 为 `1`） | 关闭该路流未关闭的告警；没有未关闭的告警时不做处理 |
| 其他回调类型（推流异常、录制、截图、审核、拉流转推等） | 接收并忽略 |

云直播本身不区分「告警」和「恢复」，只通知推流开始和推流中断。上表是 Flashduty 对这两类通知的约定：异常断流视为故障，同一路流重新推流视为恢复。

<Warning>
  一路流异常断流后如果不再推流（例如当天的直播已经结束），云直播不会再发送回调，告警会一直保持触发，需要在 Flashduty 中手动关闭。
</Warning>

## 告警等级

***

回调中没有等级字段。异常断流触发的告警一律为 **Critical**。`errcode` 表示断流原因，会写入标签和描述，含义请参阅云直播文档中的错误码表。

## 告警内容

***

* **标题**：异常断流时为 `Live stream interrupted: <推流域名>/<推流路径>/<流名称>`
* **描述**：错误描述 `errmsg`，后附错误码、推流节点 IP、推流端 IP 和推流时长（毫秒）
* **标签**：`resource`（`<推流域名>/<推流路径>/<流名称>`）、`appid`、`app`、`appname`、`stream_id`、`event_type`、`errcode`、`errmsg`、`node`、`user_ip`、`sequence`、`push_duration`

回调中的 `stream_param`（推流 URL 参数，可能包含推流鉴权的 `txSecret`）、`sign` 和 `t` 不会写入标签。

## 排查问题

***

* **Flashduty 没有收到回调**：确认回调模板已绑定到实际推流的域名，且绑定后已等待 5 到 10 分钟；确认模板中的推流回调和断流回调填写的是完整推送地址，包含 `integration_key`
* **主播停播后产生了告警**：只有推流端主动停止推流时 `errcode` 才为 `1`。推流端被强制结束（例如进程退出或网络中断）时，断流回调的 `errcode` 通常不为 `1`，Flashduty 按异常断流触发告警。可以在告警标签 `errcode` 和 `errmsg` 中查看云直播给出的断流原因
* **告警没有自动关闭**：确认模板中填写了推流回调；确认重新推流时推流域名、推流路径和流名称都与断流前一致
* **云直播重复发送同一条回调**：Flashduty 没有返回 HTTP 200 时，云直播每隔 1 分钟重试，最多 12 次。检查推送地址是否正确，以及集成是否已被删除

回调字段和错误码的含义请参阅腾讯云文档 [推流/断流事件通知](https://cloud.tencent.com/document/product/267/47025)，回调模板的配置请参阅 [回调配置](https://cloud.tencent.com/document/product/267/20388)。
