> ## Documentation Index
> Fetch the complete documentation index at: https://help.semji.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Intégration Drupal : connectez votre CMS pour publier depuis Semji

> Connectez Drupal pour publier depuis Semji sans copier-coller. Vous décidez de ce que les agents peuvent lire, créer ou modifier

## En un coup d'œil

* **Ce que vous pouvez faire** : donner aux agents Semji un accès contrôlé à vos contenus Drupal.
* **Pour qui** : propriétaires de workspace et administrateurs Drupal.
* **Compatibilité** : à partir de Drupal 8.7, la version qui a intégré JSON:API au cœur de Drupal.

## Prérequis

* Drupal 8.7 ou plus récent, en ligne, public et en HTTPS.
* Les modules JSON:API et HTTP Basic Authentication (basic\_auth) activés. Les deux sont livrés avec Drupal.
* JSON:API réglé en lecture-écriture : cochez « Accept all JSON:API create, read, update, and delete operations » sous `/admin/config/services/jsonapi`. Il est en lecture seule par défaut, ce qui en fait le blocage le plus courant.
* Un compte Drupal dédié à Semji, avec les permissions listées dans [Permissions du compte d'API](#permissions-du-compte-dapi). Un simple rôle d'éditeur ne suffit pas, cette section explique pourquoi.
* Pour que les agents puissent écrire des méta descriptions : le module Metatag, plus un champ Meta tags sur chaque type de contenu concerné. Voir [Méta descriptions](#méta-descriptions).
* Si un pare-feu, un WAF ou une protection anti-bot (Cloudflare, Akamai, Sucuri, …) se trouve devant votre site, il doit autoriser les adresses IP de Semji. Voir [Pare-feu et autorisation d'IP](#pare-feu-et-autorisation-dip).
* Vous êtes propriétaire du workspace dans Semji. La connexion est partagée avec tout le workspace.

<Note>
  La disponibilité de l'intégration Drupal dépend de votre offre Semji. Si le bouton Connecter ouvre une fenêtre de mise à niveau au lieu du formulaire de connexion, contactez votre responsable de compte.
</Note>

## Comment connecter votre site Drupal

<Steps>
  <Step title="Préparer votre site Drupal">
    Trois réglages à faire côté Drupal avant de connecter Semji.

    **Activer les modules.** Sur la page des modules (menu Extend, /admin/modules), activez JSON:API et HTTP Basic Authentication. Les deux sont fournis avec Drupal.

    **Autoriser l'écriture.** Dans Configuration → Services web → JSON:API (/admin/config/services/jsonapi), sélectionnez l'option « Accept all JSON:API create, read, update, and delete operations ». Sans cela, Semji peut lire vos contenus mais pas en créer ni en modifier.

    **Créer un rôle et un compte pour Semji.** Dans Personnes → Rôles (People → Roles), créez un rôle (par exemple Semji API) et donnez-lui les permissions listées dans [Permissions du compte d'API](#permissions-du-compte-dapi). Puis, dans Personnes (People, /admin/people), créez un compte dédié, par exemple semji-api, avec un mot de passe robuste, et attribuez-lui ce rôle.

    Ne réutilisez pas un simple rôle d'éditeur : il n'a pas la permission dont Semji a besoin pour définir le statut de publication, et chaque écriture échoue avec une erreur `403`.

    **Ajouter un champ Meta tags, uniquement si vous voulez des méta descriptions.** Voir [Méta descriptions](#méta-descriptions) pour la procédure complète.

    <Tip>
      Si la publication échoue, le premier réglage à vérifier est presque toujours l'autorisation d'écriture de JSON:API.
    </Tip>
  </Step>

  <Step title="Connecter depuis Semji">
    Vous devez être propriétaire du workspace, car la connexion vaut pour toute l'équipe. Dans Semji, ouvrez Paramètres → Intégrations, allez dans l'onglet CMS et cliquez sur Connecter sur la ligne Drupal.

    <video autoPlay muted loop playsInline src="https://mintcdn.com/semji/ZF6m599EYafA5y4i/images/help-center/connect-your-tools/cms-publisher/03-integration-cms.mp4?fit=max&auto=format&n=ZF6m599EYafA5y4i&q=85&s=3ca13af0ab70156f9f1c51bdb3f87228" title="Intégration CMS" data-path="images/help-center/connect-your-tools/cms-publisher/03-integration-cms.mp4" />

    Remplissez les trois champs :

    * **URL du site** : l'adresse exacte de votre site en HTTPS, par exemple `https://votre-site.com`. Entrez l'adresse réellement utilisée par votre site : s'il bascule de exemple.com vers [www.exemple.com](http://www.exemple.com), saisissez la version [www](http://www). Semji ne suit pas les redirections.
    * **Nom d'utilisateur** : l'identifiant Drupal du compte d'API créé à l'étape 1.
    * **Mot de passe** : le mot de passe de ce compte.

          <img src="https://mintcdn.com/semji/ql0fCIIUu6X2284g/images/help-center/connect-your-tools/integration-drupal/02-connecter-drupal.jpg?fit=max&auto=format&n=ql0fCIIUu6X2284g&q=85&s=b1ecba2bfa034e8e86947f611dce317c" alt="Connecter Drupal" width="670" height="392" data-path="images/help-center/connect-your-tools/integration-drupal/02-connecter-drupal.jpg" />

    Cliquez sur Suivant. Semji teste la connexion en direct en appelant `GET /jsonapi` sur votre site et en vérifiant que Drupal authentifie le compte.
  </Step>

  <Step title="Choisir les outils Drupal">
    Décidez ce que les agents IA peuvent faire sur votre site. Les trois groupes sont activés par défaut :

    * **Lecture** : parcourir, lire et inspecter le contenu et la structure du site.
    * **Écriture** : créer et mettre à jour du contenu.
    * **Suppression** : supprimer du contenu. Attention, cette action est irréversible.
  </Step>

  <Step title="Enregistrer">
    Cliquez sur Enregistrer. La ligne Drupal s'affiche désormais comme connectée.
  </Step>
</Steps>

## Permissions du compte d'API

Donnez-les au rôle créé pour Semji. Remplacez `article` par chaque type de contenu sur lequel les agents travailleront.

| Permission | Pourquoi Semji en a besoin | Requise |
| - | - | - |
| `access content` | Lire les contenus publiés | Toujours |
| `create article content` | Créer de nouveaux contenus | Pour créer |
| `edit any article content` | Modifier des contenus que le compte n'a pas créés | Pour modifier |
| `use text format basic_html` | Écrire le corps dans le format de texte visé par Semji | Toujours |
| `administer nodes` | Définir le statut de publication (brouillon ou publié) | Sur les types de contenu sans Content Moderation |
| Permissions de transition de workflow | Faire passer un contenu d'un état de modération à un autre | Sur les types de contenu avec Content Moderation |
| `create terms in tags` | Retrouver ou créer des étiquettes dans le vocabulaire `tags` | Si les agents rattachent des étiquettes |
| Permissions des types Paragraphs | Créer les paragraphes d'une mise en page à base de composants | Si votre site utilise Paragraphs |
| `delete any article content` | Supprimer des contenus | Seulement si vous activez l'outil de suppression |
| `administer node fields` | Lire les définitions de champs de vos types de contenu | Facultative, voir ci-dessous |

<Warning>
  **`administer nodes` est requise sur les types de contenu qui n'utilisent pas Content Moderation.** Semji indique toujours explicitement le statut de publication, un contenu n'est donc jamais publié par accident, et Drupal réserve l'écriture du champ `status` à cette permission. Sans elle, chaque création et chaque mise à jour échoue avec « The current user is not allowed to POST the selected field (status). The 'administer nodes' permission is required. »

  Sur un type de contenu géré par Content Moderation, Semji écrit l'état de modération à la place, `administer nodes` n'est donc pas nécessaire. Accordez plutôt les permissions de transition de votre workflow.
</Warning>

### À propos de `administer node fields`

Cette permission est facultative mais recommandée. Avec elle, Semji lit directement les définitions de champs de vos types de contenu et sait précisément quel champ contient quoi. Sans elle, Semji se rabat sur l'inspection d'un contenu existant pour deviner la structure. Ça fonctionne, mais c'est moins précis et il faut au moins un élément existant par type de contenu.

Drupal classe cette permission comme restreinte, car elle permet aussi d'ajouter et de supprimer des champs depuis l'interface d'administration. Si votre politique de sécurité l'interdit, ne l'accordez pas : l'intégration fonctionne sans.

## Méta descriptions

Le cœur de Drupal n'a pas de champ de méta description. Semji écrit les méta descriptions via le module contribué [Metatag](https://www.drupal.org/project/metatag), que la plupart des configurations SEO Drupal utilisent déjà.

<Steps>
  <Step title="Installer et activer Metatag">
    Installez le module comme vous le faites d'habitude pour les modules contribués, puis activez-le dans Extend.
  </Step>

  <Step title="Ajouter un champ Meta tags à chaque type de contenu">
    Allez dans Structure → Types de contenu → votre type → Gérer les champs → Ajouter un champ, et choisissez le type de champ Meta tags. N'importe quel libellé et nom machine conviennent : Semji identifie le champ par son type, pas par son nom.
  </Step>
</Steps>

Une fois le champ créé, donnez la méta description à un agent comme n'importe quelle autre consigne (« rédige aussi la méta description »). Semji la met en forme et la stocke pour vous. Lors d'une mise à jour, elle est fusionnée avec les balises déjà présentes sur l'élément : un méta titre que vous avez écrit à la main est donc conservé.

<Note>
  Si un type de contenu n'a pas de champ Meta tags, les agents écrivent le contenu normalement et vous disent que la méta description n'a pas pu être enregistrée. Ils ne la collent jamais dans le corps du texte.
</Note>

## Ce que Semji peut faire une fois connecté

| Groupe d'outils | Ce qu'il fait |
| - | - |
| Lecture | Lister les types de contenus, repérer leurs champs et formats de texte, lister et lire les contenus tels qu'ils sont stockés, pour des modifications fidèles |
| Écriture | Créer et mettre à jour du contenu. Le nouveau contenu est créé en brouillon, sauf si vous demandez explicitement à un agent de publier. Les étiquettes existantes sont réutilisées, les nouvelles sont créées. Les mises en page à base de Paragraphs sont prises en charge |
| Suppression | Supprimer définitivement un contenu. L'agent demande toujours une confirmation avant |

### Valeurs par défaut du contenu

Par défaut, Semji cible le type de contenu `article` avec le format de texte `basic_html`. Sur les sites qui utilisent Content Moderation, Semji écrit les états de modération `published` et `draft` à la place du champ de statut brut. Contactez le support Semji si votre site a besoin d'autres valeurs par défaut (autre type de contenu, autre format de texte ou noms d'états de modération personnalisés).

## Gérer ou déconnecter

Depuis Paramètres → Intégrations → CMS, la ligne Drupal propose :

* **Gérer les outils** : activer ou désactiver chaque groupe d'outils.
* **Déconnecter** : retirer l'intégration pour tout le workspace.

## Pare-feu et autorisation d'IP

Semji appelle directement le JSON:API de votre site. Si un pare-feu ou une protection type Cloudflare se trouve devant votre Drupal, il doit laisser passer ces appels, sinon la connexion échoue.

Semji's servers reach the internet through a fixed set of outbound IP addresses. If a firewall, WAF, or anti-bot protection (Cloudflare, Akamai, Sucuri, …) sits in front of your site, it can block Semji's requests — typically with a `403 Forbidden` — before they ever reach your CMS, even when your credentials are correct.

Allow the following Semji IP addresses:

```text theme={null}
63.34.75.122
63.35.78.179
54.228.104.165
18.200.156.37
34.248.117.83
52.213.28.177
```

Sur Cloudflare, créez une règle personnalisée WAF avec l'action Skip, qui cible les requêtes dont l'IP source fait partie des adresses ci-dessus et dont le chemin commence par `/jsonapi/`.

<Warning>
  Un blocage par le pare-feu ressemble à une erreur d'identifiants. Quand une protection répond « 403 Forbidden » sur /jsonapi, Semji affiche une erreur d'identifiants invalides même si votre nom d'utilisateur et votre mot de passe sont corrects. Si vous êtes sûr de vos identifiants, vérifiez d'abord le pare-feu.
</Warning>

## Dépannage

<AccordionGroup>
  <Accordion title="Identifiants Drupal invalides. Vérifiez le nom d'utilisateur et le mot de passe.">
    Drupal a refusé la connexion. Les causes possibles : le nom d'utilisateur ou le mot de passe est erroné, le module basic\_auth n'est pas activé (Drupal traite alors la demande comme un visiteur anonyme), ou un pare-feu bloque la requête avant qu'elle n'atteigne Drupal.
  </Accordion>

  <Accordion title="Impossible de se connecter au site Drupal. Vérifiez les identifiants, l'URL du site, et que les modules JSON:API et Basic Auth sont activés.">
    Semji n'a pas réussi à joindre votre site. Les causes les plus fréquentes :

    * Le module JSON:API est désactivé : /jsonapi renvoie une erreur 404.
    * L'adresse redirige. Semji ne suit pas les redirections, entrez donc l'adresse finale, par exemple la version [www](http://www).
    * Le site est injoignable : problème de DNS, hébergeur indisponible, ou site non public.
    * Un pare-feu affiche une page de vérification anti-bot, que Semji ne peut pas franchir.
    * Le site répond trop lentement : la réponse doit arriver en moins de 10 secondes.
  </Accordion>

  <Accordion title="Le JSON:API de Drupal est configuré pour n'accepter que les opérations de lecture.">
    La publication échoue avec une erreur de lecture seule. Un administrateur doit activer l'option « Accept all JSON:API create, read, update, and delete operations » dans /admin/config/services/jsonapi.
  </Accordion>

  <Accordion title="Erreur d'authentification ou de permission Drupal : le compte d'API ne peut pas créer ou mettre à jour ce contenu.">
    Un agent signale une erreur de permission. Le compte créé pour Semji n'a pas les droits nécessaires sur ce type de contenu. Sur les sites Paragraphs, vérifiez aussi ses permissions Paragraphs (Paragraphs Type Permissions du compte d'API).
  </Accordion>

  <Accordion title="Toutes les écritures échouent, alors que les identifiants et les réglages JSON:API sont corrects">
    Vérifiez si le compte a la permission `administer nodes`. Drupal réserve l'écriture du champ `status` à cette permission, et Semji indique toujours explicitement le statut de publication : un compte qui ne l'a pas échoue donc à chaque création et mise à jour, alors que la lecture fonctionne très bien et que le test de connexion passe. Voir [Permissions du compte d'API](#permissions-du-compte-dapi).
  </Accordion>

  <Accordion title="Le test de connexion échoue alors que le site s'affiche bien dans un navigateur">
    Si votre site est en mode maintenance, Drupal répond `503` sur `/jsonapi` à tous les comptes qui n'ont pas la permission « Use the site in maintenance mode », ce qui est normalement le cas du compte d'API. Vous pouvez naviguer sur le site parce que votre session d'administrateur passe outre. Désactivez le mode maintenance dans Configuration → Développement → Mode maintenance, ou donnez cette permission au rôle Semji.
  </Accordion>

  <Accordion title="Un agent dit que la méta description n'a pas été enregistrée">
    Deux cas distincts :

    * Pas de champ de méta description sur ce type de contenu : installez Metatag et ajoutez un champ Meta tags, comme décrit dans [Méta descriptions](#méta-descriptions).
    * Drupal a accepté l'écriture mais n'a rien stocké : Semji n'a pas pu lire vos définitions de champs et a deviné le mauvais format. Donnez la permission `administer node fields` au compte d'API, ou renseignez cette méta description à la main.

    Dans les deux cas, le reste du contenu est écrit normalement.
  </Accordion>

  <Accordion title="Erreurs affichées avant même de valider le formulaire">
    * « Veuillez saisir une URL valide. » : le texte saisi n'est pas une adresse web.
    * « L'URL du site doit commencer par https\://. » : les sites en HTTP ne peuvent pas être connectés.
    * « L'URL du site pointe vers une adresse privée ou réservée, ce qui n'est pas autorisé. » : les sites locaux ou internes sont refusés, le site doit être public.
  </Accordion>
</AccordionGroup>

## Articles liés

* [Connecter votre CMS : publiez vos contenus dans votre CMS sans quitter Semji](/fr/connect-your-tools/cms-publisher)
* [Synchroniser des brouillons vers votre CMS](/guides/sync-drafts-to-cms) : le flux de publication par API, si vous préférez piloter la synchronisation vous-même.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.