Blog 4 min read

A day in the life of an Optimizely OMVP - Introducing Webhook Management in OptiGraphExtensions v4 for Optimizely CMS 12

The OptiGraphExtensions add-on has just received a significant update that many in the Optimizely community have been waiting for: comprehensive webhook management directly within your CMS administration interface.

G

Graham Carr

Author

The OptiGraphExtensions add-on has just received a significant update that many in the Optimizely community have been waiting for: comprehensive webhook management directly within your CMS administration interface.

For those unfamiliar with the project, OptiGraphExtensions is an open-source add-on for Optimizely CMS 12 that brings advanced Optimizely Graph management capabilities into the familiar CMS environment. It already provided powerful features for managing synonyms and pinned results—and now webhooks join the party.

Why Webhooks Matter

Webhooks are the backbone of modern event-driven architectures. In the context of Optimizely Graph, they allow your applications to receive real-time notifications when content changes occur. Whether you're triggering a static site rebuild, invalidating a cache, updating a search index, or notifying downstream systems, webhooks eliminate the need for constant polling and enable truly reactive content workflows.

Until now, managing these webhooks meant diving into API calls or external tooling. OptiGraphExtensions changes that by bringing webhook management directly into the Optimizely CMS admin panel.

What Can You Do With Webhook Management?

The new webhook feature provides full CRUD operations with a clean, intuitive interface that integrates seamlessly with the existing CMS administration experience.

Subscribe to Specific Events

The topic selection system gives you granular control over which events trigger your webhooks. You can subscribe to individual events such as
doc.created,doc.updated or doc.deleted, or use wildcard patterns like doc.* for all document events or *.*
to receive notifications for everything. This flexibility means you can set up precisely targeted webhooks that only fire when relevant changes occur.

Configure Filters for Precision

Not every content change needs to trigger every webhook. The filter configuration allows you to narrow down when webhooks fire based on specific criteria. For example, you might configure a filter so that your production CDN cache only invalidates when content with a status of "Published" changes, ignoring draft saves and preview updates entirely.

Control HTTP Methods and Status

Each webhook can be configured with the appropriate HTTP method for your endpoint—whether that's POST, GET, PUT, PATCH, or DELETE. You also have full control over webhook status, allowing you to enable or disable webhooks without deleting them. This is particularly useful during maintenance windows or when debugging integration issues.

Real-Time Synchronisation

Like the existing synonym and pinned results features, webhook management benefits from real-time synchronisation with the Optimizely Graph API. Changes you make in the admin interface are immediately reflected in Graph, and the interface provides clear feedback on sync status.

Getting Started

If you're already using OptiGraphExtensions, you'll find the new Webhooks option in the Opti Graph Extensions menu within the CMS admin panel after updating to the latest version.

For those new to the add-on, installation is straightforward. Add the new v4.0.0 NuGet package to your Optimizely CMS 12 project:

bash
dotnet add package OptiGraphExtensions

Then configure the services in your
Program.cs or Startup.cs:

csharp

// Add services
services.AddOptiGraphExtensions(options =>
{
    options.ConnectionStringName = "EPiServerDB";
});

// Configure the application
app.UseOptiGraphExtensions();

Since OptiGraphExtensions uses Blazor for its interactive admin interface, ensure Blazor server-side is configured:

csharp

services.AddServerSideBlazor();

app.UseEndpoints(endpoints =>
{
    endpoints.MapContent();
    endpoints.MapBlazorHub();
    endpoints.MapControllers();
});

Finally, add your Optimizely Graph configuration to appsettings.json:

json

{
  "Optimizely": {
    "ContentGraph": {
      "GatewayAddress": "<your graph instance gateway address>",
      "AppKey": "<your graph instance key>",
      "Secret": "<your graph instance secret>"
    }
  }
}

A Note on Implementation

One technical detail worth mentioning: due to a limitation in the Optimizely Graph PUT endpoint (which doesn't reliably update topics and filters), OptiGraphExtensions implements webhook updates by deleting and recreating webhooks. This means webhook IDs will change after editing—something to be aware of if you're tracking webhook IDs externally.

The Bigger Picture

With webhook management joining synonyms and pinned results, OptiGraphExtensions now provides a comprehensive suite of Optimizely Graph administration tools. Content editors and administrators can fine-tune search experiences and configure event-driven integrations without leaving the CMS environment they know.

The add-on continues to follow clean architecture principles with intelligent caching, connection pooling via
IHttpClientFactory, and robust error handling that gracefully falls back to local data when Graph is temporarily unavailable.

Get Involved

OptiGraphExtensions is open source and welcomes contributions from the community. Whether it's bug reports, feature requests, or pull requests, your input helps make this tool better for everyone in the Optimizely ecosystem.

Check out the project on GitHub: https://github.com/adayinthelifeofapro/OptiGraphExtensions

The add-on is available on NuGet and supports both .NET 6.0 and .NET 8.0 with Optimizely CMS 12+.

OptiGraphExtensions is an independent open-source project designed to enhance the Optimizely CMS platform.

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please reload the page.