关于 wix-cli-backend-event
面向 Wix CLI 应用开发者的后端事件扩展指南,介绍如何通过 JavaScript SDK webhook 在事件触发时运行处理逻辑。内容包括扩展文件、注册、权限、测试与处理器约束。
主要功能
- 01创建事件构建器与处理器
- 02通过 SDK webhook 响应事件
- 03将事件扩展注册到应用
- 04说明权限配置与 API 提权
- 05提供测试及幂等性建议
适用场景
- 01联系人创建时运行自定义逻辑
- 02订单或预订触发后执行处理
- 03文章发布后同步或处理数据
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ wix/ skills --skill wix-cli-backend-event安装后在 Claude Code 中输入/wix-cli-backend-event确认已加载。
附带文件references/COMMON-EVENTS.md
详细介绍
Wix CLI 后端事件扩展
为 Wix CLI 应用创建事件扩展。当特定条件满足时会触发事件:对于应用项目,事件发生在 Wix 用户的网站上;对于无头项目,事件发生在你项目的网站上。你的项目通过基于 JavaScript SDK Webhook 构建的事件扩展进行响应;CLI 会将你的项目订阅到这些 Webhook。
常见用例:在创建联系人、下单、确认预约或发布博客文章时运行逻辑。
快速入门清单
创建事件扩展时,请按顺序执行以下步骤。
- 创建事件文件夹:
src/extensions/backend/events/<event-name>/ - 创建
<event-name>.ts,其中包含 SDK 事件导入语句和处理函数 - 创建
<event-name>.extension.ts,其中包含extensions.event()和唯一 UUID - 更新
src/extensions.ts,导入并使用新扩展
用户(手动): 如有需要,在应用仪表板中配置事件的应用权限;发布一个版本并触发事件进行测试。
参考资料
| 主题 | 参考资料 |
|---|---|
| 常见事件(CRM、电子商务、预约、博客) | COMMON-EVENTS.md |
输出结构
每个事件包含两个文件(文档)。应用中每个事件只能有一个处理函数(包括仪表板处理函数)。
src/extensions/backend/events/<event-name>/
├── <event-name>.extension.ts # Builder: extensions.event({ id, source }) – id is unique GUID
└── <event-name>.ts # Handler: imports SDK event (e.g. onContactCreated), runs on trigger
实现模式
事件构建器(<event-name>.extension.ts)
使用 @wix/astro/builders 中的 extensions.event()。必填字段:id(唯一 GUID)、source(处理函数文件的路径)。
import { extensions } from "@wix/astro/builders";
export const eventContactCreated = extensions.event({
id: "{{GENERATE_UUID}}",
source: "./extensions/backend/events/contact-created/contact-created.ts",
});
重要:生成 UUID
id 必须是唯一且静态的 UUID v4 字符串。为每个扩展生成一个全新的 UUID——不要使用 randomUUID(),也不要复制示例中的 UUID。将 {{GENERATE_UUID}} 替换为新生成的 UUID,例如 "a1b2c3d4-e5f6-7890-abcd-ef1234567890"。
事件处理函数(<event-name>.ts)
从正确的 SDK 模块导入事件,并传入处理函数。事件发生时,Wix 会使用事件负载和元数据调用该处理函数。处理函数签名请参阅 JavaScript SDK 参考。
import { onContactCreated } from "@wix/crm/events";
onContactCreated((event) => {
console.log("Contact created:", event.entity);
// Custom logic: sync to CRM, send welcome email, etc.
});
处理函数可以是 async;请确保捕获并记录错误,以免某个处理函数出错导致其他处理函数无法运行。
扩展注册
需要执行两个步骤。
步骤 1:事件构建器文件
如上方实现模式所示,在事件文件夹中创建 <event-name>.extension.ts(以及用于处理函数的 <event-name>.ts)。
步骤 2:在主 extensions.ts 中注册
重要: 阅读 wix-cli-extension-registration,并将事件扩展添加到 src/extensions.ts(导入并调用 .use(eventContactCreated) 或等效方法)。如果不执行此操作,事件扩展将不会生效。
命名:导出名称遵循 event{CamelCaseName} 格式(例如 eventContactCreated、eventOrderPaid)。
提升 API 调用权限
在事件处理函数中调用 Wix API 时,请使用 @wix/essentials 中的 auth.elevate,以便在调用时使用正确的权限。
import { auth } from "@wix/essentials";
import { items } from "@wix/data";
onContactCreated(async (event) => {
const elevatedQuery = auth.elevate(items.query);
const result = await elevatedQuery("MyCollection").find();
// Use result
});
关键限制
- 每个事件只能有一个处理函数——应用中不能有两个针对同一事件的事件扩展(本地或仪表板均不行)。
- 权限——每个事件可能需要特定的权限范围;请在应用仪表板的 Permissions 页面中进行配置。
- 测试——发布包含更改的版本,然后执行触发事件的操作。某些事件无法在本地开发环境中完全测试。
- 后端限制——事件处理函数受后端扩展限制约束(例如,每个请求 1000 CPU ms、20 个子请求)。请参阅关于后端扩展。
最佳实践
- 错误处理: 将处理器逻辑封装在 try/catch 中;记录日志,并可选择重新抛出错误或报告错误。
- 幂等性: 事件可能被多次传递;尽可能将处理器设计为幂等。
- 日志记录: 使用
console.log进行调试;生产环境中的日志应尽量精简且不包含敏感信息。 - 性能: 在后端限制时间内完成;如有需要,将繁重的工作移交给队列或后台任务。
测试事件扩展
- 发布 包含更改的版本。
- 触发 事件:执行相应操作。