Le WordPress d'aujourd'hui, décodé pour les développeurs

IA & MCP

Un webhook relaie la réponse d’un modèle de langage vers un commentaire en attente

Retour d'expérience sur l'automatisation d'une première modération de commentaires par un modèle de langage, en amont de la relecture humaine.

Par WordPress Développement • 6 mai 2023 • 4 min de lecture • Aucun commentaire
Un webhook relaie la réponse d'un modèle de langage vers un commentaire en attente

Trente-deux commentaires en attente de modération un lundi matin, dont la moitié relève d’une évidence : promotion déguisée, propos hors sujet, spam manifeste. Le temps passé à trier ce lot avant d’arriver aux commentaires qui méritent réellement une lecture attentive a motivé la mise en place d’une première passe automatisée, confiée à un modèle de langage via un webhook.

Le principe retenu volontairement simple : le modèle ne décide jamais seul de la publication d’un commentaire, il propose un score qui aide le modérateur à prioriser son temps de lecture.

Pourquoi un webhook plutôt qu’un appel synchrone

Un premier essai, avec un appel synchrone déclenché directement au moment de la soumission du commentaire via comment_post, ralentissait la confirmation affichée au visiteur : le temps de réponse du modèle de langage, parfois de plusieurs secondes, s’ajoutait au temps de traitement normal du formulaire.

L’architecture retenue sépare les deux étapes. Le commentaire est enregistré normalement, avec le statut 0 (en attente) s’il ne correspond pas déjà aux critères d’approbation automatique de WordPress. Un service externe reçoit ensuite le contenu via un webhook sortant, interroge le modèle de langage, puis renvoie sa réponse par un second webhook entrant, traité par une route REST dédiée.

Enregistrer la demande d’analyse

L'essentiel à retenir : Le webhook reçoit la réponse de manière asynchrone ; Un commentaire reste en attente tant que le score n'est pas reçu ; La décision finale demeure toujours humaine
add_action( 'comment_post', function ( $comment_id, $approved ) {
    if ( 1 === $approved ) {
        return;
    }

    $commentaire = get_comment( $comment_id );

    wp_remote_post( 'https://service-moderation.exemple.test/analyser', array(
        'timeout'  => 3,
        'blocking' => false,
        'body'     => wp_json_encode( array(
            'comment_id' => $comment_id,
            'contenu'    => $commentaire->comment_content,
            'callback'   => rest_url( 'moderation-ia/v1/resultat' ),
        ) ),
    ) );
}, 10, 2 );

Le paramètre blocking à false évite d’attendre la réponse du service externe : la requête part, et le traitement WordPress continue immédiatement sans dépendre de sa durée.

Recevoir le résultat par une route REST

Le service externe rappelle WordPress une fois l’analyse terminée, sur une route enregistrée via register_rest_route :

add_action( 'rest_api_init', function () {
    register_rest_route( 'moderation-ia/v1', '/resultat', array(
        'methods'  => 'POST',
        'callback' => 'traiter_resultat_moderation',
        'permission_callback' => 'verifier_signature_webhook',
    ) );
} );

function traiter_resultat_moderation( WP_REST_Request $request ) {
    $comment_id = (int) $request->get_param( 'comment_id' );
    $score      = (float) $request->get_param( 'score_risque' );

    update_comment_meta( $comment_id, '_score_risque_ia', $score );

    if ( $score < 0.2 ) {
        wp_set_comment_status( $comment_id, 'approve' );
    }

    return new WP_REST_Response( array( 'traite' => true ), 200 );
}

Vérifier la provenance du webhook entrant

Une route REST ouverte qui modifie le statut d’un commentaire est une cible évidente pour un abus. La fonction verifier_signature_webhook compare une signature transmise dans l’en-tête de la requête à une valeur calculée à partir d’un secret partagé, avant d’accepter tout traitement.

Ce que révèle le score de risque

Après plusieurs semaines d’utilisation, le score de risque s’est révélé fiable sur les cas évidents mais peu discriminant sur les commentaires ambigus, ceux qui mélangent une critique légitime et un ton agressif. Le seuil d’approbation automatique a volontairement été fixé bas, à 0,2 sur une échelle de 0 à 1, pour ne laisser passer sans relecture que les cas les plus manifestement sans risque.

  • Les commentaires ambigus restent systématiquement en attente humaine
  • Le score s’affiche dans la liste de modération comme une simple indication
  • Aucun commentaire n’est jamais rejeté automatiquement, seulement approuvé ou laissé en attente

Automatiser le rejet d’un commentaire fait courir un risque disproportionné par rapport au temps gagné : mieux vaut n’automatiser que l’approbation des cas les plus sûrs.

En résumé

Le découplage par webhook permet d’introduire une analyse par modèle de langage sans dégrader le temps de réponse perçu par le visiteur. La prudence sur les décisions automatisées, limitées à l’approbation des cas les moins ambigus, s’est révélée le choix le plus solide sur la durée.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Partager :

À propos de l'auteur

WordPress Développement

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi