文档

概述

更新时间:

Webhook是一种基于HTTP/HTTPS协议的回调机制,允许服务端主动推送数据。RTC回调通知服务器使用Webhook将相关事件回调给开发者服务器,以便开发者按需处理自己的业务逻辑。

image

使用方法

前提条件

使用流程

  1. 在控制台开通某个AppID的事件回调功能。

    登录RTC控制台,在左侧导航栏选择配置管理 > 事件通知 > 选中对应的AppID,进行回调设置页面。按需配置具体的事件。

image

  1. 触发回调事件。

    完成AppID应用事件通知配置之后,您可以通过服务端API,发起相关任务,比如开启录制、开启推流等操作来触发相应的回调事件产生。

  2. 接收回调事件。

    当回调事件产生之后,比如录制文件生成,若回调成功,您可以在您部署的回调接受服务器中查看具体的回调事件通知。

回调机制

  1. 您需要自行部署一个HTTP服务来接收回调消息,并在控制台中具体业务中配置回调URL。

  2. 当事件产生时,RTC回调通知服务器会向该URL发起HTTP POST请求,事件通知内容将通过HTTP Body送达。

  3. 您的HTTP服务对HTTP POST请求进行响应且HTTP状态码为200,即视为回调成功;若响应其他状态码或响应超时,则视为回调失败。

  4. 回调成功后,您配置的回调URL中将接收到相应的事件通知内容。

回调格式

回调消息以HTTP POST请求发送到您的服务器,请求Body格式为JSON。字符编码为UTF-8。

回调消息的请求Header 中包含以下字段:

字段

示例值

描述

Content-Type

application/json

固定值

trace-id

2401058********622012463d9

该字段用于排查问题使用

回调消息请求的Body中包含以下字段:

名称

类型

是否必须

示例值

描述

eventId

string

12343aed*********

事件ID

eventType

string

101

事件类型,RTC回调服务器有个eventType,具体类型见下文回调消息列表

notifyTime

long

1701056041128

通知时间戳,单位:毫秒

eventData

JSONObject

{"appId": "z7***u8v"}

回调消息具体内容,每种类型的事件不一样,具体见下文回调消息列表

重要
  • 您的服务器收到的通知顺序和事件发生的顺序不一定完全一致。

  • 为确保回调消息通知的可靠性,每次事件可能会有不止一次消息通知,您的服务器可能需要做消息幂等处理。

回调消息列表

本文档的JSON示例省略了Body中eventIdnotifyTime

重要

回调内容可能会增加字段,或者调整字段顺序,请根据您使用的开发语言采用适当的解析方式。

验证事件

001 回调验证

该场景仅在控制台设置具体回调URL或者手动校验时触发。

{
  "eventType": "001",
  "eventData":{
    "appId": "12adxxxx2"
  }
}

频道事件

101 频道开始

{
  "eventType": "101",
  "eventData":{
    "channelId": "room**" 				// 频道id
    "timestamp": 1709696165584		// 发生时间(ms)
  }
}

102 频道结束

{
  "eventType": "102",
  "eventData":{
    "channelId": "room**" 				// 频道id
    "timestamp": 1709696165584		// 发生时间(ms)
  }
}

103 用户加入

{
  "eventType": "103",
  "eventData":{
    "channelId": "room**" 				// 频道id
    "user":{
      "userId":"123444" 
    }
    "timestamp": 1709696165584		                // 发生时间(ms)
  }
}

104 用户离开

{
  "eventType": "104",
  "eventData":{
    "channelId": "room**" 				// 频道id
    "user":{
      "userId":"123444" 
    }
    "timestamp": 1709696165584		                // 发生时间(ms)
  }
}

推流事件

1000 开始推流

{
    "eventType": "1000",
    "eventData": {
        "channelId": "room**",			// 频道id
        "liveState":{
          "code": 20000000,					//状态码,见最后状态码表格
        },  
        "taskId": "task-03061",			// 任务id
        "timestamp": 1709737037688	// 发生时间(ms)
    }
}

