如何接收事件通知

最近更新时间:2023-11-30 10:23:32

我的收藏

使用须知

功能介绍

本文以在用户端上传一个视频为例,向开发者展示智能创作 事件通知机制 的使用方法。

架构和流程

开发者搭建一个 HTTP 服务,接收来自智能创作的事件通知请求。本文档以该服务通过对 Storage.NewFileCreated 的处理,实现获取用户在用户端上传视频的媒体 ID 及云点播 FileId 等其它信息为例,来介绍事件通知服务的实现方法。
系统主要由三个部分组成:用户端、事件接收服务、智能创作,其中事件接收服务是本文档需要实现及部署的服务。其架构如下图所示:



具体业务流程为
1. 用户端上传一个视频到智能创作。
2. 智能创作后台发起 Storage.NewFileCreated 事件通知请求给事件接收服务。
3. 事件接收服务解析事件通知内容,将新文件的媒体 ID 及云点播 FileId 打印到日志中。

接口约定

本教程中约定,事件接收服务暴露的接口形式如下:
事件接收服务的 URL 地址为 https://api.example.com/callback
智能创作以 HTTP POST 方式发起事件通知,通过 BODY 传递事件通知内容。

准备工作

案例中所用到的素材

视频


创建智能创作平台

请参见 创建标准型平台 创建一个智能创作平台。
注意
若已创建智能创作平台,请忽略此步骤。

快速部署事件通知接收服务

步骤1:部署后端服务框架

本教程基于 Node.js 以及 koa 框架进行开发(您也可以替换成您熟悉的编程语言与框架)。也可以使用腾讯云轻量应用服务器(Lighthouse)或无服务器云函数(SCF)快速部署,请参见:
事件通知服务的主框架代码如下:
const Koa = require('koa')
const Router = require('koa-router')
const bodyparser = require('koa-bodyparser');

const app = new Koa()
const router = new Router()

// 示例请求路由代码,后续会将其用正式路由替换
router.post('/hello', (ctx, next) => {
ctx.body = 'world'
})

app.use(bodyparser());
app.use(router.routes())
app.listen(80)
部署服务,并访问 http://api.example.com/hello,接口将返回文本 world

步骤2:开发事件接收服务接口(Callback)

主要流程如下:
1. 接收请求,从 BODY 中解析出新文件的媒体 ID 及云点播 FileId。
2. 在日志中输出媒体 ID 及云点播 FileId。
3. 组装应答。
在 App 的路由部分增加如下代码,来支持 Callback 路径的路由:
const fileCreatedEventType = "Storage.NewFileCreated"

router.post('/Callback', async cxt => {
//获取post传递的数据
const body = cxt.request.body
const eventtype = body.EventType
if (eventtype === null) {
console.log("invalid EventType")
ctx.body = {
Code: "Failed",
}
return
}

switch (eventtype) {
case fileCreatedEventType:
const event = body.StorageNewFileCreatedEvent
console.log("MaterialId: " + event.MaterialId)
console.log("FileId: " + event.FileId)
default:
console.log("EventType: " + eventtype)
}

ctx.body = {
Code: "Success",
}
});
注意
智能创作只判断 HTTP 返回码,如果是 200 即认为成功,否则会重试回调三次。

步骤3:配置事件通知地址

配置事件通知地址请参阅 开通事件回调 提工单,由智能创作工作人员配置。

步骤4:测试事件接收服务

按照 网盘-上传综述 指引的方式上传视频。等待视频上传成功后,登录到事件通知服务,应该可以看到日志中打印出媒体 Id 及云点播 FileId。
注意
目前事件通知是以智能创作 平台 为单位配置,上传视频所使用的用户端平台必须与事件通知配置的平台一致,否则无法接收到事件通知。