Webhook是一种基于HTTP/HTTPS协议的回调机制,允许服务端主动推送数据。RTC回调通知服务器使用Webhook将相关事件回调给开发者服务器,以便开发者按需处理自己的业务逻辑。
使用方法
前提条件
您已部署用于接收回调消息的HTTP/HTTPS服务。
您已经注册了阿里云账号并完成账号实名认证。注册地址请参见阿里云官网。注册指引请参见注册阿里云账号。实名认证指引请参见个人实名认证或企业实名认证和个体工商户认证。
您已经开通了RTC服务。开通步骤请参见开通服务。
使用流程
在控制台开通某个AppID的事件回调功能。
登录RTC控制台,在左侧导航栏选择配置管理 > 事件通知 > 选中对应的AppID,进行回调设置页面。按需配置具体的事件。
触发回调事件。
完成AppID应用事件通知配置之后,您可以通过服务端API,发起相关任务,比如开启录制、开启推流等操作来触发相应的回调事件产生。
接收回调事件。
当回调事件产生之后,比如录制文件生成,若回调成功,您可以在您部署的回调接受服务器中查看具体的回调事件通知。
回调机制
您需要自行部署一个HTTP服务来接收回调消息,并在控制台中具体业务中配置回调URL。
当事件产生时,RTC回调通知服务器会向该URL发起HTTP POST请求,事件通知内容将通过HTTP Body送达。
您的HTTP服务对HTTP POST请求进行响应且HTTP状态码为200,即视为回调成功;若响应其他状态码或响应超时,则视为回调失败。
回调成功后,您配置的回调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 | 是 |
| 回调消息具体内容,每种类型的事件不一样,具体见下文回调消息列表 |
您的服务器收到的通知顺序和事件发生的顺序不一定完全一致。
为确保回调消息通知的可靠性,每次事件可能会有不止一次消息通知,您的服务器可能需要做消息幂等处理。
回调消息列表
本文档的JSON示例省略了Body中eventId
和notifyTime
。
回调内容可能会增加字段,或者调整字段顺序,请根据您使用的开发语言采用适当的解析方式。
验证事件
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": {
"code": 20000000 //录制文件总数
},
"taskId": "task-0422",
"timestamp": 1709737037688
}
}
2001 录制成功
{
"eventType": "2001",
"eventData": {
"channelId": "room**",
"recordState": {
"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": {
"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)