1001 推流正常结束

{
    "eventType": "1001",
    "eventData": {
        "channelId": "room**",			// 频道id
        "liveState":{
          "code": 20000000,					//状态码,见最后状态码表格
        },
        "taskId": "task-03061",			// 任务id
        "timestamp": 1709737037688	// 发生时间(ms)
    }
}

1002 推流异常

{
    "eventType": "1002",
    "eventData": {
        "channelId": "room**",			// 频道id
        "liveState":{
          "code": 50001001,					//状态码,见最后状态码表格
        }  
        "taskId": "task-03061",			// 任务id
        "timestamp": 1709737037688	// 发生时间(ms)
    }
}

录制事件

2000 开始录制

{
    "eventType": "2000",
    "eventData": {
        "channelId": "room**",
        "recordState": {
            "bucket":"rtc*******",              // 录制文件存放bucket
            "vendor":1,                         // 对象存储供应商,见开启录制接口
            "region":1,                         // 对象存储region,见开启录制接口 
            "startTs":1709737037688,            // 录制开始时间戳,单位:毫秒(ms)
            "code": 20000000									//录制文件总数
        },
        "taskId": "task-0422",
        "timestamp": 1709737037688
    }
}

2001 录制成功

{
    "eventType": "2001",
    "eventData": {
        "channelId": "room**",
        "recordState": {
            "bucket":"rtc*******",              // 录制文件存放bucket
            "vendor":1,                         // 对象存储供应商,见开启录制接口
            "region":1,                         // 对象存储region,见开启录制接口 
            "startTs":1709737037688,            // 录制开始时间戳,单位:毫秒(ms)
            "code": 20000000,								//状态码,见最后状态码表格
            "fileFailCount": 0,
            "fileInfo": [
                {
                    "fileDuration": 7859,  	//录制文件时长,单位:毫秒(ms)
                    "fileSize": 216777,    	//录制文件大小,单位:字节(Byte)
                    "filePath": "record/v980**/65e82ef000210**/1709737028486_1709737030532/1709737028486-1709737030532.mp4",
                    "status": 0,           	//0表示成功, 其他表示失败
                    "timestamp": 1709737037679	//录制文件生成的时间戳(ms)
                }
            ],
            "fileCount": 1									//录制文件总数
        },
        "taskId": "task-03061",
        "timestamp": 1709737037688
    }
}

2002 录制失败

{
    "eventType": "2002",
    "eventData": {
        "channelId": "room**",
        "recordState": {
            "bucket":"rtc*******",              // 录制文件存放bucket
            "vendor":1,                         // 对象存储供应商,见开启录制接口
            "region":1,                         // 对象存储region,见开启录制接口 
            "startTs":1709737037688,            // 录制开始时间戳,单位:毫秒(ms)
            "reason": "WritePlaylist failed",
            "code": 50002001,													//状态码,见最后状态码表格
            "fileFailCount": 2,
            "fileInfo": [
                {
                    "reason": "write flv file fail",	//失败原因
                    "status": 50002001,
                    "timestamp": 1709721091674
                },
                {
                    "reason": "WritePlaylist failed",
                    "fileDuration": 30437,
                    "fileSize": 123875456,
                    "filePath": "taskidtaskId-199-cid65e844**e000000001ac0000/playlist.m3u8",
                    "status": 50002001,
                    "timestamp": 1709721103666
                }
            ],
            "fileCount": 2
        },
        "taskId": "taskId-199",
        "timestamp": 1709721103673
    }
}

状态码表格

类型

状态码

说明

公共

20000000

成功

50000000

服务器内部错误

推流

50001001

推流异常

录制

50002001

写入用户存储失败,

可能是网络问题

50002002

启动用户存储失败,

可能是入参AK/SK/Bucket/Region/Vendor输入错误

  • 本页导读 (0)