# Connecter des outils personnalisés

Les outils personnalisés permettent à l’Assistant GitBook, à l’intérieur du [Docs Embed](/docs/documentation/fr/docs-site/embedding.md) d’exécuter de vraies actions.

Vous pouvez le connecter à *n’importe quel* outil auquel votre application peut accéder. Cela inclut vos API backend, les SDK tiers et les systèmes internes.

Si votre application peut l’appeler, l’Assistant peut l’appeler.

Exemples courants :

* Créer ou mettre à jour des tickets d’assistance au nom de l’utilisateur
* Transmettre au support en ouvrant un chat d’assistance avec un message prérempli

  <div data-gb-custom-block data-tag="hint" data-style="success" class="hint hint-success"><p><strong>Transfert au support</strong> est un excellent moyen de commencer avec les outils personnalisés. C’est le moyen le plus rapide de débloquer les utilisateurs.</p></div>
* Déclencher des actions produit (réinitialiser le MFA, renvoyer une invitation, activer un indicateur de fonctionnalité)
* Consulter le statut du compte dans votre backend
* Lancer des workflows dans des outils comme Jira, Linear, Slack ou Zendesk

{% hint style="info" %}
En plus des outils que vous définissez dans la configuration de l’Embed, l’Assistant peut également utiliser n’importe quel [serveurs MCP que vous configurez](/docs/documentation/fr/ia-et-recherche/mcp-servers-for-published-docs.md) dans **Paramètres → IA et MCP**.
{% endhint %}

### Où les outils s’exécutent

La `execute` fonction de l’outil s’exécute dans le même environnement que votre intégration embed.

Cela signifie généralement qu’elle s’exécute dans le navigateur de l’utilisateur, à l’intérieur de votre application.

Vous pouvez donc :

* Appeler vos propres points de terminaison backend
* Appeler n’importe quel SDK tiers déjà chargé dans votre application (par exemple, Intercom)
* Ouvrir des modales, des liens profonds ou des interfaces intégrées au produit

{% hint style="warning" %}
Évitez de mettre des secrets dans le code côté client — appelez plutôt votre backend.
{% endhint %}

### Ajouter un outil

Définir des outils :

* Via `window.GitBook("configure", …)` pour l’ [balise de script](/docs/documentation/fr/docs-site/embedding/implementation/script.md) implémentation
* Via la `tools` prop pour le [Node.js/NPM](/docs/documentation/fr/docs-site/embedding/implementation/nodejs.md) package et les [composants](/docs/documentation/fr/docs-site/embedding/implementation/react.md) React

{% hint style="info" %}
Les outils ne sont pas les mêmes que les **actions**.

* Utiliser **actions** pour les boutons sur lesquels l’utilisateur clique.
* Utilisez les outils lorsque vous voulez que l’Assistant choisisse et exécute du code.
  {% endhint %}

#### Modèle d’outil (renvoyer un e-mail d’invitation)

Prenons un exemple :

```javascript
window.GitBook("configure", {
  tools: [
    {
      // Enregistrez l’outil avec un nom et une description.
      name: "resend_invite",
      description:
        "Renvoyer un e-mail d’invitation lorsque l’utilisateur ne le trouve pas ou dit qu’il a expiré.",

      // Le schéma d’entrée est une donnée accessible dans la fonction execute.
      inputSchema: {
        type: "object",
        properties: {
          email: {
            type: "string",
            description:
              "L’adresse e-mail à laquelle renvoyer l’invitation. Si elle est inconnue, demandez d’abord à l’utilisateur.",
          },
        },
        required: ["email"],
      },

      // Un bouton de confirmation facultatif affiché avant l’exécution de la fonction execute.
      confirmation: { icon: "paper-plane", label: "Renvoyer l’invitation ?" },

      // La fonction execute est la fonction qui sera appelée lorsque l’outil est utilisé.
      execute: async (input) => {
        const { email } = input;

        const result = await fetch("/api/invites/resend", {
          method: "POST",
          headers: { "Content-Type": "application/json" },
          body: JSON.stringify({ email }),
        }).then((r) => r.json());

        return {
          // La sortie est renvoyée à l’IA.
          output: {
            recipient: email,
            status: result.status ?? "success",
          },
          // Le résumé est affiché à l’utilisateur.
          summary: {
            icon: "check",
            text: "L’e-mail d’invitation a été renvoyé.",
          },
        };
      },
    },
  ],
});
```

