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

IA & MCP

Function calling : un LLM génère un lien de paiement Stripe à la demande

Étapes pour qu'un assistant conversationnel appelle l'API Stripe afin de générer un lien de paiement à la demande, avec des garde-fous stricts sur le montant autorisé.

Par Clément Hadrot • 10 août 2024 • 4 min de lecture • Aucun commentaire
Function calling : un LLM génère un lien de paiement Stripe à la demande

« Peux-tu me faire un lien de paiement pour la formation à 340 euros ? » Cette demande, formulée dans l’interface de chat interne utilisée par l’équipe commerciale, devait autrefois passer par un aller-retour avec le service facturation. Le function calling permet désormais à l’assistant conversationnel de générer ce lien directement, à condition de poser des garde-fous stricts sur le montant autorisé. L’authentification de l’assistant lui-même, gérée par ailleurs via un jeton dédié, n’est pas traitée ici.

Ce tutoriel décrit la mise en place de cette fonction, du schéma décrivant l’appel possible au modèle jusqu’à la vérification du montant avant exécution réelle.

Étape 1 : décrire la fonction au modèle

La fonction exposée au modèle reste volontairement restreinte : elle ne permet de créer qu’un lien de paiement simple, pour un montant et une description donnés, sans jamais permettre d’autre opération sur le compte Stripe (remboursement, modification d’abonnement, etc.).

$fonction_creer_lien_paiement = array(
    'name' => 'creer_lien_paiement',
    'description' => 'Cree un lien de paiement Stripe pour un montant et une description donnes',
    'parameters' => array(
        'type' => 'object',
        'properties' => array(
            'montant_euros' => array( 'type' => 'number' ),
            'description'   => array( 'type' => 'string' ),
        ),
        'required' => array( 'montant_euros', 'description' ),
    ),
);

Étape 2 : intercepter l’intention et vérifier le plafond

L'essentiel à retenir : Le modèle ne manipule jamais l'API Stripe directement ; Un plafond de montant est vérifié avant toute création de lien ; Chaque lien généré est journalisé avec le contexte de la conversation

Lorsque le modèle renvoie une intention d’appel à cette fonction, le code applicatif vérifie systématiquement le montant demandé avant toute création réelle du lien. Au-delà de 500 euros, la création est refusée et remplacée par un message invitant à passer par une validation manuelle du service facturation :

function executer_creation_lien_paiement( $arguments ) {
    if ( $arguments['montant_euros'] > 500 ) {
        return array(
            'statut'  => 'refuse',
            'message' => 'Montant superieur au plafond autorise sans validation humaine.',
        );
    }

    $lien = \Stripe\PaymentLink::create( array(
        'line_items' => array( array(
            'price_data' => array(
                'currency'     => 'eur',
                'product_data' => array( 'name' => $arguments['description'] ),
                'unit_amount'  => $arguments['montant_euros'] * 100,
            ),
            'quantity' => 1,
        ) ),
    ) );

    return array( 'statut' => 'cree', 'url' => $lien->url );
}

Ce plafond de 500 euros n’a rien d’universel : il correspond au montant moyen des transactions courantes de cette équipe commerciale, au-delà duquel une double validation humaine reste jugée nécessaire par la direction financière.

Étape 3 : journaliser chaque création

Chaque lien créé, y compris chaque tentative refusée, est journalisé avec le contexte complet de la conversation ayant mené à la demande : utilisateur à l’origine de la demande, montant, description, et décision finale. Cette journalisation permet un audit a posteriori, indispensable dès qu’un outil génère des liens de paiement de façon semi-autonome.

  • Aucun accès direct du modèle à la clé API Stripe : seul le code applicatif détient cette clé.
  • Un plafond de montant vérifié systématiquement avant toute création réelle.
  • Une journalisation complète de chaque tentative, acceptée ou refusée.

Le function calling ne donne jamais à un modèle un accès direct à une API sensible : il ne fait que transmettre une intention, dont l’exécution reste entièrement sous le contrôle du code applicatif, avec ses propres règles de validation.

Pour aller plus loin

Ce garde-fou sur le montant reste la protection la plus critique de ce dispositif, mais pas la seule envisageable : une limite sur le nombre de liens créés par jour et par utilisateur, ou une expiration automatique des liens non utilisés après 48 heures, complètent utilement ce socle. La documentation de l’API Stripe reste la référence pour ajuster ces paramètres selon le contexte métier réel de chaque équipe.

Partager :

À propos de l'auteur

Clément Hadrot

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

Voir tous ses articles

Dans la même veine

À lire aussi