消息通知是 EdgeOne Pages 提供的事件推送功能。当您的项目发生特定事件时,Pages 会通过不同的渠道(站内信、邮箱、短信)或 Webhook 向您发送通知,帮助您及时了解项目的运行状态。
支持的事件类型
Pages 支持以下事件类型的通知:
类别 | 事件 | 字段 | 说明 |
域名 | 域名配置 | domain.added | 添加自定义域名时触发(暂不包括 CNAME 配置,证书配置以及删除事件)。 |
部署 | 部署失败 | deployment.failed | 部署过程中发生错误时触发。 |
| 部署成功 | deployment.succeeded | 部署完成且成功时触发。 |
| 部署创建 | deployment.created | 新的部署开始时触发。 |
项目 | 项目删除 | project.deleted | 项目被删除时触发。 |
| 项目更新 | project.settings.updated | 项目设置被修改时触发。 |
| 项目创建 | project.created | 新项目被创建时触发。 |
使用通知接收消息
通知功能允许您通过站内信、邮箱或短信接收 Pages 事件。操作步骤参考如下:
1. 登录 边缘安全加速平台 EO 控制台,在左侧菜单栏中,进入服务总览,单击 Pages 卡片。
2. 进入 Pages 的设置,单击通知,打开通知设置开关并选择需要接收的通知事件。

开启后,通知功能包含以下通知渠道:
站内信 - 在腾讯云控制台内接收通知。
邮箱 - 接收邮件通知。
短信 - 接收短信通知。
对于每个事件类型,可单独选择是否接收通知。
注意:
使用 Webhook 自定义推送渠道
Webhook 允许您将 EdgeOne Pages 的事件实时推送到您自己的服务器或第三方服务。当 Pages 发生特定事件时,会向您配置的 Webhook 端点发送 HTTP POST 请求,包含完整的事件数据。操作步骤参考如下:
1. 登录 边缘安全加速平台 EO 控制台,在左侧菜单栏中,进入服务总览,单击 Pages 卡片。
2. 进入 Pages 的设置,单击 Webhooks ,填写 Webhook 相关配置,配置参考如下:

相关参考
Webhook 端点配置详解
什么是端点
端点是您服务器上的一个 URL,用于接收来自 Pages 的 Webhook 请求。
请求格式
当事件发生时,Pages 会向您的端点发送 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 状态码或无法访问,Pages 会采取指数退避策略自动重试最多 3 次。
如何实现端点
/*** 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. 只接受 POSTif (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' }});}}