### Comment les outils sont utilisés

Une fois que vous enregistrez des outils, l’Assistant peut les choisir automatiquement — en fonction de la question de l’utilisateur et de votre outil `description`.

Si des champs obligatoires manquent, l’Assistant doit poser des questions de suivi.

Si vous ajoutez `confirmation`, l’utilisateur doit approuver avant que l’outil ne s’exécute.

### Champs de l’outil

* `name`: Identifiant unique.
* `description`: L’indication « quand utiliser ceci » pour l’Assistant.
* `inputSchema`: schéma JSON pour les entrées de l’outil.
* `confirmation` (facultatif) : Un bouton de confirmation affiché avant l’exécution de l’outil.
* `execute(input)`: Fonction asynchrone qui exécute l’action.
  * Retournez `{ output, summary }`.
  * `output` revient à l’Assistant.
  * `summary` est affiché à l’utilisateur.

#### Confirmation

Utiliser `confirmation` quand vous voulez que l’utilisateur approuve une action. Cela aide à éviter des effets secondaires inattendus.

`confirmation` accepte :

* `libellé` (obligatoire) : Texte du bouton.
* `icon` (facultatif) : Un [Font Awesome](https://fontawesome.com/search) nom d’icône.

### Flux de travail d’assistance

L’assistance est le cas d’usage le plus stratégique pour les outils.

Vous pouvez laisser l’Assistant :

* Collecter les détails manquants
* Créer un ticket dans votre système
* Ouvrir un canal d’assistance humaine avec le contexte prérempli

#### Modèle : ouvrir un chat d’assistance avec un message prérempli

Utilisez ceci lorsque vous voulez un transfert fluide vers un humain.

```javascript
window.GitBook("configure", {
  tools: [
    {
      name: "open_support_chat",
      description:
        "Ouvrir le chat d’assistance avec un message prérempli afin que l’utilisateur puisse contacter rapidement le support.",
      inputSchema: {
        type: "object",
        properties: {
          message: {
            type: "string",
            description:
              "Le message à envoyer au support. S’il manque, demandez d’abord à l’utilisateur.",
          },
        },
      },
      confirmation: { icon: "circle-question", label: "Ouvrir le chat d’assistance" },
      execute: (input) => {
        // Fermer l’Assistant GitBook
        window.GitBook('close');
     
        // Exemples :
        // - Intercom : Intercom('showNewMessage', input.message);
        // - Zendesk : zE('messenger', 'open');
        
        return {
          output: {
            status: "success",
          },
          summary: { icon: 'check', text: "Redirigé vers l’assistance." },
        };
      },
    },
  ],
});
```

{% hint style="info" %}
Associez cela à une action **Contacter l’assistance** toujours visible dans la barre latérale de l’embed. Vous pouvez configurer les actions en suivant [Personnalisation de l’embed](/docs/documentation/fr/docs-site/embedding/configuration/customizing-docs-embed.md).
{% endhint %}

### Étapes suivantes

* Vous avez besoin de toute la surface de l’API embed ? Voir [Référence de l’API](/docs/documentation/fr/docs-site/embedding/configuration/reference.md).
* Vous voulez plus de contrôles UI (accueil, suggestions, actions) ? Voir [Personnalisation de l’embed](/docs/documentation/fr/docs-site/embedding/configuration/customizing-docs-embed.md).


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://gitbook.com/docs/documentation/fr/docs-site/embedding/configuration/creating-custom-tools.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
