Publishing

Webhook

Connectez un site développé sur mesure ou avec un outil IA.

Environ 7 minutes de configuration

Webhook est recommandé pour la plupart des sites sur mesure ou créés avec une IA. Le temps de développement côté site n’est pas inclus.

Préparation

  • Outil IA qui développe le site ou personne chargée de sa maintenance.
  • Accès aux réglages de l’hébergement.

Transmettre les instructions au site

Copiez les instructions complètes ci-dessous dans l’outil de développement. Demandez-lui de relier Surpasso au blog existant tout en conservant pages et design, ou d’ajouter un blog s’il manque.

Afficher les instructions de connexion
Surpasso aide les entreprises à planifier, rédiger et publier des articles SEO et GEO. Connectez ce site existant à Surpasso. Commencez par examiner son framework, ses routes de blog, le stockage des articles, son design et son déploiement, puis réutilisez l’existant. Ne reconstruisez pas le site et ne supprimez ni n’écrasez les articles existants.

Utilisez Webhook : Surpasso envoie les articles ; le site les stocke et les affiche. Ajoutez un récepteur HTTPS POST public (par exemple /api/surpasso-webhook) en réutilisant l’écriture du CMS existant. S’il n’y a pas de blog, ajoutez le stockage, l’index et les pages de détail nécessaires en conservant le design actuel. Retournez d’abord l’URL du récepteur déployable. Rejetez les requêtes tant que SURPASSO_WEBHOOK_SECRET n’est pas configuré ; ne désactivez jamais la vérification. J’enregistrerai ensuite l’URL dans Surpasso, récupérerai le secret de signature, configurerai SURPASSO_WEBHOOK_SECRET dans le déploiement du site, puis testerai.

Enveloppe JSON : {schemaVersion:"1",event,deliveryId,idempotencyKey,occurredAt,article}. En-têtes : x-surpasso-timestamp, x-surpasso-signature (sha256=signature hexadécimale), x-surpasso-event, x-surpasso-delivery. Vérifiez HMAC-SHA256(secret, timestamp + "." + rawBody) sur le corps brut non modifié, comparez en temps constant, acceptez une fenêtre de cinq minutes et rejetez les structures invalides. integration.test contient article:null : validez puis retournez 2xx sans créer de contenu. article.draft_created enregistre un brouillon privé ; article.published le rend public ; article.updated met à jour le même article en conservant son état de publication. Aucun événement de dépublication/suppression n’existe actuellement ; ne prétendez pas prendre en charge la suppression automatique.

Correspondance des champs : id = identité stable de l’article ; revision = version du contenu ; title = titre ; slug = chemin de l’article ; excerpt = résumé ; contentMarkdown / contentHtml = corps (utiliser le format compatible avec l’éditeur existant et traiter le HTML en sécurité) ; metaTitle / metaDescription = métadonnées SEO ; featuredImage.url / alt = image de couverture et texte alternatif ; images = images du corps ; author, authorType, authorUrl = auteur ; editor, reviewer et leurs champs Type / Url = crédits éditoriaux ; categories / tags = taxonomie ; language = langue du contenu ; contentFamilyId / alternates = relations et liens linguistiques ; structuredData = données structurées ; canonicalUrl = URL canonique. Utilisez les véritables chemins publics du site et ne recopiez pas une URL canonique incorrecte. Gérez proprement les valeurs nulles ; les champs facultatifs non pris en charge ne doivent pas bloquer la publication.

Persistez l’association article.id vers article local, isolée par Product/brandId, et rejetez les anciennes revision. Persistez deliveryId / idempotencyKey pour dédupliquer les livraisons ; une clé de livraison n’est pas l’identité de l’article. Retournez un succès pour un doublon déjà traité sans créer un nouvel article. Retournez 2xx uniquement après écriture réussie ou acceptation durable en file. L’expéditeur expire après 12 secondes et refuse les redirections. Testez les signatures invalides, horodatages anciens, tests de connexion, brouillons, publications, mises à jour, doublons et anciennes révisions.

Exécutez les vérifications nécessaires, puis expliquez simplement : les fonctions modifiées, les étapes de déploiement, les noms des variables d’environnement à configurer et dans quel tableau de bord, l’URL à saisir dans Surpasso, et comment vérifier un article puis une mise à jour. Demandez-moi de configurer les secrets dans les variables d’environnement de la plateforme de déploiement, jamais dans le chat, Git ou le code du navigateur.

L’outil doit déployer ses changements et fournir une adresse de production recevant les articles, par exemple https://example.com/api/surpasso-webhook. N’utilisez ni l’accueil ni l’exemple tel quel.

Enregistrer adresse et clé

  1. Dans Integrations → Custom → Webhook, choisissez J’ai une URL de réception et enregistrez-la.
  2. Copiez la clé complète, affichée une seule fois.
  3. Enregistrez-la dans l’hébergement sous SURPASSO_WEBHOOK_SECRET et redéployez.
  4. Revenez dans Surpasso et confirmez la fin.

Tester et vérifier un article

Tester la connexion envoie uniquement un message de test. Envoyez ensuite un brouillon depuis Content Calendar, vérifiez texte et images, puis publiez. Modifiez et renvoyez le même article : le post existant doit être mis à jour sans doublon.

Suppression et dépublication se font dans l’administration du blog. Webhook ne retire pas automatiquement les copies externes. Make, Zapier ou n8n sont possibles avec URL de production, vérification de signature, enregistrement et test d’un article et d’une modification.

Échec du test, article absent ou dupliqué

Vérifiez le déploiement, l’URL HTTPS sans login ni redirection et le redéploiement après enregistrement de la clé. Le récepteur doit répondre en 12 secondes, dédupliquer les mêmes livraisons et empêcher une ancienne revision d’écraser une nouvelle. En cas de résultat inconnu, vérifiez le site avant de réessayer.

Clé perdue ou exposée

Arrêtez l’ancienne clé, déconnectez et reconnectez Webhook, enregistrez la nouvelle clé dans l’hébergement, redéployez et retestez. L’ancienne clé complète n’est pas réaffichable.

Référence technique : événements et signature

Chaque POST JSON contient schemaVersion: "1", event, deliveryId, idempotencyKey, occurredAt et article. integration.test valide, article.published publie et article.updated met à jour le même article en conservant son état.

Calculez HMAC-SHA256 sur timestamp + "." + rawBody, comparez en temps constant avec x-surpasso-signature et son préfixe sha256=, et refusez les horodatages hors de cinq minutes. Validez aussi structure, déduplication et revision ; la signature seule ne suffit pas.