-
Notifications
You must be signed in to change notification settings - Fork 814
Closed
Description
What type of issue is it?
Discussion
What article/section is this about?
Describe the issue
Would it be an idea to expand the article about webhooks with an example of how the default events can be replaced with your own implementation so that the payload can be adjusted?
See example below:
Custom event:
[WebhookEvent("Content Published", Constants.WebhookEvents.Types.Content)]
public class MyCustomContentPublishedWebhookEvent : WebhookEventContentBase<ContentPublishedNotification, IContent>
{
private readonly IPublishedSnapshotAccessor _publishedSnapshotAccessor;
private readonly IApiContentBuilder _apiContentBuilder;
public MyCustomContentPublishedWebhookEvent(IWebhookFiringService webhookFiringService, IWebhookService webhookService, IOptionsMonitor<WebhookSettings> webhookSettings, IServerRoleAccessor serverRoleAccessor, IPublishedSnapshotAccessor publishedSnapshotAccessor, IApiContentBuilder apiContentBuilder) : base(webhookFiringService, webhookService, webhookSettings, serverRoleAccessor)
{
_publishedSnapshotAccessor = publishedSnapshotAccessor;
_apiContentBuilder = apiContentBuilder;
}
public override string Alias => "Umbraco.ContentPublish";
protected override IEnumerable<IContent> GetEntitiesFromNotification(ContentPublishedNotification notification) => notification.PublishedEntities;
protected override object? ConvertEntityToRequestPayload(IContent entity)
{
if (_publishedSnapshotAccessor.TryGetPublishedSnapshot(out IPublishedSnapshot? publishedSnapshot) is false || publishedSnapshot!.Content is null)
{
return null;
}
IPublishedContent? publishedContent = publishedSnapshot.Content.GetById(entity.Key);
return new
{
MyData = "My data",
PublishedContent = publishedContent is null ? null : _apiContentBuilder.Build(publishedContent)
};
}
}Composer:
public class MyComposer : IComposer
{
public void Compose(IUmbracoBuilder builder)
{
builder.WebhookEvents().Replace<ContentPublishedWebhookEvent, MyCustomContentPublishedWebhookEvent>();
}
}