La production manuelle de rapports de ventes quotidiens pour Xiaohongshu implique souvent des étapes répétitives : collecter des données auprès de multiples plateformes, les consolider dans des feuilles de calcul, vérifier les erreurs de formule et distribuer les fichiers. L'utilisation d'un processus RPA (Robotic Process Automation) avec Yindao permet d'automatiser cette chaîne d'opérations, de la collecte des données à l'envoi du rapport final. L'objectif est de réduire le temps de génération d'un rapport de plusieurs heures à quelques minutes, tout en éliminant les erreurs de saisie manuelle. Voici comment implémenter un tel workflow.
Présentation du flux d'automatisation
Le processus se décompose en quatre étapes principales :
- Collecte de données multi-plateformes : extraire les informations depuis le tableau de bord marchand.
- Nettoyage et calcul des métriques : standardiser les formats, calculer les variations et les indicateurs dérivés.
- Génération du rapport structuré : créer un fichier Excel avec plusieurs feuilles (synthèse, analyse produits, tendances).
- Distribution automatisée : envoyer le rapport par email, messagerie interne et sauvegarde en base de données.
Étape 1 : Collecte automatisée des données
Le robot se connecte à la plateforme marchande et navigue vers les sections dédiées aux données de vente et de trafic.
# Pseudo-code pour la collecte des données
Navigateur.Ouvrir("https://merchant.xiaohongshu.com")
Navigateur.Saisir("#champ-utilisateur", Config.Lire("identifiant"))
Navigateur.Saisir("#champ-motdepasse", Config.Lire("motdepasse"))
Navigateur.Cliquer("#bouton-connexion")
Navigateur.Cliquer("#lien-donnees")
Navigateur.Cliquer("#lien-resume-ventes")
chiffreAffaires = Navigateur.LireTexte("#element-ca")
nombreCommandes = Navigateur.LireTexte("#element-commandes")
panierMoyen = Navigateur.LireTexte("#element-panier")
tauxConversion = Navigateur.LireTexte("#element-conversion")
Navigateur.Cliquer("#lien-classement-produits")
tableauTop10 = Tableau.Extraire(Navigateur.ObtenirElement("#tableau-produits"))
Navigateur.Cliquer("#lien-trafic")
visiteursUniques = Navigateur.LireTexte("#element-uv")
pagesVues = Navigateur.LireTexte("#element-pv")
tauxRebond = Navigateur.LireTexte("#element-rebond")
donneesBrutes = {
"date": DateTime.Aujourdhui("yyyy-MM-dd"),
"ca": chiffreAffaires,
"nbCommandes": nombreCommandes,
"panierMoyen": panierMoyen,
"tauxConversion": tauxConversion,
"uv": visiteursUniques,
"pv": pagesVues,
"tauxRebond": tauxRebond
}
Excel.Enregistrer(donneesBrutes, "donnees_ventes_brutes.xlsx")
Excel.Enregistrer(tableauTop10, "top10_produits.xlsx")
La clé est d'ajouter une attente intelligente après chaque navigation pour s'assurer que les données sont complètement chargées avant de les lire.
Étape 2 : Nettoyage et calcul des indicateurs
Les données brutes sont nettoyées pour standardiser les types numériques, puis les calculs de variation par rapport au jour précédent sont effectués.
# Pseudo-code pour le nettoyage et le calcul
donneesBrutes = Excel.Lire("donnees_ventes_brutes.xlsx")
donneesHier = BaseDonnees.Executer("SELECT * FROM rapports_ventes WHERE date = ?", DateTime.Hier())
Fonction NettoyerDonnees(donnees)
donnees.ca = Nombre.Parser(donnees.ca.Remplacer("¥", "").Remplacer(",", ""))
donnees.nbCommandes = Nombre.Parser(donnees.nbCommandes)
donnees.panierMoyen = Nombre.Parser(donnees.panierMoyen.Remplacer("¥", ""))
donnees.tauxConversion = Nombre.Parser(donnees.tauxConversion.Remplacer("%", "")) / 100
donnees.uv = Nombre.Parser(donnees.uv)
donnees.pv = Nombre.Parser(donnees.pv)
donnees.tauxRebond = Nombre.Parser(donnees.tauxRebond.Remplacer("%", "")) / 100
donnees.ratioConversionPages = donnees.pv / donnees.uv
donnees.prixUnitaireMoyen = donnees.ca / donnees.nbCommandes
Retourner donnees
Fin Fonction
donneesAujourdhui = NettoyerDonnees(donneesBrutes)
Fonction CalculerVariations(aujourdhui, hier)
variations = {}
Si hier EstPas Null Alors
variations.ca = (aujourdhui.ca - hier.ca) / hier.ca
variations.commandes = (aujourdhui.nbCommandes - hier.nbCommandes) / hier.nbCommandes
variations.conversion = (aujourdhui.tauxConversion - hier.tauxConversion) / hier.tauxConversion
variations.uv = (aujourdhui.uv - hier.uv) / hier.uv
Sinon
variations.ca, variations.commandes, variations.conversion, variations.uv = 0, 0, 0, 0
Fin Si
Retourner variations
Fin Fonction
variations = CalculerVariations(donneesAujourdhui, donneesHier)
donneesCompletes = FusionnerDictionnaires(donneesAujourdhui, variations)
Excel.Enregistrer(donneesCompletes, "donnees_nettoyees.xlsx")
Étape 3 : Génération du rapport Excel
Un classeur structuré est créé avec plusieurs feuilles :
# Pseudo-code pour générer le rapport
Fonction GenererRapport(donnees, top10)
Classeur = Excel.CreerClasseur("rapport_ventes_quotidien.xlsx")
Excel.RenommerFeuille("Feuil1", "Synthese")
Excel.EcrireCellule("A1", "Rapport de ventes Xiaohongshu - " & donnees.date)
Excel.EcrireCellule("A3", "Indicateurs principaux")
indicateurs = [
["Indicateur", "Valeur", "Variation", "Statut"],
["CA", FormatArgent(donnees.ca), FormatPourcentage(donnees.ca), ObtenirIcone(donnees.ca)],
["Commandes", FormatNombre(donnees.nbCommandes), FormatPourcentage(donnees.commandes), ObtenirIcone(donnees.commandes)],
["Panier moyen", FormatArgent(donnees.panierMoyen), "-", "➡️"],
["Taux conversion", FormatPourcentage(donnees.tauxConversion), FormatPourcentage(donnees.conversion), ObtenirIcone(donnees.conversion)],
["UV", FormatNombre(donnees.uv), FormatPourcentage(donnees.uv), ObtenirIcone(donnees.uv)]
]
Excel.EcrirePlage("A4", indicateurs)
Excel.AjouterFeuille("AnalyseProduits")
Excel.EcrirePlage("A1", top10)
Excel.AjouterFeuille("Tendances")
tendances7Jours = BaseDonnees.Executer("SELECT * FROM rapports_ventes WHERE date >= ?", DateTime.Aujourdhui().AjouterJours(-7))
Excel.EcrirePlage("A1", tendances7Jours)
Excel.AjouterFeuille("Insights")
insights = GenererInsights(donnees, top10, tendances7Jours)
Excel.EcrirePlage("A1", insights)
FormaterRapport()
Excel.Sauvegarder()
Log.Succes("Rapport généré avec succès !")
Fin Fonction
Fonction ObtenirIcone(variation)
Si variation > 0.05 Alors Retourner "🟢"
Si variation > 0 Alors Retourner "🟡"
Si variation < -0.05 Alors Retourner "🔴"
Retourner "🟠"
Fin Fonction
Fonction GenererInsights(donnees, top10, tendances)
liste = []
Si donnees.ca < -0.1 Alors liste.Ajouter("⚠️ Baisse du CA, vérifier le trafic et la conversion.")
Si donnees.tauxConversion < 0.02 Alors liste.Ajouter("⚠️ Taux de conversion faible, optimiser les fiches produits.")
Si donnees.tauxRebond > 0.6 Alors liste.Ajouter("⚠️ Taux de rebond élevé, améliorer l'expérience utilisateur.")
Si top10.Count > 0 Alors
partTop3 = top10.Prendre(3).Somme(article => article.ca) / donnees.ca
Si partTop3 > 0.7 Alors liste.Ajouter("💡 Forte dépendance au top 3, renforcer les produits intermédiaires.")
Fin Si
Si tendances.Count >= 7 Alors
tendance = AnalyserTendance(tendances)
Si tendance == "Baisse" Alors liste.Ajouter("📉 Tendance à la baisse, planifier des actions correctives.")
Sinon Si tendance == "Hausse" Alors liste.Ajouter("📈 Bonne performance, maintenir le rythme.")
Fin Si
Retourner liste
Fin Fonction
Étape 4 : Distribution automatique
Le rapport est envoyé par email, via un webhook interne, et sauvegardé en base de données.
# Pseudo-code pour la distribution
Fonction DistribuerRapport(cheminRapport)
contenuEmail = "Bonjour,\n\nLe rapport de ventes quotidien est disponible en pièce jointe.\nIndicateurs clés :\n- CA : " & donnees.ca & "\n- Commandes : " & donnees.nbCommandes & "\n- Taux de conversion : " & FormatPourcentage(donnees.tauxConversion)
Email.Envoyer(
a: ["manager@societe.fr", "ops@societe.fr"],
sujet: "Rapport de ventes Xiaohongshu - " & donnees.date,
corps: contenuEmail,
piecesJointes: [cheminRapport]
)
messageInterne = {
"msgtype": "markdown",
"markdown": {
"title": "Rapport de ventes",
"text": "### 📊 Rapport ventes " & donnees.date & "\n**CA**: " & FormatArgent(donnees.ca) & " (" & ObtenirIcone(donnees.ca) & " " & FormatPourcentage(donnees.ca) & ")\n**Commandes**: " & FormatNombre(donnees.nbCommandes) & "\n[Voir le rapport complet](chemin_fichier_interne)"
}
}
HTTP.Poster(Config.Lire("webhook_interne"), json=messageInterne)
BaseDonnees.Inserer("rapports_ventes", donnees)
Log.Succes("Rapport distribué avec succès !")
Fin Fonction
Le workflow RPA ainsi implémenté permet de réduire le temps de production du rapport de 2 heures à environ 3 minutes, avec une exactitude de 100% sur les calculs. L'étape suivante consisterait à intégrer un modèle de langage pour générer automatiquement des analyses causales et des prévisions.