saycom.
Rapport KPI · automatisation n8n

Un nom d'entreprise, une période, un rapport complet.

Vous tapez le nom du client et la période (3, 6, 12 mois ou dates libres). En 10 à 15 secondes, n8n va chercher les chiffres dans GA4, Google Business Profile, SayRank, la base des formulaires et Google Maps, puis renvoie le rapport HTML complet aux couleurs Saycom.

9workflows actifs
87nodes au total
9 + 10comptes Google routés (GA4 + GBP)
10-15 spour un rapport complet
1

Ce que vous donnez

Le nom du client tel qu'il est dans EXPORT_SAYRANK, et la période. La comparaison avec l'année précédente (N-1) est calculée toute seule.

2

Ce que fait le système

Il vérifie la demande, retrouve le client, choisit le bon compte Google, interroge 6 sources en parallèle, puis cherche les concurrents.

3

Ce que vous recevez

Une page HTML prête à montrer ou imprimer. Si une source est en panne, le rapport sort quand même, avec la case concernée vide.

Vue d'ensemble

Le parcours d'une demande

Chaque bloc est cliquable : il ouvre la fiche du workflow correspondant, avec tous ses nodes.

en parallèle Formulaire n8nWF-Form · nom + période Appel API directex. bouton SayRank WF0Orchestrateur 1. vérifie la demande 2. trouve le client dans EXPORT_SAYRANK 3. vérifie GA4, GBP et codecrm /webhook/kpi/report Erreur 400 · 404 · 422 WF1 · GA4visites du site sub-ga4-call WF2 · GBP Perfapparitions, appels sub-gbp-call WF3 · Avis Googlenote, nombre d'avis sub-gbp-call WF4 · SayRankpositions des mots-clés Fiche GBPville, activité sub-gbp-call E-mails reçusSQL sur la base des formulaires Mergeattend les 6réponses ConcurrentsSerpApi · cache 30 j Compute derivedmet les chiffres en forme WF6 · Renderremplit le template RapportHTML 10-15 s
Astuce : cliquez sur un bloc pour ouvrir son workflow, ou rejouez le parcours étape par étape.
Faites glisser le schéma vers la gauche pour voir la suite.
Les 9 workflows

Qui fait quoi, node par node

Choisissez un workflow, puis cliquez ou survolez un node : le panneau explique son rôle en clair et donne le détail technique pour le dev.

Qui fait quoi

D'où vient chaque chiffre du rapport

Une ligne par source de données : le workflow qui la lit, et les variables du rapport qu'elle remplit. Les noms en majuscules sont les cases du template.

SourceLue parVariables du rapport alimentées

Les variables sont toutes calculées dans le node Compute derived de WF0, à partir des réponses brutes. Les flags HAS_… affichent ou masquent un bloc entier du rapport.

Codes d'erreur et dégradation

Quand ça ne passe pas

Deux familles bien séparées : la demande est fausse (le système refuse avec un message clair), ou une source est en panne (le rapport sort quand même).

1. La demande est refusée

Réponse JSON {error, message, field, details}. Le front doit se baser sur error, qui ne change jamais.

2. Une source tombe : rapport dégradé, pas d'échec

Les 6 appels de collecte et l'appel SerpApi sont réglés sur onError = continueRegularOutput. Une source en panne laisse sa case vide (— ou 0) ou masque son bloc.

Pour le développeur

Maintenance

Les gestes courants, les règles à ne pas casser et les points encore ouverts.

Ajouter un compte Google

Un nouveau client branché sur un compte Google que n8n ne connaît pas encore.

  1. Créer le credential dans n8n : Google Analytics OAuth2 pour GA4, Google OAuth2 API pour GBP. Garder la convention de nom : Google Analytics account - <email> et Google account - <partie avant @>.
  2. Dans sub-ga4-call : ajouter une règle au Switch ga4_email (égalité exacte, sensible à la casse, sur l'email complet), dupliquer un node GA4 - …, lui donner le nouveau credential, le brancher sur une nouvelle entrée du Merge (augmenter son nombre d'entrées).
  3. Dans sub-gbp-call : même chose sur le Switch gbp_email, mais la règle compare la partie avant le @ (gbp_email_local).
  4. Remplir email_ga4 / email_gbp et les IDs du client dans EXPORT_SAYRANK, puis lancer un rapport test.

Attention : les Switch n'ont pas de sortie par défaut. Un email absent des règles ne lève pas d'erreur, la source revient simplement vide dans le rapport.

Modifier le template ou WF0

  1. Le template rendu est template-suivi-client-v4.html, mais il est régénéré par retokenize_v4.py depuis template-v4-new.html. Une retouche faite à la main sur le fichier rendu est perdue à la régénération : passer par un rep() dans le script.
  2. Déployer avec deploy_v4.py wf6 (ou wf0, form). Le script ré-encode le template en base64 dans Render mustache, fait un PUT sur l'ID live (pas de doublon) et écrit d'abord un backup backup-live-<ID>-<slot>.json. Option --dry-run pour voir sans écrire.
  3. Les identifiants n8n se chargent depuis .env (jamais commité).
  4. Le backup est l'état d'avant le déploiement. Pour auditer ce qui tourne vraiment, relire le workflow live via l'API (GET /api/v1/workflows/<id>).

deploy_v4.py ne couvre que WF0, WF6 et WF-Form. WF1 à WF4 et les deux sub-workflows se modifient dans l'éditeur n8n (ou via redeploy.py).

Règles à ne pas casser

  • Ne jamais toucher au workflow legacy k4gIRb1GRvKc15sW (ancien rapport Google Slides, environ 250 nodes). Il ne fait pas partie de ce système.
  • EXPORT_SAYRANK est la seule source de vérité pour les clients (sheet 1AO6prkiy1oL55Z4ibgya9gc2EgKQ4atiRHmK3qqArY0, onglets « Feuille 1 » et « Liste entreprise Sayrank »). Les anciennes sheets d'inventaire GA4 et GBP sont obsolètes.
  • Pas de mode keypair pour des paramètres de requête répétés dans un node HTTP : n8n dédoublonne les clés. Les 8 dailyMetrics GBP sont donc écrits en dur dans l'URL (node Lookup de WF2).
  • Les nodes Execute Workflow portent l'ID du sub-workflow en dur. Si un sub-workflow est recréé, il faut repatcher ces IDs (patch_subwf_refs.py) avant d'activer.
  • Mustache, pas Handlebars : Handlebars plante dans le sandbox n8n. Pas de {{ littéral dans le JS du template.
  • Les noms des nodes comptent : le code lit d'autres nodes par leur nom ($('Lookup unique'), $('Merge KPIs')…). Renommer un node casse ces références.

Points ouverts connus

Glossaire

Les mots du projet