Receta: Integración de Webhooks
Descripción general
Sección titulada «Descripción general»Utiliza las devoluciones de llamada afterSave y afterDelete para notificar a servicios externos cuando los datos cambien en Rebase.
Notificación de Slack sobre un Nuevo Pedido
Sección titulada «Notificación de Slack sobre un Nuevo Pedido»const ordersCollection: EntityCollection = { slug: "orders", name: "Orders", table: "orders", callbacks: { afterSave: async ({ values, entityId, status }) => { if (status === "new") { await fetch(process.env.SLACK_WEBHOOK_URL!, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ text: `🛒 New order #${entityId}\nCustomer: ${values.customer_name}\nTotal: $${values.total}` }) }); } } }, properties: { /* ... */ }};Sincronización con API Externa
Sección titulada «Sincronización con API Externa»callbacks: { afterSave: async ({ values, entityId }) => { // Sync product to Shopify await fetch("https://your-shop.myshopify.com/admin/api/2024-01/products.json", { method: "PUT", headers: { "Content-Type": "application/json", "X-Shopify-Access-Token": process.env.SHOPIFY_TOKEN! }, body: JSON.stringify({ product: { id: values.shopify_id, title: values.name, body_html: values.description, variants: [{ price: values.price }] } }) }); },
afterDelete: async ({ entityId, entity }) => { // Remove from Shopify if (entity.values.shopify_id) { await fetch( `https://your-shop.myshopify.com/admin/api/2024-01/products/${entity.values.shopify_id}.json`, { method: "DELETE", headers: { "X-Shopify-Access-Token": process.env.SHOPIFY_TOKEN! } } ); } }}Gestión de Errores
Sección titulada «Gestión de Errores»Utiliza afterSaveError para gestionar los fallos de forma elegante:
callbacks: { afterSave: async ({ values, entityId }) => { // This might fail await syncToExternalService(values); }, afterSaveError: async ({ entityId, error }) => { // Log the error, send alert, or retry console.error(`Webhook failed for entity ${entityId}:`, error); await sendErrorAlert(entityId, error); }}Próximos Pasos
Sección titulada «Próximos Pasos»- Devoluciones de llamada de entidad — Referencia completa de devoluciones de llamada
- Receta de CMS para Blog — Ejemplo completo de blog