class DingTalkRobotWebHookNotifier extends AbstractNotifier<DingTalkWebHookTemplate> {
    @Getter
    private final String notifierId;

    private final String url;

    private final WebClient client;

    public DingTalkRobotWebHookNotifier(String notifierId,
                                        TemplateManager templateManager,
                                        String url,
                                        WebClient client) {
        super(templateManager);
        this.notifierId = notifierId;
        this.url = url;
        this.client = client;
    }

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

    @Nonnull
    @Override
    public Provider getProvider() {
        return DingTalkProvider.dingTalkRobotWebHook;
    }

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

    public static String translateMessage(String message) {
        if (message != null && message.contains("keywords not in content")) {
            return "error.ding_webhook_keywords_not_in_content";
        }
        if (message != null && message.contains("not in whitelist")) {
            return "error.ding_ip_not_in_whitelist";
        }
        if (message != null && message.contains("token is not exist")) {
            return "error.ding_token_error";
        }
        return "error.ding_webhook_arg_error";
    }

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

        return client
            .post()
            .uri(url)
            .contentType(MediaType.APPLICATION_JSON)
            .bodyValue(template.toJson(context.getAllValues()))
            .retrieve()
            .bodyToMono(String.class)
            .doOnNext(str -> {
                JSONObject response = JSON.parseObject(str);
                if (0 != response.getIntValue("errcode")) {
                    throw new IllegalArgumentException(translateMessage(response.getString("errmsg")));
                }
            })
            .then();
    
<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