一、架构和流程
开发者搭建一个 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)快速部署,请参见:
·Lighthouse:搭建 Node.js 开发环境。
·SCF:快速部署 Koa 框架。
事件通知服务的主框架代码如下:
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。
注意:目前事件通知是以智能创作 平台 为单位配置,上传视频所使用的用户端平台必须与事件通知配置的平台一致,否则无法接收到事件通知。