class HttpWebHookNotifier extends AbstractNotifier<HttpWebHookTemplate> {
    private final String id;

    private final WebClient webClient;

    private final HttpWebHookProperties properties;

    public HttpWebHookNotifier(String id,
                               HttpWebHookProperties properties,
                               WebClient webClient,
                               TemplateManager templateManager) {
        super(templateManager);
        this.id = id;
        this.properties = properties;
        this.webClient = webClient;
    }

    @Override
    public String getNotifierId() {
        return id;
    }

    @Nonnull
    @Override
    public NotifyType getType() {
        return DefaultNotifyType.webhook;
    }

    @Nonnull
    @Override
    public Provider getProvider() {
        return WebHookProvider.http;
    }

    @Nonnull
    @Override
    public Mono<Void> send(@Nonnull HttpWebHookTemplate template,
                           @Nonnull Values context) {<FILL_FUNCTION_BODY>}

    @Nonnull
    @Override
    public Mono<Void> close() {
        return Mono.empty();
    }
}

        HttpMethod method = template.getMethod();
        WebClient.RequestBodyUriSpec bodyUriSpec = webClient
            .method(template.getMethod());

        if (StringUtils.hasText(template.getUrl())) {
            bodyUriSpec.uri(template.getUrl());
        }
        if (method == HttpMethod.POST
            || method == HttpMethod.PUT
            || method == HttpMethod.PATCH) {
            String body = template.resolveBody(context);
            if (null != body) {
                bodyUriSpec.bodyValue(body);
            }
        }

        bodyUriSpec.headers(headers -> {
            if (CollectionUtils.isNotEmpty(properties.getHeaders())) {
                for (HttpWebHookProperties.Header header : properties.getHeaders()) {
                    headers.add(header.getKey(), header.getValue());
                }
            }

            if (CollectionUtils.isNotEmpty(template.getHeaders())) {
                for (HttpWebHookProperties.Header header : template.getHeaders()) {
                    headers.add(header.getKey(), header.getValue());
                }
            }
        });

        return bodyUriSpec
            .retrieve()
            .bodyToMono(Void.class);
    
<methods>public non-sealed void <init>() ,public Mono<java.lang.Void> send(java.lang.String, org.jetlinks.core.Values) <variables>private final non-sealed org.jetlinks.community.notify.template.TemplateManager templateManager