边缘安全加速平台 EO 消息通知

消息通知是 EdgeOne Makers 提供的事件推送功能。当你的项目发生特定事件时,Makers 会通过不同的渠道(站内信、邮箱、短信)或 Webhook 向你发送通知,帮助你及时了解项目的运行状态。

相关产品
边缘安全加速平台 EO 产品页,含版本规格、价格与购买入口。

一、支持的事件类型

Makers 支持以下事件类型的通知:

类别 事件 字段 说明
域名 域名配置 domain.added 添加自定义域名时触发(暂不包括 CNAME 配置,证书配置以及删除事件)。
部署 部署失败 deployment.failed 部署过程中发生错误时触发。
 部署成功 deployment.succeeded 部署完成且成功时触发。
 部署创建 deployment.created 新的部署开始时触发。
项目 项目删除 project.deleted 项目被删除时触发。
 项目更新 project.settings.updated 项目设置被修改时触发。
 项目创建 project.created 新项目被创建时触发。

二、使用通知接收消息

通知功能允许你通过站内信、邮箱或短信接收 Makers 事件。操作步骤参考如下:

1. 登录 边缘安全加速平台 EO 控制台,在左侧菜单栏中,进入服务总览,单击 Makers 卡片。

2. 进入 Makers 的设置,单击通知,打开通知设置开关并选择需要接收的通知事件。

开启后,通知功能包含以下通知渠道:

·站内信 – 在腾讯云控制台内接收通知。

·邮箱 – 接收邮件通知。

·短信 – 接收短信通知。

对于每个事件类型,可单独选择是否接收通知。

注意:消息中心接收人管理跟订阅管理的配置方式可参考文档 消息接收管理。

三、使用 Webhook 自定义推送渠道

Webhook 允许你将 EdgeOne Makers 的事件实时推送到你自己的服务器或第三方服务。当 Makers 发生特定事件时,会向你配置的 Webhook 端点发送 HTTP POST 请求,包含完整的事件数据。操作步骤参考如下:

1. 登录 边缘安全加速平台 EO 控制台,在左侧菜单栏中,进入服务总览,单击 Makers 卡片。

2. 进入 Makers 的设置,单击 Webhooks ,填写 Webhook 相关配置,配置参考如下:

配置项 说明
项目 全部项目:Webhook 对账户下的所有项目生效。指定项目:Webhook 仅对选中的项目生效。
事件 选择要监听的 事件类型,支持多选。
端点 Webhook URL(必填):你的服务器接收事件通知的地址。密钥令牌(可选):用于验证请求来源,留空时由平台自动生成。

四、什么是端点

端点是你服务器上的一个 URL,用于接收来自 Makers 的 Webhook 请求。

五、请求格式

当事件发生时,Makers 会向你的端点发送 HTTP POST 请求。

HTTP 请求头:

POST /webhooks/edgeone-pages HTTP/1.1Host: example.comContent-Type: application/jsonAccept: application/json, text/plain, */*Accept-Encoding: gzip, compress, deflate, brAuthorization: Bearer xxxConnection: keep-alive

请求体示例(JSON 格式):

部署事件示例(deployment.created):

{ "eventType": "deployment.created", "appId": "app-123", "projectId": "project-456", "deploymentId": "deploy-789", "projectName": "my-project", "repoBranch": "main", "timestamp": "2024-01-13T12:34:56.789Z"}

项目事件示例(project.created):

{ "eventType": "project.created", "appId": "app-123", "projectId": "project-456", "projectName": "my-project", "repoUrl": "https://github.com/user/repo", "timestamp": "2024-01-13T12:34:56.789Z"}

域名事件示例(domain.added):

{ "eventType": "domain.added", "appId": "app-123", "projectId": "project-456", "projectName": "my-project", "domainName": "example.com", "domainId": "domain-789", "timestamp": "2024-01-13T12:34:56.789Z"}

字段说明:

字段 类型 说明 出现场景
eventType string 事件类型 所有事件
appId string 账户 ID 所有事件
projectId string 项目 ID 所有事件
timestamp string 事件发生的时间戳(ISO 8601 格式) 所有事件
projectName string 项目名称 所有事件
deploymentId string 部署 ID 部署事件
repoBranch string Git 分支 部署事件
repoUrl string 仓库 URL 项目事件
domainName string 域名 域名事件
domainId string 域名 ID 域名事件

注意:如果你的端点返回非 2xx 状态码或无法访问,Makers 会采取指数退避策略自动重试最多 3 次。

六、如何实现端点

你需要在自己的服务器上实现一个端点来接收 Webhook 请求。以下是一个 Cloud Functions 的示例:

/** * API 路径: /webhooks/demo *//** * 验证 Bearer Token(可选) */function verifyToken(authHeader, expectedToken) { if (!expectedToken) return true; // 未配置则跳过验证 const parts = authHeader?.split(' '); if (parts?.length !== 2 || parts[0] !== 'Bearer') return false; return parts[1] === expectedToken;}/** * 处理 webhook 事件 */function handleEvent(eventType, data) { switch (eventType) { case 'deployment.created': console.log(` 部署创建: ${data.projectName} (${data.repoBranch})`); // 在此添加你的业务逻辑 // 例如: 发送通知、更新数据库等 return { message: '部署事件已处理', projectName: data.projectName }; case 'project.created': console.log(` 项目创建: ${data.projectName}`); return { message: '项目事件已处理', projectName: data.projectName }; // 更多事件可参考支持的事件类型 default: console.log(`⚠️ 未知事件: ${eventType}`); return { message: '未知事件类型', eventType }; }}/** * Cloud Function 入口 */export async function onRequest(context) { const { request, env } = context; // 1. 健康检查 if (request.method === 'GET') { return new Response(JSON.stringify({ status: 'ok', message: 'Webhook endpoint is ready' }), { headers: { 'Content-Type': 'application/json' } }); } // 2. 只接受 POST if (request.method !== 'POST') { return new Response(JSON.stringify({ error: 'Method not allowed' }), { status: 405, headers: { 'Content-Type': 'application/json' } }); } try { // 3. 验证 Bearer Token(可选) const authHeader = request.headers.get('authorization'); const webhookToken = env.WEBHOOK_TOKEN; if (webhookToken && !verifyToken(authHeader, webhookToken)) { return new Response(JSON.stringify({ error: 'Unauthorized' }), { status: 401, headers: { 'Content-Type': 'application/json' } }); } // 4. 解析请求体 const payload = await request.json(); const eventType = payload.eventType || payload.type; // 5. 处理事件 const result = handleEvent(eventType, payload); // 6. 返回成功响应 return new Response(JSON.stringify({ success: true, eventType, result, timestamp: new Date().toISOString() }), { status: 200, headers: { 'Content-Type': 'application/json' } }); } catch (error) { console.error('处理错误:', error); return new Response(JSON.stringify({ error: 'Internal server error', message: error.message }), { status: 500, headers: { 'Content-Type': 'application/json' } }); }}

赞 (0)
上一篇 4天前
下一篇 4天前