Campagnes & Publication auto
Brancher Redax sur ton site via n8n
Tutoriel complet pour les sites Next.js custom déployés sur Vercel
Comment ça marche
Quand Redax génère un article (manuellement ou via une campagne programmée), il envoie un webhook signé HMAC vers ton workflow n8n. Le workflow vérifie la signature, puis forward le contenu vers une route API sur ton site, qui publie l'article.
Avant de commencer
- Un compte Redax actif avec au moins un client configuré
- Un site Next.js déployé sur Vercel (App Router)
- Un compte n8n (cloud ou self-hosted) accessible publiquement
- Selon ton stockage : un repo GitHub avec accès écriture OU un projet Supabase
Choisir ta stack de publication
Comment ton site stocke-t-il ses articles actuellement ? La réponse détermine quel template de route API utiliser.
Fichiers MDX dans ton repo GitHub
Tes articles sont des fichiers .mdx dans content/articles/ versionnés dans Git. Idéal pour un blog statique.
- Articles versionnés (rollback gratuit)
- Re-deploy auto sur push Vercel
- Pas de DB à setup
Base de données Supabase
Tes articles sont stockés dans une table Postgres et lus dynamiquement par tes pages. Idéal pour un blog avec beaucoup d'articles.
- Pas de re-deploy à chaque article
- Requêtes filtrables (catégories, tags, etc.)
- Scalable à grand volume
Tu utilises une autre stack (CMS headless, Vercel KV, autre) ? Voir la section "Adapter à ta stack" plus bas.
Tutoriel : publication MDX dans GitHub
Pour les sites qui stockent leurs articles comme fichiers .mdx dans le repo GitHub.
Créer un Personal Access Token GitHub
Va sur la page de création de token GitHub :
github.com/settings/tokens/newConfigure le token :
- Note : Redax — publication articles
- Scope requis :
repo(full control of private repositories) - Expiration : 90 jours minimum
ghp_) immédiatement — tu ne pourras plus le revoir après.Télécharger le template de route API
Télécharge le fichier route.ts prêt à l'emploi :
Télécharger redax-api-articles-mdx.tsPlace ce fichier dans ton projet à :
app/api/articles/route.tsConfigurer les env vars Vercel
Dans le dashboard Vercel > Settings > Environment Variables, ajoute :
| Variable | Valeur |
|---|---|
GITHUB_TOKEN | ton token ghp_… |
GITHUB_OWNER | ton username GitHub |
GITHUB_REPO | nom du repo de ton site |
GITHUB_BRANCH | main (ou master) |
REDAX_API_KEY | une chaîne aléatoire (voir astuce ci-dessous) |
💡 Génère une clé aléatoire avec :
openssl rand -hex 32Redeploy ton site une fois les vars ajoutées (Vercel le fait auto à chaque commit, sinon force via le dashboard).
Tester la route en local
Vérifie que ta route fonctionne avec un curl de test :
curl -X POST https://ton-site.vercel.app/api/articles \
-H "Authorization: Bearer <ta-redax-api-key>" \
-H "Content-Type: application/json" \
-d '{
"event": "article.generated",
"data": {
"id": "test-123",
"title": "Mon premier article via Redax",
"content_html": "<p>Hello world</p>",
"meta_description": "Article de test",
"created_at": "2026-05-18T12:00:00Z"
}
}'Tu devrais voir :
- Un nouveau commit dans ton repo GitHub
- Un fichier
content/articles/mon-premier-article-via-redax.mdx - Vercel qui redéploie automatiquement
Setup n8n (voir section ci-dessous)
Une fois la route API en place, passe au setup du workflow n8n dans la section suivante.
Continuer avec n8nTutoriel : publication dans Supabase
Pour les sites qui utilisent une base de données Supabase pour leurs articles.
Créer la table articles
Dans Supabase > SQL Editor, exécute :
CREATE TABLE articles (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
redax_article_id TEXT UNIQUE NOT NULL,
title TEXT NOT NULL,
slug TEXT UNIQUE NOT NULL,
content_html TEXT NOT NULL,
excerpt TEXT,
cover_image_url TEXT,
seo_score INT,
geo_score INT,
word_count INT,
published_at TIMESTAMPTZ DEFAULT now(),
created_at TIMESTAMPTZ DEFAULT now()
);
CREATE INDEX idx_articles_slug ON articles(slug);Télécharger le template
Télécharge le fichier route.ts pour Supabase :
Télécharger redax-api-articles-supabase.tsPlace-le dans : app/api/articles/route.ts
Installe le client Supabase si pas déjà fait :
pnpm add @supabase/supabase-jsConfigurer les env vars Vercel
| Variable | Où la trouver |
|---|---|
NEXT_PUBLIC_SUPABASE_URL | Supabase > Project Settings > API > Project URL |
SUPABASE_SERVICE_ROLE_KEY | Supabase > Project Settings > API > service_role |
REDAX_API_KEY | openssl rand -hex 32 |
SERVICE_ROLE_KEY côté client. Cette clé bypasse les RLS et donne accès complet à la DB. Garde-la uniquement côté serveur (Server Components, Server Actions, Route Handlers).Tester la route en local
Même curl que pour la variante MDX :
curl -X POST https://ton-site.vercel.app/api/articles \
-H "Authorization: Bearer <ta-redax-api-key>" \
-H "Content-Type: application/json" \
-d '{
"event": "article.generated",
"data": {
"id": "test-123",
"title": "Mon premier article via Redax",
"content_html": "<p>Hello world</p>",
"meta_description": "Article de test",
"created_at": "2026-05-18T12:00:00Z"
}
}'Vérifie dans Supabase > Table Editor que la row apparaît dans la table articles.
Setup n8n (voir section ci-dessous)
Une fois la route API en place, passe au setup du workflow n8n dans la section suivante.
Continuer avec n8nSetup du workflow n8n
Ce workflow reçoit les webhooks Redax, vérifie la signature HMAC, et forward les articles vers ta route API.
Télécharger et importer le workflow
Dans n8n : Workflows > Import from File > sélectionne n8n.json
Activer le webhook n8n
- Ouvre le workflow importé
- Clique sur le node "Webhook Redax"
- Copie la "Production URL" (ressemble à
https://ton-n8n.com/webhook/redax-generic) - Active le workflow via le toggle en haut à droite
Configurer la vérification HMAC
Dans le node "Verify HMAC", remplace la constante :
const REDAX_WEBHOOK_SECRET = 'whsec_REPLACE_WITH_YOUR_SECRET';Tu obtiendras ce secret à l'étape suivante (création du webhook dans Redax). Reviens compléter ce node après.
Configurer le HTTP Request
Dans le node "HTTP Request — Customize Me" :
- URL : remplace
https://CUSTOMIZE_ME.example.com/articlesparhttps://ton-site.vercel.app/api/articles - Headers > Authorization : remplace
Bearer YOUR_API_KEYparBearer <ta-redax-api-key>(la même que dans tes env vars Vercel) - Body JSON : adapte si besoin (voir astuce ci-dessous)
💡 Si tu utilises notre template de route API tel quel, modifie le Body JSON du node HTTP pour transmettre le payload complet :
{
"event": "{{ $json.body.event }}",
"delivery_id": "{{ $json.body.delivery_id }}",
"timestamp": "{{ $json.body.timestamp }}",
"data": {{ $json.body.data }}
}Créer le webhook dans Redax
Maintenant qu'n8n est prêt à recevoir, on crée côté Redax le webhook qui va lui envoyer les events.
Aller sur /settings/webhooks
Connecte-toi à Redax et va sur la page Webhooks :
Ouvrir /settings/webhooksClique sur "Ajouter un webhook".
Configurer le webhook
- URL: colle la "Production URL" de ton webhook n8n (étape 6.2)
- Events : coche
article.generated - Clique sur "Créer"
Redax affiche un secret unique (commence par whsec_) — copie-le immédiatement.
Synchroniser le secret dans n8n
Retourne dans n8n > node "Verify HMAC" et remplace la valeur de la constante :
const REDAX_WEBHOOK_SECRET = 'whsec_TON_SECRET_RÉEL';Save le workflow.
Tester le webhook
Dans Redax > /settings/webhooks, clique sur le bouton de test à côté de ton webhook.
Va dans l'onglet "Deliveries" pour voir le résultat :
- Status 200: tout est OK, ton site a reçu et publié l'article test
- Status 401: problème d'auth (secret HMAC ou Bearer key)
- Status 502 : ta route API a planté (voir logs Vercel)
Si test OK, tu devrais voir un nouveau fichier MDX (ou row Supabase) sur ton site.
Lancer une campagne de test
Maintenant que tout est branché, teste avec une vraie campagne pour valider le pipeline complet.
Créer la campagne
- Va sur /campaigns/new
- Choisis un client de test
- Saisis 2-3 briefs simples, un par ligne (ex : Article sur les tendances SEO 2026)
- Cadence : 1 article tous les 1 jour
- Heure : actuelle + 5 minutes (pour voir le premier article rapidement)
- Date de démarrage : aujourd'hui
- Clique sur "Activer la campagne"
Suivre l'exécution
Dans les 5 minutes après l'heure programmée, le premier article devrait :
- Apparaître dans /articles
- Déclencher le webhook → n8n → ta route API
- Être publié sur ton site (commit GitHub ou row Supabase)
Surveille en temps réel :
- Page détail de la campagne : status des articles individuels en live
- /settings/webhooks > Deliveries : status des webhooks envoyés
- Logs Vercel de ton site : pour debugger côté route API
Si quelque chose plante
Voir la section "Debug courant" ci-dessous pour les erreurs fréquentes.
Voir le debugAdapter à une autre stack
Tu utilises Sanity, Contentful, Strapi, Vercel KV, Vercel Blob, ou un autre système ? Adapte la route API à ton cas. Voici le contrat à respecter.
Endpoint
Configure n'importe quelle route HTTP qui accepte POST. Pointe le node "HTTP Request" de n8n vers cette URL.
Auth
Header attendu :
Authorization: Bearer <REDAX_API_KEY>La clé est arbitraire — choisis-la côté toi, mets-la dans tes env vars + dans le node HTTP n8n.
Body reçu
Structure du payload (typé TypeScript) :
type RedaxPayload = {
event: "article.generated" | "article.published" | "audit.completed"
delivery_id: string
timestamp: string
data: {
id: string
title: string
content_html: string
meta_description: string
cover_image_url?: string
seo_score?: number
geo_score?: number
word_count?: number
created_at: string
}
}Réponses attendues
Ta route doit retourner :
| Status | Cas | Réaction Redax |
|---|---|---|
200 | Publication réussie | Delivery marquée success |
200 + { skipped: <event> } | Event ignoré (ex: non géré) | Delivery success, pas de retry |
4xx | Erreur côté ton serveur (auth, payload invalide) | Retry 2 fois, puis failed |
5xx | Erreur serveur | Retry 2 fois, puis failed |
💡 Après 10 échecs consécutifs, Redax désactive automatiquement le webhook pour éviter de spammer un endpoint cassé. Tu peux le réactiver dans /settings/webhooks après avoir corrigé le problème.
Debug courant
Les erreurs les plus fréquentes et leurs solutions.
| Symptôme | Cause probable | Solution |
|---|---|---|
| Delivery 401 dans /settings/webhooks | HMAC secret pas synchronisé entre Redax et n8n | Recopie le secret webhook Redax dans le node "Verify HMAC" de ton workflow n8n |
| Logs Vercel : 401 Unauthorized | REDAX_API_KEY différente entre Vercel et le node HTTP n8n | Vérifie que la même clé est dans les 2 endroits |
| Delivery 502 "GitHub commit failed" | Token GitHub expiré ou scope insuffisant | Régénère un token avec scope repo et expiration 90j+ |
| Delivery 502 "Database insert failed" | Table articles inexistante ou contrainte UNIQUE violée | Vérifie la migration SQL + unicité du slug |
| Commit GitHub OK mais site pas à jour | Vercel n'a pas redéployé | Vérifie l'onglet Deployments de Vercel + force un redeploy |
| Article créé en DB Supabase mais pas affiché | Page de listing pas revalidée | Ajoute revalidatePath() ou utilise ISR sur tes pages blog |
| Le webhook n'est jamais déclenché | Event non émis — vérifie /settings/webhooks Deliveries | Les events sont émis uniquement quand un article est généré (manuel ou campagne) |
| Workflow n8n ne reçoit rien | Webhook n8n inactif (toggle off) | Active le workflow dans n8n (toggle en haut à droite) |
💡 Pour chaque delivery échouée, Redax affiche le response body de ton serveur dans /settings/webhooks > Deliveries > détail. C'est ton meilleur ami pour debugger.
Aller plus loin
Documentation API publique
Endpoints REST pour interroger tes articles, audits, campagnes depuis ton propre code.
Voir la doc APIAutres intégrations
Templates pour WordPress, Notion et autres CMS prêts à l'emploi.
Voir les intégrationsBesoin d'aide pour setup ?
On peut configurer tout ça pour toi en 30 minutes Zoom (149€, ou 99€ pour les plans Team/Business).
Contacter le support