Vous êtes sur la page 1sur 88

République Algérienne Démocratique et Politique

Ministère de l’Enseignement Supérieur et de la Recherche Scientifique


Université des Sciences et de la technologie Houari Boumedien

Faculté d’Electronique et d’Informatique Département


d’Informatique

Mémoire de Projet de Fin d’Etudes Master


Master : Mathématique et Informatique Décisionnelles

Théme

Automatisation du flux de données générées par les


publicités Facebook
Présenté par :

YAHIA CHERIF Mohamed Mahdi

Soutenu le .. Juillet 2021 Devant les membres du jury :


REM ERCIEM EN T S

Tout d’abord je tiens à remercier Dieu le tout puissant et miséricordieux,pour la volonté


et la force qu’il m’a donné afin de pouvoir accomplir ce travail.

Je tiens a remercier mon encadreur Dr Z.ALIMAZIGHI pour ses précieux conseils , son
sens de la pédagogie, sa confiance, le temps qu’elle m’a consacré et ses orientations.

Mes vifs remerciements vont également aux membres du jury pour l’intérêt qu’ils ont
porté a notre projet en acceptant d’examiner mon travail et l’évaluer.

Je remercie également ma mère pour son amour et son soutien inconditionnel qui m’a
permis de réaliser mes études et par conséquent ce mémoire.

Je voudrais exprimer ma reconnaissance envers mes amis et collègues Anis, Riad,


Rabie, Souhil, et Karim ; Envers l’équipe Inbound Marketing Algérie spécialement
Mr Monir MATI et Malik MATI pour leurs soutien et l’accueil honoré.

Sans oublié mes cousins Omar El hadj , Hafid , Alla et Aymen qui m’ont
aidé , remonté le morale et et supporté dans toutes les situations.

1
Table des matières

I Marketing et réseaux sociaux 2

I.1 L’influence des reseaux sociaux sur le marketing : . . . . . . . . . . . . . . . 2

I.2 Facebook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

I.3 Facebook marketing : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

I.3.1 Définition d’un lead : . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

I.3.2 Facebook Ads : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

I.4 CRM (Gestion de la Relation Client) : . . . . . . . . . . . . . . . . . . . . . 4

I.4.1 Les CRM et la gestion commerciale : . . . . . . . . . . . . . . . . . . 4

I.4.2 Sendinblue : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

I.5 L’inbound marketing : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

I.5.1 Les mots clés de l’Inbound marketing : . . . . . . . . . . . . . . . . . 5

I.6 Les étapes de l’inbound marketing : . . . . . . . . . . . . . . . . . . . . . . . 8

I.6.1 Attirer des visiteurs sur votre site web : . . . . . . . . . . . . . . . . . 8

I.6.2 Convertir des visiteurs en leads : . . . . . . . . . . . . . . . . . . . . 8

I.6.3 Conclure des leads en clients : . . . . . . . . . . . . . . . . . . . . . . 8

I.6.4 Fidéliser les (futurs) clients : . . . . . . . . . . . . . . . . . . . . . . . 9

I.7 La différence entre l’outbound et l’inbound marketing : . . . . . . . . . . . . 9

I.7.1 L’outbound marketing . . . . . . . . . . . . . . . . . . . . . . . . . . 9

2
I.8 Marketing automation : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

I.8.1 Zapier : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

I.8.2 IFTTT : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

I.8.3 Les API : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

I.8.4 Les Webhooks : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

I.8.5 Les tendances des entreprises : . . . . . . . . . . . . . . . . . . . . . . 15

I.9 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

II L’informatique décisionnelle 17

II.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

II.2 Les systèmes décisionnels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

II.3 Datawarehouse (entrepôt de données) . . . . . . . . . . . . . . . . . . . . . . 18

II.3.1 Définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

II.3.2 Concept de Datamart . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

II.3.3 La modélisation dimensionnelle du Datawarehouse . . . . . . . . . . . 19

II.3.4 La modélisation en étoile . . . . . . . . . . . . . . . . . . . . . . . . . 20

II.4 Schéma d’une architecture BI . . . . . . . . . . . . . . . . . . . . . . . . . . 20

II.5 ETL (Extract-Transform-Load) . . . . . . . . . . . . . . . . . . . . . . . . . 20

II.5.1 Fonctionnement des ETL . . . . . . . . . . . . . . . . . . . . . . . . . 21

II.6 Visualisation de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

II.7 Outils connus de la business intelligence . . . . . . . . . . . . . . . . . . . . 23

2.8 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

III Étude de l’existant 24

III.1 But et Objectifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

III.2 Processus actuel de récolte des prospects . . . . . . . . . . . . . . . . . . . . 24

3
III.2.1 Community managers . . . . . . . . . . . . . . . . . . . . . . . . . . 25

III.2.2 Landing pages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

III.2.3 Formulaires Facebook . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

III.3 Traitement de données et visualisation . . . . . . . . . . . . . . . . . . . . . 25

III.4 Les points forts du système existant . . . . . . . . . . . . . . . . . . . . . . . 26

III.5 Les points faibles du système existant . . . . . . . . . . . . . . . . . . . . . . 26

III.6 Besoins fonctionnels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

III.7 Besoins non fonctionnels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

III.8 Amélioration et Automatisation du processus de récolte . . . . . . . . . . . . 27

III.9 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

IV Conception 29

IV.1 Modélisation des besoins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

IV.1.1 Diagramme de cas d’utilisation . . . . . . . . . . . . . . . . . . . . . 29

IV.2 Diagrammes de séquence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

IV.2.1 Diagramme de séquence  ajouter un profil  . . . . . . . . . . . . . 31

IV.3 Diagramme de séquence  Importation des données vers le CRM  . . . . . 32

IV.3.1 Diagramme de séquence  Alimentation du Datawarehouse  . . . . . 35

IV.4 Conception de l’entrepôt de données . . . . . . . . . . . . . . . . . . . . . . 36

IV.4.1 Les besoins des clients de l’entreprise . . . . . . . . . . . . . . . . . . 36

IV.4.2 Schéma en étoile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

V Réalisation 39

V.1 Outils utilisés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

V.1.1 QGis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

V.1.2 QT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

4
V.1.3 Docker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

V.1.4 RethinkDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

V.1.5 PostgreSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

V.1.6 APACHE Superset . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

V.1.7 DBeaver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

V.2 Matériel utilisé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

V.3 L’installation de docker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

V.4 L’installation de RethinkDB . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

V.5 L’implémentation de l’entrepôt de données . . . . . . . . . . . . . . . . . . . 43

V.5.1 l’installation de PostgreSQL . . . . . . . . . . . . . . . . . . . . . . . 43

V.6 la création d’une application Facebook . . . . . . . . . . . . . . . . . . . . . 46

5.7 L’utilisation de l’api Sendinblue . . . . . . . . . . . . . . . . . . . . . . . . . 50

5.8 Création et hébergement du serveur Webhook . . . . . . . . . . . . . . . . . 53

5.8.1 la création d’une application web python . . . . . . . . . . . . . . . . 53

5.8.2 La réception des notifications . . . . . . . . . . . . . . . . . . . . . . 54

5.8.3 L’envoi vers Sendinblue . . . . . . . . . . . . . . . . . . . . . . . . . . 55

5.9 Mise en oeuvre de l’interface graphique . . . . . . . . . . . . . . . . . . . . . 59

5.9.1 L’envoi des données à l’entrepôt de données . . . . . . . . . . . . . . 62

5.10 Mise en place de l’outil de visualisation . . . . . . . . . . . . . . . . . . . . . 67

5.11 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

5
Table des figures

I.1 L’utilisation des réseaux par les internautes (Janvier 2021) (meta-chart.com) 3

I.2 liste de contacts Sendinblue . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

I.3 Bibliothèque de formulaires . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

I.4 Exemple d’un formulaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

I.5 Les étapes de l’inbound marketing . . . . . . . . . . . . . . . . . . . . . . . . 8

I.6 La différence entre l’outbound et l’inbound marketing . . . . . . . . . . . . . 10

I.7 Fonctionnement d’une API REST : . . . . . . . . . . . . . . . . . . . . . . . 12

I.8 Un prospect récupéré par un a un appel API . . . . . . . . . . . . . . . . . . 13

I.9 Modéle de pagination de l’api Sendinblue . . . . . . . . . . . . . . . . . . . . 14

I.10 l’utilité des Webhooks [13] . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

I.11 l’évolution des webhooks (Google trends) . . . . . . . . . . . . . . . . . . . . 16

II.1 composantes d’une solution BI [15] . . . . . . . . . . . . . . . . . . . . . . . 18

II.2 Modèle en étoile [17] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

II.3 Exemple d’un tableau de bord . . . . . . . . . . . . . . . . . . . . . . . . . . 22

III.1 Fonctionnement actuel de l’entreprise . . . . . . . . . . . . . . . . . . . . . . 26

III.2 Le nouveau système à implémenter . . . . . . . . . . . . . . . . . . . . . . . 28

IV.1 les informations d’un profil . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

IV.2 Diagramme de cas d’utilisation . . . . . . . . . . . . . . . . . . . . . . . . . 31

6
IV.3 la création d’un profil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

IV.4 Récupération des prospects depuis Facebook par lot . . . . . . . . . . . . . . 33

IV.5 Récupération des prospects depuis Facebook en temps réel . . . . . . . . . . 34

IV.6 L’alimentation de l’entrepôt de données . . . . . . . . . . . . . . . . . . . . . 35

IV.7 Schéma en étoile de l’entrepôt de donnée . . . . . . . . . . . . . . . . . . . . 37

IV.8 Le nouveau système détaillé . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

V.1 La vérification du fonctionnement de docker . . . . . . . . . . . . . . . . . . 42

V.2 L’interface web rethinkDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

V.3 Connecter Postgres à DBeaver . . . . . . . . . . . . . . . . . . . . . . . . . . 44

V.4 L’interface DBeaver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

V.5 Schéma de l’entrepôt de données . . . . . . . . . . . . . . . . . . . . . . . . . 45

V.6 Le choix du domaine de l’application . . . . . . . . . . . . . . . . . . . . . . 47

V.7 Remplissage des information de l’application . . . . . . . . . . . . . . . . . . 47

V.8 demande d’un APP review . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

V.9 autorisations approuvées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

V.10 filtrage des prospects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

5.12 Le nom d’un formulaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

5.13 Autoriser les webhooks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

5.14 ajouter le lien de call back . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

5.15 ajouter la terminaison leadgen . . . . . . . . . . . . . . . . . . . . . . . . . . 50

5.16 le résultat de la requête 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

5.17 le résultat de la requête 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

5.18 La création du sous-domaine automate . . . . . . . . . . . . . . . . . . . . . 53

5.19 La création d’une application python . . . . . . . . . . . . . . . . . . . . . . 53

5.20 L’installation des bibliothèques nécessaires . . . . . . . . . . . . . . . . . . . 54

7
5.21 L’importation des scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

5.22 le log d’une opération . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

5.23 La sélection des pages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

5.24 Accepter les autorisations . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

5.25 L’affichage des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

5.26 L’outil QT designer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

5.27 L’écran ’accueil de l’application . . . . . . . . . . . . . . . . . . . . . . . . . 60

5.28 Remplissage des attributs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

5.29 l’écran d’ajout de profils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

5.30 Nombre de contacts d’une liste . . . . . . . . . . . . . . . . . . . . . . . . . . 62

5.31 Se connecter à l’entrepôt de données . . . . . . . . . . . . . . . . . . . . . . 67

5.32 les métriques des Data-sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

5.33 les colonnes du Data-set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

5.34 la préservation de la qualité de la carte . . . . . . . . . . . . . . . . . . . . . 69

5.35 Les colonnes Geojson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

5.36 table de données Geojson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

5.37 Graphique du nombre de prospects par jour . . . . . . . . . . . . . . . . . . 71

5.38 graphique de la colonne Extra . . . . . . . . . . . . . . . . . . . . . . . . . . 71

5.39 graphique de la distribution démographique . . . . . . . . . . . . . . . . . . 72

5.40 Le tableau de bord final . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

5.41 Filtrage des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

5.42 Isolation des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

8
Liste des acronymes

BI : Business Intelligence
B2B : Business to business
Ads : Advertising (Publicité)
CM : Community managment
CRM : Contact Ressources management
SMA : Social médial advertising
IFTTT : If this than that
ETL : Extract Transform Load
DW : DataWarehouse (Entrepôt de données)
SGBD : Système Gestion de Base de Données
API : Application Programming Interface
SQL : structured Query Language
SDK : Software developement kit
NoSQl : Not Only Structured Query Language

9
Introduction générale

L’informatique est de plus en plus présente dans le monde du Marketing en Algérie, le


digital marketing était inexistant en 2014 . Ce dernier est devenu un champ de bataille en
2021 et de nouvelles entreprises algériennes apparaissent jour après jour, offrant des solution
et des services similaires aux services d’Inbound Marketing Algérie (IMA).

Inbound Marketing Algérie est une entreprise B2B spécialisée dans l’inbound marke-
ting qui a pour but de fournir des solutions innovantes et créatives de communication di-
gitale. L’entreprise propose des applications mobiles , production de vidéo , publicités et
hébergement de sites web.

L’augmentation du nombre de clients a fait que l’entreprise a besoin de développer des


outils pour faire face aux problèmes qu’elle rencontre , et qui se résume à : rapidité, précision,
et concurrence.

le fonctionnement principal de l’entreprise sur la récupération des données des publicités


Facebook puis leur envoi aux CRM des entreprises clientes. Ce processus est lent et l’entreprise
ne dispose pas d’un outil automatique ce qui réduit la rapidité de l’entreprise. De plus, même
si Facebook propose des outils pour analyser ces données, il analyse les publicités une par
une et l’entreprise doit comparer les résultats pour en tirer la meilleure stratégie marketing
pour un client.

Pour faire face a ses concurrents, IMA a besoin de développer un système décisionnel
pour avoir une vue globale sur les données des entreprise (Business Intelligence), tout en
automatisant son flux de données (Marketing automation).

Ce projet vise a développer un système décisionnel qui automatise le flux de données


des formulaires de prospects Facebook puis alimente un entrepôt de données pour les visua-
liser dans un tableau de bord, ce qui permettra a l’entreprise de mieux se concentrer sur
l’optimisation du ciblage publicitaire et l’élaboration des stratégies marketing.

Le travail réalisé dans ce mémoire est organisé en cinq chapitres. Les deux premiers sont
consacrés à des généralités sur Le marketing, la Business Intelligence et l’automatisation
du marketing. Le suivant sera consacré à l’analyse de l’existant , voir les points forts et
faibles de l’entreprise,et proposer une solution pour l’améliorer.Les deux derniers chapitres
sont consacré pour la conception et la réalisation du nouveau système suivi d’une conclusion
finale sur le développement de ce projet.

1
Chapitre I

Marketing et réseaux sociaux

I.1 L’influence des reseaux sociaux sur le marketing :

Selon la 2ème édition du  Baromètre Social Selling  menée par La Poste Solutions
Business et l’agence digitale Intuitif, les réseaux sociaux n’ont jamais autant joué leur rôle
d’influence qu’aujourd’hui, et ce même en Business to Business.

D’après cette étude, le nombre de décideurs ayant acheté un produit ou un service suite à
une sollicitation sur les réseaux sociaux a été multiplié par trois en 2017 et plus de la moitié
des décideurs B2B reconnaissent avoir déjà été influencés par un article ou une publication
sur les réseaux sociaux au moment d’acheter. . . En 2018, 6% des répondants déclaraient
acheter un produit ou un service suite à une sollicitation via les réseaux sociaux, ils sont 21%
en 2019.

Les moyens indirects, comme la lecture d’articles de blogs et de postes, sont d’autant plus
influents : 57% des décideurs déclarent avoir déjà été poussés à l’acte d’achat B2B, par un
article ou une publication sur les réseaux sociaux (+ 1 point par rapport à 2018).

Les réseaux sociaux constituent un levier particulièrement efficace chez les commerciaux :
71% des décideurs interrogés à cette fonction estiment que les réseaux sociaux les aident dans
leur business. Aujourd’hui, les achats réalisés suite à des prises de contact sur les réseaux
concernent essentiellement les activités de services. Ils représentent 2/3 d’entre eux.

Les softwares et produits matériels arrivent ensuite. En termes de montants, 88% des
ventes s’élèvent encore à moins de 10K€. [1]

2
I.2 Facebook

Facebook est un réseau social en ligne qui permet à ses utilisateurs de publier des images,
des photos, des vidéos, des fichiers et documents, d’échanger des messages, joindre et créer
des groupes et d’utiliser une variété d’applications sur une variété d’appareils.[2]

* Troisième site web le plus visité au monde selon Alexa (assistante vocale d’ Amazone).

* 80 % de ses utilisateurs consultent le site tous les jours.

* Facebook représente 19 % du temps passé sur un appareil mobile :

Figure I.1 – L’utilisation des réseaux par les internautes (Janvier 2021) (meta-chart.com)

I.3 Facebook marketing :

I.3.1 Définition d’un lead :

Selon e-marketing.fr,  un lead est un prospect sur lequel l’affilieur dispose d’assez d’in-
formations pour le recontacter et le convertir en client. .

3
I.3.2 Facebook Ads :

Suite à une audience potentielle colossale pour les annonceurs, couplée à une force de
ciblage sans égal, Facebook ads est une arme de génération de leads massive très prisée des
entreprises. Et, alors que les professionnels du marketing sont constamment en recherche de
nouvelles façons de générer du lead qualifié, Facebook propose dans cette optique spécifique
un outil extrêmement efficace Facebook leads Ads.
[3]

L’objectif des Facebook Lead Ads est avant tout de récupérer les informations personnelles
de contact de prospects potentiels.

I.4 CRM (Gestion de la Relation Client) :

CRM est l’acronyme de ”Customer Relationship Management” ou ”Gestion de la Relation


Client”. Le CRM regroupe l’ensemble des dispositifs ou opérations de marketing ou de support
ayant pour but d’optimiser la qualité de la relation client, de fidéliser et de maximiser le chiffre
d’affaires ou la marge par client.

Dans un sens plus restrictif, le CRM peut désigner l’ensemble du dispositif informatique
consacré à la gestion de la relation client. Le CRM est alors la solution informatique per-
mettant de gérer l’ensemble des informations relatives aux clients et prospects et l’ensemble
des interactions menées avec ces individus (contacts entrants et sortants). Les outils de cam-
pagnes marketing peuvent alors être connectés à la solution de CRM ou y être intégrés dans
une logique de suite Marketing ou suite CRM.[4]

I.4.1 Les CRM et la gestion commerciale :

L’utilisation d’un CRM permet à l’entreprise :

• La vision complète des clients et prospects

• La gestion et suivi des devis commerciaux

• Des prévisions de ventes

• Une organisation efficace des journées de travail

• La gestion des actions marketing

• Le portail client (FAQ, Devis en ligne. . . )

4
I.4.2 Sendinblue :

Sendinblue est une entreprise française qui édite une suite de logiciel ”software as a
service” à destination des petites et moyennes entreprises. Elle permet de recontacter des
clients par courriers électroniques ou SMS.

Figure I.2 – liste de contacts Sendinblue

I.5 L’inbound marketing :

L’inbound marketing repose sur une stratégie de création de contenu qui permet d’attirer
des visiteurs afin de les convertir en leads puis en clients, grâce à des techniques telles que le
marketing automation, l’engagement sur les réseaux sociaux et la création de contenu. Cette
stratégie marketing est facilitée par l’intégration et l’adoption d’outils de visualisation tout-
en-un qui permettent de prouver le retour sur investissement (ROI) des efforts marketing.

I.5.1 Les mots clés de l’Inbound marketing :

Le contenu :

Le contenu souligne l’expertise et l’identifie comme un acteur référent dans son domaine.
Il se compose d’articles de blog, vidéos, infographies.

5
Le référencement naturel ou SEO :

C’est l’une des techniques mises en œuvre pour améliorer la position d’un site web sur
les pages de résultats des moteurs de recherche SEO (Search engine optimizer) et Inbound
sont inséparables, La création de contenus est inutile si les règles de base de référencement
ne sont pas respectées pour être référencé sur Google afin que les internautes puissent vous
trouver.

Les newsletters :

Une newsletter est une lettre d’information envoyée régulièrement par e-mail à une liste de
diffusion, c’est-à-dire à des abonnés. En marketing, une newsletter est à vocation commerciale.
Elle peut servir à informer les abonnés de certaines promotions ou opérations commerciales
spéciales, ou bien comporter un contenu éditorial informatif.

L’influence et les relations publiques :

L’influence et les relations publiques permettent de construire une image auprès des per-
sonnes influentes et de leurs communautés. Un travail qui prend nécessite une grande maı̂trise
des codes sociaux, mais également des normes qui régissent le marketing d’influence.

Les réseaux sociaux et le SMA :

Les réseaux sociaux et le SMA (Social Media Advertising) constituent un levier important.
Il existe même des formats publicitaires spécifiquement orientés vers la génération de leads.
Avec un bouton d’appel à l’action, l’internaute peut s’inscrire à une newsletter ou remplir
un formulaire en quelques secondes grâce aux informations personnelles déjà partagées.

Figure I.3 – Bibliothèque de formulaires

6
Figure I.4 – Exemple d’un formulaire

7
I.6 Les étapes de l’inbound marketing :

L’inbound marketing constituée de quatre étapes bien distinctes

Figure I.5 – Les étapes de l’inbound marketing

I.6.1 Attirer des visiteurs sur votre site web :

Afin d’attirer ces visiteurs sur un site web, plusieurs outils et techniques peuvent être
utilisés, comme le, la création de contenu ou le partage sur les réseaux sociaux. Les réseaux
sociaux sont des endroits stratégiques pour partager du contenu, tel qu’un article de blog.

I.6.2 Convertir des visiteurs en leads :

Le formulaire est le moyen utilisé pour qualifier un visiteur en lead. En remplissant le


formulaire, les prospects donnent des indications sur qui ils sont et ce qui les intéressent. Le
recueil de ces informations permettra de mieux segmenter les bases de données.

I.6.3 Conclure des leads en clients :

Dans cette troisième étape, il s’agit d’accompagner le prospect dans son processus de
décision jusqu’à la vente, pour en faire un client.

C’est une étape qui peut combiner des moyens traditionnels (téléphone, rendez-vous, etc.)
et digitaux (newsletter, marketing automation, etc.).

Les réseaux sociaux ne sont plus simplement utilisés pour attirer des visiteurs sur un

8
site web mais également pour entretenir une relation avec une audience. De nombreuses
marques ont par exemple mis en place un support client sur les réseaux sociaux. Pour attirer
naturellement les visiteurs vers votre marque, il vous faut un contenu informatif, de qualité,
intéressant, mais pas intéressé, qui sera naturellement trouvé par le consommateur à travers
les moteurs de recherche et les réseaux sociaux.

I.6.4 Fidéliser les (futurs) clients :

Les réseaux sociaux ne sont plus simplement utilisés pour attirer des visiteurs sur un
site web mais également pour entretenir une relation avec une audience. De nombreuses
marques ont par exemple mis en place un support client sur les réseaux sociaux. Pour attirer
naturellement les visiteurs vers votre marque, il vous faut un contenu informatif, de qualité,
intéressant, mais pas intéressé, qui sera naturellement trouvé par le consommateur à travers
les moteurs de recherche et les réseaux sociaux.[5]

I.7 La différence entre l’outbound et l’inbound marke-


ting :

I.7.1 L’outbound marketing

L’outbound marketing - marketing sortant - consiste à aller chercher le consommateur,


en poussant des actions marketing et commerciales vers lui, en allant le chercher là où il
se trouve voire même en le chassant dans certains cas de figure, lorsque les stratégies sont
agressives. Du push marketing en somme.

En inbound la marque développe du contenu dont la finalité est d’intéresser et donc


d’appâter le consommateur, le lead ou le client.

En outbound, la marque envoie des messages marketing, promotionnels et publicitaires


au client.

L’inbound propose, le consommateur dispose. A l’inverse, l’outbound impose. [6]

9
Figure I.6 – La différence entre l’outbound et l’inbound marketing

I.8 Marketing automation :

Le marketing automation est devenue une aide précieuse dans la gestion et l’évolution
d’un site internet, mais également pour de nombreuses actions en marketing digital B2B
quand il s’agit de générer des leads.

Si on peut le traduire par l’ensemble des tâches automatisées au sein du marketing digital,
visant à optimiser et à générer de la visibilité, ainsi que des leads en marketing B2B, il est
plus complet et complexe qu’il n’y parait.

L’automatisation des tâches tel que l’emailing, ou la personnalisation de sa communi-


cation avec ses prospects et ses clients, font l’objet de solutions de marketing automation
proposées par de nombreux acteurs et éditeurs du marketing digital, parmi lesquels Sendin-
blue, Companeo...[7]

Les platforms les plus utilisés pour le marketing automation sont :

10
I.8.1 Zapier :

Zapier est un outil qui vous aide à automatiser les tâches répétitives entre deux ou plu-
sieurs applications - aucun code n’est nécessaire. Lorsqu’un événement se produit dans une
application, Zapier peut dire à une autre application d’effectuer (ou de faire) une action
particulière[8]

I.8.2 IFTTT :

Lancé en 2010, IFTTT est un service d’interconnexion dans le cloud. Cet outil facile
d’utilisation met en relation les services et plateformes les plus populaires sur le web, ainsi
que de nombreux objets connectés, et déclenche des actions automatisées quand un événement
se produit. D’où le nom du site, qui signifie ”If This Then That”[9]

Ces platforms d’automatisation utilisent principalement deux technologies connus dans


le web , les API et les Webhooks,

I.8.3 Les API :

Une API (interface de programme d’application) est un ensemble de règles permettant à


différents programmes de communiquer entre eux. Il décrit la manière appropriée pour un
développeur de logiciels de composer un programme sur un serveur qui communique avec
diverses applications clientes.

L’intégration d’API fait référence à quelques applications (deux ou plus) interconnectées


les unes aux autres via leurs API pour échanger des données et exécuter une fonction com-
mune. Ainsi, permettant une interaction entre les applications.

Définition d’une API Rest :

Introduit pour la première fois par Roy Fielding en 2000, RESTful est un style architec-
tural et une méthodologie fréquemment utilisée dans le développement de services Internet,
tels que les systèmes hypermédia distribués.

La forme complète de l’API REST est l’interface de programmation d’application de


transfert d’état REpresentational. Cela signifie que lorsqu’une API RESTful est appelée, le
serveur transférer à représentation des ressources demandées État au système client.

11
Figure I.7 – Fonctionnement d’une API REST :

Termes clés d’une API :

Avant de plonger dans les principes directeurs de la conception des API REST, discutons
brièvement de deux termes clés client et ressource :

Le client : le matériel ou le logiciel qui utilise l’API rendu accessible par le serveur. Par
exemple, lorsque vous visitez le site Web de Facebook, votre navigateur est le client qui
appelle l’API Facebook et utilise les données renvoyées pour afficher des informations sur
votre écran.

Une ressource : peut être n’importe quel objet sur lequel l’API peut offrir des informations.
Par exemple, dans le cas d’une API Facebook, une ressource peut être un utilisateur, un lead
ou tout autre type de média comme une image. Chaque ressource a un identifiant distinct
qui peut être un nom ou un numéro.[10]

La ressource la plus intéressante pour L’entreprise IMA est les prospects des formulaires
Facebook.

12
Figure I.8 – Un prospect récupéré par un a un appel API

La pagination dans les API :

La plupart des points de terminaison (le lien d’une ressource API et aussi appelé endpoint)
qui retournent une liste d’entités devront avoir une sorte de pagination. Sans pagination, une
simple recherche pourrait renvoyer des millions, voire des milliards de résultats, provoquant
un trafic réseau superflu.

La pagination nécessite un ordre implicite. Par défaut, il peut s’agir de l’identifiant unique
de l’élément, mais il peut s’agir d’autres champs classés tels qu’une date de création.[11]

La pagination diffère d’une api a une autre, dans l’exemple de Facebook, l’accès à une page
suivante est obtenu en rajoutant le paramètre  after  avec sa valeur de la page actuelle aux
paramètres de la requête api get ou post, la valeur du champs after est vide dans la dernière
page de l’api.

Dans le cas de Sendinblue, la pagination se fait à base d’offset, l’utilisateur limite le


nombre de contacts (prospects) à récupérer d’une requête api (max 500), et pour passer à
la page suivant, l’utilisateur augmente la valeur du paramètre offset pour récupérer les n
prochains contacts, la pagination s’arrête quand l’utilisateur ne reçoit aucun contact d’une
requête api.

13
Figure I.9 – Modéle de pagination de l’api Sendinblue

I.8.4 Les Webhooks :

Un Webhook est une notification d’événement transmise via HTTP. Il est généralement
envoyé sous la forme d’une requête POST, qui contient des données ”enregistrées” d’une
ressource spécifique.

La requête POST est intercepté par un URL appelé callback url,et ses données sont ana-
lysées et traités par le script correspondant sur un le serveur web. Le script peut être écrit
dans l’un des nombreux langages de script côté serveur, tels que Python, Il peut effectuer
une ou plusieurs actions, telles que sauvegarder les données dans un répertoire (CRM par
exemple), envoyer les informations par courrier électronique à une adresse spécifique ou ren-
voyer de nouvelles données à la source.

Les Webhook sont un outil efficace, mais ils nécessitent une connexion Internet entre la
source de données et le serveur Web pour fonctionner. En outre, un script doit être présent
sur le serveur au niveau de l’URL de destination et il doit être capable de reconnaı̂tre et
d’analyser les données POST. Si la connexion Internet ou le script n’est pas disponible, le
Webhook ne fonctionnera pas.[12]

L’utilité des webhooks :

Sans webhooks, le système ou l’application doit envoyer des requêtes régulièrement a une
API pour avoir de nouvelles données, et cela met une grande charge sur le serveur si le nombre
d’utilisateurs augmente. Donc l’utilité des webhooks et de diminuer la charge en envoyant
une notification à l’application au moment où une nouvelle donnée demandée par l’utilisateur
arrive.

14
Figure I.10 – l’utilité des Webhooks [13]

I.8.5 Les tendances des entreprises :

Selon Google trends, les nouvelles entreprises commencent de plus en plus à développer
eux-mêmes leurs outils de marketing automation plutôt que d’utiliser un outil comme IFTTT
, automate.io ou zapier car les tarifications de ces derniers ne sont ni équilibrées ni accessible.
Ce qui n’aide pas les petites et les nouvelles entreprises. De plus les webhooks et les APIs
sont de plus en plus utilisés car on remarque une amélioration des documentations des ses
derniers.

15
Figure I.11 – l’évolution des webhooks (Google trends)

I.9 Conclusion

Dans ce chapitre on a défini le marketing, la relation entre ce dernier et les réseaux


sociaux, ainsi que l’automatisation du marketing et les outils utilisés.Ensuite on a expliqué
le fonctionnement des API et Webhooks et la différence entre eux.

Dans le chapitre suivants on traitera le sujet de l’informatique décisionnelle, les entrepôts


de données, les ETL et le processus de la BI.

16
Chapitre II

L’informatique décisionnelle

II.1 Introduction

Le terme de informatique décisionnelle ou Business Intelligence est apparu dans un article


intitulé  A Business Intelligence System , publié dans le IBM Journal en octobre 1958.
Son auteur, Hans-Peter Luhn, un ingénieur du constructeur, y expliquait que la Business
Intelligence  utilise des ordinateurs pour coder et résumer des documents de manière à
créer des informations utiles pour gérer les différents  action points  d’une organisation.
 On trouve bien, dans cette toute première définition, l’ADN de la Business Intelligence :

améliorer la prise de décision en se basant sur des données traitées par des machines et des
algorithmes.[14]

II.2 Les systèmes décisionnels

Un système décisionnel est un ensemble d’applications, d’infrastructure, d’outils et de


bonnes pratiques qui permettent l’analyse de données dans le but d’améliorer les gains et la
précision des décisions au sein d’une entreprise. Le schéma générique d’une solution BI est
représenté par :

17
Figure II.1 – composantes d’une solution BI [15]

II.3 Datawarehouse (entrepôt de données)

II.3.1 Définition

Il recueille des données de sources variées et hétérogènes dans le but principal de soutenir
l’analyse on line et faciliter le processus de prise de décision. En matière d’intégration dans le
système de données existant, le fonctionnement du Datawarehouse est basé sur le processus
ETL permettant de charger les données issues des différentes applications.

D’un point de vue plus technique, un Datawarehouse un ensemble de données orientées


sujet, intégrées, non volatiles et variables dans le temps.

• Orienté sur le sujet : Organisé par thème, peut être utilisé pour n’importe quel secteur
de l’entreprise.

• Intégré :les données récupérées de sources hétérogènes internes ou externes sont intégrées
au Datawarehouse. Pour cela, il est nécessaire de les mettre en forme et de les unifier pour
garantir une certaine cohérence.

• Variante temporelle : Les anciennes données sont également conservées dans le Data-
warehouse, contrairement à certains des systèmes transactionnels traditionnels où seules les
données les plus récentes sont stockées. Cela permet de visualiser l’évolution dans le temps
des différentes données.

• Non volatile : Les données une fois stockées dans l’entrepôt de données ne peuvent
jamais être modifiées.

18
II.3.2 Concept de Datamart

Un Datamart est souvent le sous-ensemble d’un Datawarehouse. Tandis que le Datawa-


rehouse couvre plusieurs sujets, un Datamart est spécialisé sur un seul thème.

Il est conçu pour accéder plus facilement à des données spécifiques. En entreprise, les
informations d’un Datamart ciblent un métier. Il existe, par exemple, des Datamarts com-
merciaux constitués de données ciblées, organisées et regroupées. [16]

II.3.3 La modélisation dimensionnelle du Datawarehouse

Dans un Datawarehouse (et au niveau de chaque Datamart), les données et leurs relations
sont organisées suivant un modèle de données spécifique. Le choix du modèle de données
définit le design du Datawarehouse. Il existait trois modélisations possibles :

• La modélisation en étoile,

• La modélisation en flocons,

• La modélisation en constellation.

Les trois structures reposent sur deux types de tables, tables de dimensions et tables de
faits

Tables de dimensions

Une dimension est une table qui contient les axes d’analyse (les dimensions) selon lesquels
on veut étudier des données observables (les faits) qui, soumises à une analyse multidimen-
sionnelle, donnent aux utilisateurs des renseignements nécessaires à la prise de décision.

Tables de faits

Une table de fait est une table qui contient les données observables (les faits) que l’on
possède sur un sujet et que l’on veut étudier, selon divers axes d’analyse (les dimensions).
Les  faits , dans un entrepôt de données, sont normalement numériques, puisque d’ordre
quantitatif. Il peut s’agir du montant en argent des ventes, du nombre d’unités vendues d’un
produit, etc.

19
II.3.4 La modélisation en étoile

Le modèle en étoile est le modèle le plus simple et celui qui est le plus couramment utilisé
dans le design des Datawarehouses. Le schéma ci-dessus permet de comprendre l’origine de
cette appellation  en étoile .

Figure II.2 – Modèle en étoile [17]

II.4 Schéma d’une architecture BI

II.5 ETL (Extract-Transform-Load)

Aussi appelé extracto-chargeur, Il s’agit d’une technologie informatique intelligente per-


mettant d’effectuer des synchronisations massives d’information d’une source de données
vers une autre. Selon le contexte, on est amené à exploiter différentes fonctions, souvent com-
binées entre elles :  extraction ,  transformation ,  constitution  ou  conversion ,
 alimentation .

20
II.5.1 Fonctionnement des ETL

Extraction

L’objectif d’ETL est de produire des données propres, faciles d’accès et qui peuvent être
exploitées efficacement par l’analytique, l’informatique décisionnelle et/ou les opérations com-
merciales. Les données brutes peuvent être extraites de différentes sources.

Transformation

L’étape de transformation du processus ETL est celle des opérations les plus essentielles.
L’opération la plus importante de l’étape de transformation consiste à appliquer aux données
brutes les règles internes de l’entreprise de manière à répondre aux exigences en matière
de reporting : les données brutes sont nettoyées et converties aux formats de rapport qui
conviennent.

Chargement

La dernière étape du processus ETL standard consiste à charger les données extraites et
transformées dans leur nouvel emplacement. En général, les Datawarehouse supportent deux
modes pour le chargement des données : chargement complet et chargement incrémentiel.[15]

II.6 Visualisation de données

Les données d’un entrepôt de données ne sont pas compréhensible par un utilisateur final,
pour cela,La visualisation de données est une couche supplémentaire est indispensable pour
l’informatique décisionnelle.

La visualisation de données est la science de représenter des données sous une forme
visuellement compréhensible, qu’il s’agisse d’histogrammes , cartographie ou tableaux. Le
résultat final est généralement représenté dans un tableau de bord regroupant les différents
formes. Elle permet aux entreprises de faire face au changements de tendances rapidement
et avec une grande précision.

21
Figure II.3 – Exemple d’un tableau de bord

22
II.7 Outils connus de la business intelligence

Les outils décisionnels s’intègrent de plus en plus dans les entreprises, et de plus en plus
d’outils sont développés pour faciliter cette intégration. Les outils les plus utilisés sont listés
dans cette section.

SGBD/Datawarehouse

— Oracle
— MS SQL Server
— IBM DB2
— Sybase
— MySQL
— PostgreSQL

ETL

— Informatica Power center


— Talend
— Oracle data integration
— Pentaho data integration (open source)
— Apache Airflow (open source)

Visualisation de données

— PowerBI
— QliKview
— Tableau Software
— Apache Superset (open source)

2.8 Conclusion

Dans ce chapitre on a présenté les aspects les plus importants de l’informatique décisionnelle,
les schémas d’un entrepôt de données, les ETLs ainsi que la visualisation de données et son
utilité. Ensuite on a finalisé ce chapitre par une liste d’outils qui peuvent être utilisé pour
construire un système décisionnel complet.

Dans le chapitre suivant on va entamer la phase de conception du système décisionnel,


le choix des dimension de l’entrepôt de données et l’acheminement des données de Facebook
jusqu’au visualisation.

23
Chapitre III

Étude de l’existant

Introduction

Cette phase consiste à comprendre le contexte du système,analyser ses points faibles et


forts et proposer une structure d’un nouveau système pour l’entreprise .

III.1 But et Objectifs

L’analyse de l’existant permet de comprendre la nature du système actuel, décrit la solu-


tion présente du domaine d’étude au terme d’organisation.

Le but de l’analyse de l’existant est la recherche des points forts et des points faibles du
système existant. Ainsi, l’analyse de l’existant fait l’état de lieux du système actuel.

III.2 Processus actuel de récolte des prospects

l’équipe IMA se compose de :

Développeurs web : création et modification des sites web.

Graphiste/designer : conception des chartes graphique.

Ads Manager : création, gestion et analyse des publicités Facebook.

Service commerciale : faire connaı̂tre l’entreprise et récupérer de nouveaux clients.

24
Community manager : gestion de la communauté d’une entreprise cliente (répondre
aux messages et commentaires des réseaux sociaux, élaborer de nouvelles publications et
posts).

Les prospects sont obtenus de trois sources différentes :

III.2.1 Community managers

Suite à des publications Facebook, les clients peuvent appeler directement au lieu de
remplir les formulaires,puis les Community managers les insèrent manuellement dans le CRM.

III.2.2 Landing pages

Pour chaque nouveau Produit/service d’une entreprise cliente, Inbound marketing Algérie
crée une landing page.

La landing page est hébergée dans un serveur dédié d’Inbound marketing Algérie.

les formulaires de ces landing pages sont connecté a l’api Sendinblue et les données sont
automatiquement envoyées vers le CRM.

III.2.3 Formulaires Facebook

En utilisant Facebook Ads, on peut attacher un formulaire a une publication, une fois
qu’un internaute clique, une fenêtre ”popup” s’affiche avec les informations à remplir. Ces
prospects sont les plus intéressants pour l’entreprise car ils permettent l’utilisation de l’une
des fonctionnalités Facebook  Facebook Lookalike  ou audiences similaires . Son objectif
est de toucher de nouvelles personnes susceptibles d’être intéressées par votre entreprise en
raison de leurs points communs avec vos meilleurs clients actuels.

III.3 Traitement de données et visualisation

L’entreprise ne dispose actuellement pas d’un moyen automatique de traitement et visua-


lisation des données des prospects récoltés. Nous pouvons résumer le fonctionnement actuelle
de l’entreprise par le schéma suivant.

25
Figure III.1 – Fonctionnement actuel de l’entreprise

III.4 Les points forts du système existant


— La diversité des stratégies de récolte de données permet de toucher plus de clients
— La transparence : les clients d’inbound marketing ont Accès aux prospects

III.5 Les points faibles du système existant


— l’absence d’une base de données et des données historisées.
— L’analyse se fait juste sur les données générées par les prospects Facebook et non pas
par les landing pages et les insertions manuelles.
— L’absence d’un tableau de bord global.

III.6 Besoins fonctionnels

Les besoins fonctionnels de l’entreprise sont :


— Une application permettant l’importation automatique des prospects.
— La visualisation du tableau de bord.
— Création de multiples profils d’accès au tableau de bord pour les clients.
— L’importation des nouveaux prospects par lot.
— L’importation des nouveaux prospects en temps réel.

26
III.7 Besoins non fonctionnels

Le système à réaliser doit respecter les besoins suivants


— Simplicité : La simplicité d’utilisation des services implémentés.
— Performance : l’importation des prospects ne doit pas prendre un temps considérable.
— Fiabilité : Les informations apportées par l’application doivent être fiables et sûres.
— Centralisation : La centralisation de l’administration et la visualisation.

III.8 Amélioration et Automatisation du processus de


récolte

L’entreprise vise à développer une application qui permet la communication entre les
listes Sendinblue et les formulaires de Facebook en connectant les deux via deux technologies
différentes.

Chaque entreprise peut utiliser plus d’un seul formulaire Facebook et plus d’une seule liste
Sendinblue. L’application va permettre de connecter un formulaire Facebook a une liste Sen-
dinblue et transmettre les nouveaux prospects après traitement pour assurer la compatibilité
des données.

L’application doit récupérer les prospects envoyés depuis les landing pages et les CM les
ajouter aux prospects des formulaires Facebook et les préparer pour les envoyer à un entrepôt
de données.

Cette centralisation de données rapporte à l’entreprise d’avoir une vue globale, et permet
de comparer les méthodes utilisées pour en extraire la plus adaptée pour ses clients.

Le schéma suivant montre les modifications du processus existant pour son amélioration.

27
Figure III.2 – Le nouveau système à implémenter

III.9 Conclusion

Á l’issue de cette étape j’ai exprimé les objectifs attendus du futur système à concevoir,Ce
qui va nous permettre de passer à la prochaine étape intitulée ”conception” que nous allons
détailler dans le chapitre suivant.

28
Chapitre IV

Conception

Introduction

Avant de se lancer dans le développement , Il s’agit de déterminer les fonctionnalités et


les acteurs les plus pertinents, et d’identifier les cas d’utilisation initiaux,et les séquences les
plus importantes dans l’application.

IV.1 Modélisation des besoins

La recherche ciblée des besoins fonctionnels, est considérée nécessaire avant d’entamer la
conception afin d’obtenir une vue globale sur les exigences du système.

IV.1.1 Diagramme de cas d’utilisation

La connaissance des fonctionnalités à implémenter est primordiale pour établir le dia-


gramme de cas d’utilisation de l’application.

Ce diagramme décrit le cas d’utilisation du système (l’application qui permet d’impor-


ter et exporter les données, et le serveur de visualisation) Les deux acteurs principaux sont
l’administrateur, qui peut être le gérant de l’entreprise ou une personne chargée du trans-
fert de prospects de Facebook au CRM et l’alimentation régulière de l’entrepôt de données
(Administration)

Le deuxième acteur est le gérant ou la personne responsable d’analyse de données pour


l’entreprise cliente (B2B Customer)

29
Le système est composé d’une application bureau qui permet de créer des profils et envoyer
les prospects et un serveur contenant l’entrepôt de données et l’outil de visualisation de
données

Pour l’administration les cas d’utilisations sont :


— Pouvoir gérer les profils de l’application (ajouter, supprimer, modifier)
Un profil est un enregistrement qui relie les informations des trois services (Facebook
api, Sendinblue api et le datawarehouse) Les enregistrements seront sauvegardés dans
une base de données NoSQL (rethinkDB) hébergé dans un serveur sous la forme
suivante :

Figure IV.1 – les informations d’un profil

— Importer les contacts d’un seul profil


— Importer les contacts de tous les profils à la fois
— Visualiser les tableaux de bord
— Exporter les tableaux de bord
Pour l’entreprise cliente, le cas d’utilisation est : Visualiser le tableau de bord contenant que
les données exclusives à cette entreprise

30
Figure IV.2 – Diagramme de cas d’utilisation

IV.2 Diagrammes de séquence

IV.2.1 Diagramme de séquence  ajouter un profil 

L’ajout d’un profil est l’étape qui se fait juste après la création d’une liste dans le CRM
Sendinblue et le paramétrage d’une publicité Facebook, On récupère les jetons des deux apis
(Facebook API et Sendinblue API) et les intègre dans l’application.

L’application affiche ensuite les Attributs de la liste CRM et le formulaire Facebook, Il


suffit de les trier dans le même ordre (mappage d’attributs).

On choisit le type d’importation des prospects (par lot / Streaming) ; L’application sau-
vegarde le profil dans une BDD Nosql (rethinkDB) et l’ajoute à la dimension f2sib profile
dans l’entrepôt de données.

31
Figure IV.3 – la création d’un profil

Mappage des attributs

Le mappage de données consiste à extraire des champs de données d’un ou plusieurs fi-
chiers source et à les faire correspondre à leurs champs cibles associés dans la destination.
L’intégration de données ou le mappage ETL permet de consolider les données en les extra-
yant, en les transformant et en les chargeant dans un entrepôt de données. La première étape
d’ETL est le mappage des données. Ces données mappées peuvent ensuite être utilisées pour
produire des informations pertinentes susceptibles d’améliorer l’efficacité de l’entreprise.

IV.3 Diagramme de séquence  Importation des données


vers le CRM 

L’intégration par lot

Une fois que l’administrateur sélectionne un profil, L’application récupère les données de
la base de données des profils, qui contient les jetons pour les API Facebook et Sendinblue,

L’application envoie une requête a L’api Facebook pour récupérer les nouveaux prospects
générés par le formulaire avec l’identifiant formulaire id du profil sélectionne,

32
L’application récupère ensuite le jeton API Sendinblue de la base de données des profils,
associe les colonnes Facebook aux colonnes qui vont être envoyés vers Sendinblue.

Figure IV.4 – Récupération des prospects depuis Facebook par lot

L’intégration en streaming

Si le mode streaming a été sélectionné lors de la création du compte, les prospects générés
par le formulaire Facebook seront automatiquement envoyés vers le CRM en temps réel.

Facebook envoie une notification au serveur web de l’application SIB intégration contenant
l’identifiant du nouveau prospect généré ainsi que le formulaire qui l’a généré.

Le serveur de l’application récupère les profils avec le même numéro de formulaire de la


notification Facebook, Puis envoie une requête get vers l’api Facebook pour récupérer les
données du prospect avec l’identifiant envoyé par la notification.

Le serveur applique des fonctions de traitements, et mappage d’attributs et prépare une


requête POST pour l’envoyer à l’API Sendinblue

33
Figure IV.5 – Récupération des prospects depuis Facebook en temps réel

34
IV.3.1 Diagramme de séquence  Alimentation du Datawarehouse


Lors de l’importation des données, L’application stock les prospects des trois sources les
regroupe selon les dimensions mentionnées précédemment, et les prépare pour les intégrer
dans l’entrepôt de données.

Si le profil n’existe pas, l’application envoie une requête d’insertion du profil avant de
passer à l’alimentation.

Figure IV.6 – L’alimentation de l’entrepôt de données

35
IV.4 Conception de l’entrepôt de données

IV.4.1 Les besoins des clients de l’entreprise

La mesure la plus importante dans le marketing est le nombre de visiteurs/acheteurs, Ce


qui justifie le choix de cette mesure.

L’opérateur peut aider le décideur à choisir un seul opérateur à utiliser pour toute l’en-
treprise ou bien choisir un seul opérateur pour une région donnée.

Les dimensions Âge et sexe ne sont pas intéressantes pour toutes les entreprises mais pour
la plupart c’est indispensable donc il a fallu les intégrer,

Âge

Pour l’Âge on a 4 valeurs possibles :


— moins de 20 ans
— âge entre 20 et 60
— plus de 60 ans
— ”Non disponible” pour les landing Pages/formulaires qui ne disposent pas d’un champ
Âge

Sexe

Pour sexe, 3 valeurs sont possibles :


— Homme
— Femme
— ”Non disponible”

Opérateur

Cette dimension est extraite des numéros de téléphones des leads :


— Ooredoo
— Djezzy
— Mobilis
— ”Non disponible”

36
Profil

Chaque entreprise peut avoir plusieurs formulaires Facebook et plusieurs liste CRM as-
sociés, L’analyse de cette dimension nous donne des prédictions sur les stratégies de publicités
à suivre dans le futur selon la stratégie qui a marché le mieux pour l’entreprise

Extra (valeur spéciale pour chaque entreprise)

les entreprises se basent sur une valeur spéciale que l’utilisateur doit introduire : Pour
une entreprise de réparation de téléphone par exemple, en plus de la wilaya et le numéro de
téléphone du client, la panne est l’élément le plus important du prospect donc c’est l’élément
extra pour cette entreprise

IV.4.2 Schéma en étoile

Figure IV.7 – Schéma en étoile de l’entrepôt de donnée

37
Modèle logique

— f2sib profile(profil id,entreprise formulaireFB ,listeCRM)


— Operateur(operateur id,operateur type)
— Wilaya(wilaya id,wilaya,région)
— sexe(sexe id,sexe)
— age(age id,tranche)
— temps(temps id,jour,mois,année))
— extra(extra id,valeur)
— prospect count(temps id∗, prof ile id∗, agei d∗, wilaya id∗, sexe id∗, extra id∗, nombre)

Maintenant qu’on a vu les interaction entre les composantes du système , voici le schéma
détaillé qui les regroupe

Figure IV.8 – Le nouveau système détaillé

Conclusion

Après avoir identifier les dimensions à utiliser et l’acheminement des données des données,
on peut entamer le prochain chapitre qui traitera l’environnement et les outils utilisés pour
implémentation du système ainsi que les résultats.

38
Chapitre V

Réalisation

Introduction
Après avoir mené à terme les différentes phases de conception du projet. on est en mesure de
commencer la partie réalisation avec une vision claire et précise.

Dans ce chapitre nous allons présenter les outils utilisés pour le développement du système
”F2SIB” (Facebook 2 Sendinblue), les services web et les interfaces importantes de l’appli-
cation.

V.1 Outils utilisés

V.1.1 QGis

QGIS est un logiciel SIG (système d’information géographique) libre multiplateforme


publié sous licence GPL. Le développement a débuté en mai 2002 et est sorti en tant que
projet sur Source Forge en juin 20022. Il était également appelé Quantum GIS jusqu’en
septembre 2013.

QGIS fait partie des projets de la Fondation Open Source Geospatial, et logiciel est intégré
à la liste des logiciels libres préconisés par l’État français dans le cadre de la modernisation
globale de ses systèmes d’informations (S.I.). [19]

V.1.2 QT

Mécontents des outils disponibles pour le développement de logiciels multiplateformes,


les Norvégiens Haavard Nord et Eirik Chambe-Eng s’attelèrent en 1990 au développement
de Qt. Deux ans plus tard, ils fondaient l’entreprise Trolltech depuis rachetée par le groupe

39
de télécommunication Nokia puis, en 2012, par la société de logiciels finnoise Digia. Depuis
2014, le développement est confié à la filiale de Digia, The Qt Company. Qt est programmé
en C++ et est pris en charge par différentes plateformes 32 et 64 bits.[20]

V.1.3 Docker

La technologie Docker utilise le noyau Linux et des fonctions de ce noyau pour séparer les
processus afin qu’ils puissent s’exécuter de façon indépendante, il est associé à un modèle de
déploiement basé sur une image. Il est ainsi plus simple de partager une application ou un
ensemble de services, avec toutes leurs dépendances, entre plusieurs environnements. Docker
permet aussi d’automatiser le déploiement des applications (ou d’ensembles de processus
combinés qui forment une application) au sein d’un environnement de conteneurs.[21]

V.1.4 RethinkDB

RethinkDB est la première base de données évolutive JSON open source, conçue à partir
de zéro pour le Web en temps réel. Elle inverse l’architecture de base de données traditionnelle
en exposant un nouveau modèle d’accès passionnant - au lieu d’interroger les modifications, le
développeur peut demander à RethinkDB de transmettre en continu les résultats de requête
mis à jour aux applications en temps réel. L’architecture push en temps réel de RethinkDB
réduit considérablement le temps et les efforts nécessaires pour créer des applications en
temps réel évolutives.[22]

V.1.5 PostgreSQL

PostgreSQL est un système de gestion de base de données relationnelle orienté objet


puissant et open source qui est capable de prendre en charge en toute sécurité les charges de
travail de données les plus complexes.[23]

V.1.6 APACHE Superset

Apache Superset est un outil de visualisation et d’exploration de données. Historiquement


développé pour des besoins internes par Airbnb, il est devenu open-source en 2016, incubé en
tant que projet Apache et compte plus de 38 300 étoiles sur GitHub. Parmi les utilisateurs
notables de cet outil, on peut citer Twitter, Udemy, Zalando, Airbnb ou encore Lyft.

Superset fonctionne en tant qu’application Web sur les principaux navigateurs internet,
c’est un logiciel développé en Python et qui utilise la librairie Flask comme framework Web.
[24]

40
V.1.7 DBeaver

DBeaver est un outil de base de données multiplateforme gratuit pour les développeurs,
les programmeurs SQL, les administrateurs de bases de données et les analystes. Il prend en
charge toutes les bases de données courantes : MySQL, PostgreSQL, SQLite, Oracle SQL Ser-
ver, Sybase, Teradata, Firebird etc. DBeaver est un outil de base de données universel gratuit
open source. Publié la première fois en 2010, l’outil possède de multiples caractéristiques à
savoir : une interface utilisateur conviviale permet l’écriture de diverses extensions, prend en
charge toutes les bases de données partageant le pilote JDBC (Java Database Connector).[25]

V.2 Matériel utilisé

L’entreprise a fournis deux serveurs pour la réalisation de ce projet :


— Intel(R) Atom(TM) CPU C2338 @ 1.74GHz avec 4gb de RAM,avec Ubuntu comme
système d’exploitation, ce serveur sera utilisé pour héberger les bases de données et
l’outil de visualisation (serveur de donnés)
— Intel(R) Xeon(R) CPU E5-2650 v4 @ 2.20GHz avec 2 gb de RAM ,le système d’exploi-
tation de ce serveur est CesntOS7 avec CPanel pré-configuré ,qu’on va utiliser comme
hébergement du serveur d’interception des notifications webhooks de Facebook (ser-
veur webhook).

V.3 L’installation de docker

Docker n’est pas dans les dépôts officiels d’Ubuntu 18.04. Cependant on peut l’installer
en rajoutant les dépôts de docker à notre serveur, les mettre à jour et lancer la commande
d’installation.

# l'ajout des dépots :


curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu"

# la mise à jour des dép^


ots:
sudo apt update

# l'installation :
sudo apt install docker-ce

41
Figure V.1 – La vérification du fonctionnement de docker

on peut maintenant installer les conteneurs des services qu’on va utilisé,

V.4 L’installation de RethinkDB

on installe la base de donnée RethinkDB dans un conteneur docker du serveur de données :

docker run --name profile_db -p 28015:28015 -d rethinkdb

–name : pour donner un nom à notre conteneur de l’entrepôt de données


-d : pour lancer le conteneur en arrière plan (background ou deamon)
-p 28015 :28015 : exposer le port 28015 qui permet la connection à la base de donnée au
port 28015 du serveur
pour la création d’une table, on utilise le langage ReQL :

r.db('f2sib').tableCreate('profiles')

42
Figure V.2 – L’interface web rethinkDB

V.5 L’implémentation de l’entrepôt de données

On se base sur la conception pour créer l’entrepôt de données, la dimension extra est
dynamique et ne contient qu’un seul champ donc on a décidé de l’introduire comme champ
de table de faits.

V.5.1 l’installation de PostgreSQL

On utilise docker pour installer la base de données Postgresql, la commande d’installation


est :

docker run --name DWH -p :5432:5432 -e POSTGRES_PASSWORD=PASS -d postgres

-p 5432 :5432 : pour exposer le port 5432 qui est le port de connection aux base de données
Postgres par défaut du conteneur au port 5432 du serveur

une fois l’installation terminée, on se connecte avec DBeaver :

43
Figure V.3 – Connecter Postgres à DBeaver

et on crée l’entrepôt de donnée à l’aide d’une interface similaire à PhpMydmin,

Figure V.4 – L’interface DBeaver

44
Figure V.5 – Schéma de l’entrepôt de données

Scripts et fonctions

gestion des redondances dans la table de faits

Lors d’une insertion dans la table de faits, si on ré-alimente l’entrepôt de données deux fois
le même jour, on peut retrouver des tuples contenant la même valeur d’une clé primaire
existante dans la base de données. Pour gérer cette redondance on utilise la commande ”ON
CONFLICT” qui permet de mettre en place un scénario alternatif dans le cas d’un conflit
de clé primaire, le scénario alternatif dans ce cas est l’ajout du nombre de prospect au tuple
existant.
exemple d’utilisation de la commande ”ON CONFLICT”, EXCLUDED fait référence au
tuple qu’on va exclure

INSERT INTO public.prospect_count


(temps_id, profile_id, age_id, wilaya_id, sexe_id, extra, nombre, operateur_id)
VALUES('2021-12-30', 10000, 2, '16', 1, 'PC', 20, 2)
on conflict (temps_id, profile_id, age_id, wilaya_id, sexe_id,operateur_id,extra)
do update set nombre=EXCLUDED.nombre+prospect_count.nombre;

insertion d’un nouveau tuple dans dim temps

45
L’insertion se fait d’une manière automatique ,avant l’insertion dans la table de faits, un
trigger se déclenche vérifiant si le champs temps id existe dans la table de dim temps si ce
n’est pas le cas, il l’ajout et découpe le champs pour en extraire le mois et l’année

--la fonction qui permet d'extraire le mois et l'année d'un jour donnée

CREATE or replace function autoinsert_day()


RETURNS TRIGGER
LANGUAGE PLPGSQL
AS
BEGIN
INSERT INTO temps (temps_id,jour,mois,annee)
values(
new.temps_id,new.temps_id, --jour
to_char(new.temps_id,'MM-YYYY'), --mois
to_char(new.temps_id,'YYYY')) -- année
on conflict (temps_id)
do nothing ;-- ne pas inserer si le tuple existe
return new;
END;
-- le trigger fait appelle à la fonction avant l'insertion de chaque ligne
CREATE TRIGGER temps_autoinsert BEFORE INSERT OR UPDATE ON public.prospect_count
FOR EACH ROW EXECUTE PROCEDURE autoinsert_day();

l’insertion dans f2sib profile

L’insertion dans f2sib profile se fait au moment de l’ajout d’un profil et la gestion des
conflits se gère de la même manière que la table de faits et le scénario alternatif est de ne
rien faire dans le cas d’un conflit au lieu d’envoyer un message d’erreur.

INSERT INTO f2sib_profile


(entreprise,formulaire_fb,liste_crm) values
('{company}','{db_profile_name}','{db_listid}')
ON CONFLICT DO NOTHING

V.6 la création d’une application Facebook

Afin de pouvoir utiliser l’Api de Facebook via une application externe, on doit d’abord
transformer un compte Facebook en un compte développeur en suivant les étapes du lien
suivant : https ://developers.Facebook.com

46
Une fois le compte activé, on peut créer une application Facebook en spécifiant le domaine
d’utilisation et des informations générales concernant cette application. cette application
permet aux utilisateurs Facebook de générer des jetons d’api.

Figure V.6 – Le choix du domaine de l’application

Figure V.7 – Remplissage des information de l’application

En plus d’un jeton d’authentification, Facebook a mis en place un système d’autorisation


pour chaquec point de terminaison ,selon la documentation, le point de terminaison des
prospects d’un formulaire d’une page a besoin de 4 autorisations :

47
— ads management
— pages read engagement
— pages show list
— pages manage metadata
Pour avoir ces autorisations, une demande doit être envoyée à Facebook en expliquant
leurs rôle dans L’application externe, cette étape est appelée l’App Review et prend entre 10
et 15 jours.

Figure V.8 – demande d’un APP review

une fois l’APP Review terminé par l’équipe Facebook, on peut voir les accès approuvées
à l’application.

Figure V.9 – autorisations approuvées

On peut maintenant envoyer des appels à l’api de Facebook pour récupérer les données
de prospects avec des requêtes http avec un langage de programmation, des outils comme
Postman ou l’outil de test proposé par Facebook Graph api, le point de terminaison des leads
d’un formulaire est :
https ://graph.Facebook.com/v10.0/FORULAIRE ID /leads
avecleparamètretoken = jeton

et en Mai 2021, Facebook a rajouté la possibilité de filtrer les données avant de les
récupérer via l’api la syntaxe contient 3 paramètres : fiels,operator,et value on s’intéresse au
champs created time avec l’opéraateur GREATER THAN et la valeur égale à la dernière
date

48
Figure V.10 – filtrage des prospects

pour récupérer les champs d’un formulaire on utilise le point de terminaison suivant :
https ://graph.Facebook.com/v10.0/FORMULAIRE IDaveclesparamètres : f ields = questions{keys}etto
jeton
Lavaleurduparamètref ieldpermetdef iltrerleschampsetlessouschampsdelarequête

Le même point de terminaison est utilisé pour avoir le nom du formulaire en changeant
le paramètre field de fields=questions à fields=name

Figure 5.12 – Le nom d’un formulaire

Facebook permet de mettre en place la fonctionnalité webhook pour interagir en temps


réel avec les changements des leads d’un formulaire en rajoutant le module webhooks à
l’application

49
Figure 5.13 – Autoriser les webhooks

Pour recevoir les données des formulaires en temps réel, on s’abonne à la terminaison
leadgen ,et on prépare un serveur pour capturer les notifications du webhook.

Figure 5.14 – ajouter le lien de call back

Figure 5.15 – ajouter la terminaison leadgen

5.7 L’utilisation de l’api Sendinblue

Sendinblue offre un service api simple à utiliser ,sans autorisations ou l’utilisateur peut
retirer son jeton depuis son compte et s’en servir pour envoyer des requêtes http au serveur
Sendinblue via un langage de programmation, on utilisera deux points de terminaison de cet
api :
1 - l’extraction des contacts (qui vont être traité et envoyé à l’entrepôt de
données)

# l'importation des packages


import sib_api_v3_sdk #sendinbue sdk
from sib_api_v3_sdk.rest import ApiException

50
#configuration
configuration = sib_api_v3_sdk.Configuration()

#la clé récupéré depuis Sendinblue


configuration.api_key['api-key'] = 'API KEY'

api_instance = sib_api_v3_sdk.ListsApi(sib_api_v3_sdk.ApiClient(configuration))

#parametres
list_id = 2
modified_since = '2021-04-20T19:20:30+01:00'
limit = 50 #le nombre de resultat par page
offset = 0 #l'index de la page

contacts = [] #liste des contactes


api_response = api_instance.get_contacts_from_list(list_id, modified_since,limit,offset) #appel à l'api

while len(api_response) != 0: #pagination


contacts.append(api_response) #ajouter la réponse à la liste des contactes

offset+=1 # se diriger vers la page suivante


api_response = api_instance.get_contacts_from_list(list_id, modified_since,limit,offset)

#l'affichage du resultat
print(api_response)

Figure 5.16 – le résultat de la requête 1

51
2 - la récupération du nom de l’entreprise : (l’information permet de créer
le profile de l’entreprise dans l’entrepôt de données)

import sib_api_v3_sdk
from sib_api_v3_sdk.rest import ApiException

configuration = sib_api_v3_sdk.Configuration()
configuration.api_key['api-key'] = 'API KEY'

api_instance =sib_api_v3_sdk.ApiClient(configuration)

# l'appel à l'ap depuis le sdk de Sendinblue


api_response = api_instance.get_account()
print(api_response)

Figure 5.17 – le résultat de la requête 2

52
5.8 Création et hébergement du serveur Webhook

Le serveur de réception des notifications webhook (call back) est composé


de deux éléments principaux, la réception de la notification, et l’envoi des
donnée vers Sendinblue dans cette étape on va voir le code et les étapes
d’hébergement du service.

5.8.1 la création d’une application web python

On crée un nouveau sous-domaine du domaine principal de l’entreprise, au-


tomate.[SERVEUR].com, puis on importe le script et installe les dépendances
nécessaire via accès ssh (accès distant).

Figure 5.18 – La création du sous-domaine automate

Figure 5.19 – La création d’une application python

53
Figure 5.20 – L’installation des bibliothèques nécessaires

Le serveur est opérationnel juste après l’importation des script dans la


répertoire automate créé lors de la création du sous-domaine.

Figure 5.21 – L’importation des scripts

5.8.2 La réception des notifications

Le point de transmission https ://[serveur].com/fbwh récupère la notifi-


cation du webhook Facebook et prépare les données pour les envoyer à Sen-
dinblue, le retour de ce point de transmission est une valeur envoyé par Fa-
cebook ’hub.challenge’, cette valeur permet d’établir une confiance entre les
deux serveurs et assurer l’authenticité. Si Facebook ne reçoit pas la même
valeur envoyée, les données des prospects ne seront pas récupérées

@app.route('/fbwh', methods=['GET', 'POST'])


def fbwh():
#lire le jeton Facebook
token = open("upload/fb_api_key", "r").read()

#reception de la notification :

54
if request.method == 'POST':
#extraire l'identifiant du formulaire
form_id = request.json['entry'][0]['changes'][0]['value']['form_id']

#extraire l'identifiant du prospect


lead = request.json['entry'][0]['changes'][0]['value']['leadgen_id']

#extraire le jeton de la page


page_token = request.json['entry'][0]['changes'][0]['value']['page_token']

# récuperer la donnée du prospect depuis l'api avec son identifiant :


if page_token != None:
# Appel à l'api
lead_data = requests.get(f'https://graph.Facebook.com/v10.0/{lead}/?access_token\
={token}').json() #page_token instead of token

#appeler la fonction d'envoi à Sendinblue


send_to_sib(form_id,lead_data)
else:
# un test est récuperer avec un jeton null
print("webhook test")

# l'attribut de confiance
return str(request.args.get('hub.challenge')), 200

5.8.3 L’envoi vers Sendinblue

Cette procédure récupère de la base de données des profiles (rethinkDB)


avec l’identifiant de formulaire Facebook identique à l’identifiant récupéré,
puis pour chaque profile effectue un mappage d’attributs et fait appel à l’api
Sendinblue pour intégrer le nouveau prospect dans le CRM, chaque ligne est
suivi d’un commentaire explicatif :

def send_to_sib(form_id,lead):
#send data to Sendinblue :
# La récuperation du profile ayant le m^ eme identifiant du formulaire
#récuperé par la notification du webhook Facebook
#se connecter à la base de données des profiles
re = r.RethinkDB()
result=[]
re.connect(host = '<serveur de données>', port = 28015,password="").repl()
results = re.db('f2sib').table("profiles")
.filter(re.row['Streaming'] == "Streaming" & re.row['form_id'] == int(form_id) )
.run()
for res in results:

55
result.append(res)

# Itérer les profiles et envoyer les données vers SENDINBLUE


for profile in result:
#mappage des attributs :
#récuperation des attributs depuis la base es profiles
listid,sib_api,fb_attributes,sib_attributes =
profile['listid'],profile['sib_api'],
profile['fb_attributes'],
profile['sib_attributes']
try:
#l'adresse mail
mail_val=[l['values'][0] for l in lead['field_data'] if l['name'] == fb_attributes[0]][0]
except:
#si l'attribut mail n'est pas present
mail_val = "prospect@fb.wh"
" le reste des attributs
att_vals=dict(zip(sib_attributes,[l['values'][0] for l in lead['field_data']
if l['name'] != fb_attributes[0]]))

#configuration de l'api Sendinblue


print("config sib_api")
configuration = sib_api_v3_sdk.Configuration()
configuration.api_key['api-key'] = sib_api

#envoyer la requ^
ete :
api_instance = sib_api_v3_sdk.ApiClient(configuration)
create_contact = sib_api_v3_sdk.CreateContact(
email=mail_val,
attributes=att_vals,
list_ids=[listid],
email_blacklisted=False,
sms_blacklisted=False,
update_enabled=True
)
try:
api_response = api_instance.create_contact(create_contact)
print('sent to Sendinblue ')
except ApiException as e:
print("error when sending to Sendinblue")

56
Figure 5.22 – le log d’une opération

Pour faciliter la récolte des identifiants des formulaires Facebook et les


jetons des pages sans avoir à passer par l’interface du ”Graph Api” de Face-
book qui est contre intuitive aux non développeurs, on a créé une interface
web permettant à l’administrateur de se connecter au compte et afficher les
données nécessaires. avec un bouton (se connecter) configuré pour faire appel
à l’API Facebook via l’SDK Javascript.

<script async defer crossorigin="anonymous"


src="https://connect.facebook.net/en_US/sdk.js"><script>

<script>
window.fbAsyncInit = function() {
FB.init({
// l'identifiant de l'application
appId : '1095093780951571',
// activer les cookiespour utiliser les sessions
cookie : true,
xfbml : true,
// la version de l'api Facebook utilisée
version : 'v10.0'
});
FB.getLoginStatus(function(response) {
statusChangeCallback(response);
});

57
};
<script>

<!-- JS SDK Login Button -->


<fb:login-button scope=
"pages_manage_ads,leads_retrieval,
pages_show_list,pages_read_engagement"
onlogin="checkLoginState()">
<fb:login-button>

Figure 5.23 – La sélection des pages

Les permissions approuvées par Facebook seront utiles pour cette étape ou
on voit l’utilisation de chaque permission dans L’application.

58
Figure 5.24 – Accepter les autorisations

L’affichage est sous forme de table ou chaque ligne correspond à une page
sélectionnée précédemment, en clinquant sur une page, la liste de ses formu-
laires s’affiche, le le jeton et l’identifiant peuvent être utilisé pour créer un
profil dans l’application.

Figure 5.25 – L’affichage des données

5.9 Mise en oeuvre de l’interface graphique

L’interface graphique a été réalisé avec l’outil QT designer, un logiciel


qui permet avec sa fonctionnalité glisser-déplacer de générer des interfaces
graphique rapidement.

59
Figure 5.26 – L’outil QT designer

L’application contient deux onglets principaux, le premier onglet sert à


gérer les profils sauvegardés (modifier, supprimer), envoyer les données des
profils en mode d’envoi par lot, et Alimenter l’entrepôt de données.

le Bouton Note permet de laisser une note sur l’un des profils pour notifier
les utilisateurs ou les informer.

Figure 5.27 – L’écran ’accueil de l’application

Le deuxième onglet est l’onglet qui sert à ajouter de nouveaux profiles, la


première étape est de récupérer le jeton de la page et l’identifiant du formulaire
qui veut rajouter, on appuyant sur (get attributes) on fait appelle à l’api
Facebook pour récupérer les questions du formulaire ainsi que son nom.

L’ordre des attributs est échangeable, il suffit de glisser l’attribut et le poser

60
dans son index pour l’aligner avec Sendinblue et les champs de l’entrepôt de
données,

Un double clique suffit pour retirer les attributs non utilisés ou qui ne
serons pas envoyés à Sendinblue et à l’entrepôt de données.

Figure 5.28 – Remplissage des attributs

(Add to list) rajoute un enregistrement dans la base de donnée des profils


et une nouvelle ligne dans le premier onglet le menu déroulant à coté du
bouton (Add to list) offre la possibilité d’envoyer les prospects en temps-réel,
ou par lots pour le profil créé (Streaming,Normal).

Figure 5.29 – l’écran d’ajout de profils

61
5.9.1 L’envoi des données à l’entrepôt de données

L’importation de données se fait profil par profil en appuient sur le bouton


”Alimenter le Datawarehouse”.

La nature des sources et destinations de données est hétérogène, donc il a


fallu généraliser la transformation du modèle JSON récupéré de l’API Sendin-
blue qui ne contient pas forcement touts les attributs au modèle relationnel
utilisé dans l’entrepôt de données ,pour cela, on utilise la Bibliothèque Pan-
das,pour python qui facilite les processus ETL.

La donnée passe par 6 étapes :

Données brutes renvoyées par l’api

Les données récupérées des appels à l’api Sendinblue sont sous format
JSON. Pour mieux visualiser la transformation, on va utiliser les données
d’une entreprise de réparation de téléphones.

Figure 5.30 – Nombre de contacts d’une liste

le profil de l’entreprise enregistré par l’application :

profil = {
"token": "EAAV...ZDZD",
"form_id": 798044580837265,
"sib_api": "xkeysib-a6ac9294a9d2...ea9e382-GSEN5OWdxHMaFy2U",
"listid": 21,
"company": "MymeTelecom",
"profile_name": "mymtelecom",
"fb_attributes": ["email", "wilaya", "Panne", "Numero"],
"sib_attributes": ["WILAYA", "PANNE", "TELEPHONE"],
"dwh_attributes": ["Wilaya", "Extra", "SMS"],
"Streaming": "Normal",
"note": "",

62
"time": "2021-05-02 16:03:15.867379",
"last_import": "2021-04-28 13:06:14.850880"
}

La liste qu’on souhaite envoyer à l’entrepôt de données contient 8002


contacts, et l’api ne permet pas de récupérer plus de 500 par appel, dont il
faut paginer dans l’api pour obtenir les 8002 contacts, les logs d’une transfor-
mation affiche deux premiers contacts puis le nombre après chaque pagination
(les numéros de téléphone et les e-mails sont supprimés) :

{'email': '', 'id': 18381, 'emailBlacklisted': False,


'smsBlacklisted': False, 'createdAt': '2021-05-30T11:27:18.103+01:00',
'modifiedAt': '2021-05-30T11:32:44.691+01:00', 'listIds': [21],
'attributes': {'NOM': 'Amine', 'PRENOM': 'Amine',
'SMS': '', 'WILAYA': 'Alger', 'TELEPHONE': '',
'APPAREIL': 'Smartphone', 'DESCRIPTION': 'Panne de Vibreur',
'DEVIS': False, 'MARQUE': 'SAMSUNG', 'MODELE': 'Galaxy A3 2017',
'MONTANT': 'None', 'PANNE': 'Panne de Vibreur', 'ACCEPTER': True}}

{'email': '', 'id': 18380, 'emailBlacklisted': False,


'smsBlacklisted': False, 'createdAt': '2021-05-30T10:04:31.886+01:00',
'modifiedAt': '2021-05-30T10:05:51.161+01:00', 'listIds': [21],
'attributes': {'NOM': 'Abdous nbil', 'PRENOM': 'Abdou',
'SMS': '', 'WILAYA': 'Tipaza', 'TELEPHONE': '',
'APPAREIL': 'Smartphone', 'DESCRIPTION': 'Autres',
'DEVIS': False, 'MARQUE': 'SAMSUNG', 'MODELE': 'Galaxy J6 Plus',
'MONTANT': 'None', 'PANNE': 'Autres', 'ACCEPTER': True}}

1000
1500
2000
...
8002
length of contacts:
8002

Préparation du mappage d’attributs

Une fois les données récupérées, on aligne les attributs de Sendinblue avec
les attributs associés de l’entrepôt de données et on prépare une liste vide
pour ne remplir que les données utiles, la structure de données utilisée est les
dictionnaires python, une structure proche de la structure JSON, les clés sont

63
les attributs Sendinblue, et les valeurs dont les dimensions de l’entrepôt de
données.

Le champs temps de l’entrepôt contient le champs de la clé ”createdAt” des


contacts récupérés ,et les champs qui n’ont pas d’équivalent dans l’entrepôt
de données auront des valeurs égales à leurs clé et seront remplis par des zéros
par la suite. Le zéro se traduit par ”N/A” ou non disponible(Âge et Sexe dans
cet exemple).

['Wilaya', 'Extra', 'SMS']


{'WILAYA': 'Wilaya',
'PANNE': 'Extra',
'TELEPHONE': 'SMS',
'createdAt': 'dim_created_at',
'Age': 'Age',
'Sexe': 'Sexe'}

{'Wilaya': [], 'Extra': [], 'SMS': [], 'dim_created_at': [], 'Age': [], 'Sexe': []}

Remplissage des listes

Pour remplir les listes, on parcours les 8002 contact récupérés et on place
la valeur d’un attribut Sendinblue dans l’attribut associé dans l’entrepôt de
donnée si il est présent, et 0 sinon,puis on transforme les liste en un ”Data-
frame” , une structure de données de la bibliothèque Pandas utilisée, pour
faciliter les transformations suivante :

Wilaya Extra SMS Age Age Sexe dim entreprise


Constantine Panne de Afficheur +213770***005 2021-05-02 0 0 MymeTelecom
Alger Panne de batterie +21377****309 2021-05-02 0 0 MymeTelecom
Tlemcen Panne de Afficheur +2135*****497 2021-05-02 0 0 MymeTelecom
constantine 0 07*****963 2021-05-01 0 0 MymeTelecom
... ... ... ... ... ... ...
Oran Panne de Afficheur +2137*****766 2019-12-19 0 0 MymeTelecom
Alger Autres +2135*****073 2019-12-18 0 0 MymeTelecom
Alger 0 +2135*****819 2019-12-18 0 0 MymeTelecom

[8002 rows x 7 columns]

64
Traitements et regroupement des colonnes

Une fonction de transformation est effectué sur les colonnes suivantes :


Numéro : pour obtenir l’opérateur du contact

def operator(x):
try:
x = str(x)
x = ''.join(c for c in x if c.isdigit())
x = x[3] if x.startswith('213') else x[1] if x.startswith('0') else x[0]
except :
return 0
return 1 if x=='5' else 2 if x=='7' else 3 if x=='6' else 4 if x=='2' else 0
df['SMS'] = df['SMS'].apply(operator)

La fonction prend en paramètre un numéro de téléphone et retourne en sortie


1,2,3,4 ou 0, les identifiants des valeurs de la dimension opérateur, en pre-
nant on considération les numéros qui commencent par 0, 213 ou +213, ou
commence directement par un chiffre autre que 0.

wilaya : la fonction prends en entrée un dictionnaire avec des noms des


wilayas en clés et leurs identifiants en valeurs. La fonction supprime les es-
paces et les accents du nom, le transforme en minuscule, si le mot en sortie
corresponds à l’une des clés du dictionnaire, sa valeur est retournée, sinon 0.

def trip_remove_acents_lower(x: str):


x = str(x).replace(" ", "").replace("'","").lower()
return u"".join([c for c in unicodedata.normalize('NFKD', x)
if not unicodedata.combining(c)])

df['Wilaya'] = [wilayas[trip_remove_acents_lower(x)]
if trip_remove_acents_lower(x) in wilayas.keys()
else '0' for x in df['Wilaya'] ]

Pour Âge, on crée des intervalles (bins), et des noms (labels) pour chaque
intervalle correspondants aux valeurs de cet intervalle dans le Datawarehouse

age_bins=[0,1,20,30,60,120]
age_labels = [0,1,2,3,4]

65
df['Age'] = pandas.cut(df['Age'],bins = age_bins,
labels = age_labels ,
right = False)

une fois les transformation terminées, on applique une fonction de regrou-


pement pour générer la colonne ”nombre”.

Wilaya Extra SMS dim created at Age Sexe dim entreprise nombre
16 0 1 2020-08-04 0 0 MymeTelecom 29
16 0 1 2020-08-03 0 0 MymeTelecom 24
16 0 1 2020-08-05 0 0 MymeTelecom 24
16 0 1 2020-08-06 0 0 MymeTelecom 23
16 0 1 2020-08-14 0 0 MymeTelecom 22
... ... ... ... .. ... ... ...
17 Panne de Afficheur 2 2021-04-17 0 0 MymeTelecom 1
17 Panne de Afficheur 2 2021-03-28 0 0 MymeTelecom 1
17 Panne de Afficheur 2 2021-03-26 0 0 MymeTelecom 1
17 Panne de Afficheur 2 2021-03-24 0 0 MymeTelecom 1

On remarque qu’on a obtenu 3064 combinaison différentes en regroupant


les 8002 contacts récupéré par l’api, A la fin de l’importation, la valeur de la
clé ”last import” du profil utilisé est remplacé par nouvelle date.

La construction de la requête SQL

On génère un code SQL pour l’envoyer à l’entrepôt de données, la requête


est sauvegardé dans des fichiers journaux, pour détecter la source des problèmes
lors d’un dis-fonctionnement.

la requête est composée de trois parties, la première partie est l’insertion


normale dans la table de fait, la deuxième partie est la sélection de l’identifiant
de l’entreprise dans une requête imbriqué, et la troisième partie qui assure
que même si deux machines envoient des données en parallèle, la données est
ajoutée une seule fois. Sans oublié le déclencheur qui s’active pour chaque
insertion et vérifie si la valeur de la date de création est présente dans la
dimension temps, si ce n’est pas le cas, il l’ajoute avant d’insérer la ligne dans
la table de faits.

66
Cette requête est généré automatiquement lors d’une importation, les lignes
insérés sont supprimé, on a laissé la première insertion pour la démonstration :

--Partie 1
INSERT INTO public.prospect_count
(temps_id, profile_id, age_id, wilaya_id, sexe_id, extra, nombre, operateur_id)
VALUES
('2021-04-29',

--Partie 2
(SELECT profile_id
from f2sib_profile fsp
where fsp.entreprise = 'MymeTelecom'
union
select profile_id
from f2sib_profile fsp2
where fsp2.entreprise ='N/A'
order by profile_id limit 1)

,0,'16',0,'Panne de Afficheur',1,2),
...

--Partie 3
on conflict (temps_id, profile_id, age_id, wilaya_id, sexe_id,operateur_id,extra)
do update set nombre=EXCLUDED.nombre+prospect_count.nombre;

5.10 Mise en place de l’outil de visualisation

Pour visualiser les données du datawarehouse, on a installé l’outil ”Apache


Superset” sur un conteneur docker sur le serveur de données, et on l’a connecté
avec le datawarehouse.

Figure 5.31 – Se connecter à l’entrepôt de données

L’équivalent des cubes sur Apache Superset est appelé data-set virtuel, et

67
les mesures sont représentées par des métriques.

Figure 5.32 – les métriques des Data-sets

Figure 5.33 – les colonnes du Data-set

Apache superset ne possède pas la carte de l’Algérie , donc il a fallu créer


une carte et l’intégrer dans l’outil. Les données sont récupérées depuis ”Opens-
treetmap” et transformées en utilisant l’outil ”Qgis” pour simplifier les poly-
gones dans le but de réduire la taille du fichier de 21.7 MB à 62.9 KB (la taille
est 345 fois plus petite) pour accélérer le chargement du tableau de bord.

68
Figure 5.34 – la préservation de la qualité de la carte

Pour que la carte soit reconnue par superset, on a rajouté une table d’at-
tributs qui inclut un code (ISO) et un nom (NAME 1) pour chaque wilaya.

Figure 5.35 – Les colonnes Geojson

69
Figure 5.36 – table de données Geojson

L’analyse de l’entreprise se base principalement sur la distribution, le


nombre de prospects générés par jour, ainsi que l’opérateur utilisé. Les fi-
gures suivantes illustrent la création de ses graphiques et l’intégration dans le
tableau de bord,

les graphiques se composent de 4 zones, Zone 1 : est réservée aux gra-


phiques qui utilisent la dimension temps,elle permet de choisir la granularité.

Zone 2 : la zone de la requête et groupement de données.

Zone 3 : l’affichage du graphique

Zone 4 : l’affichage du résultat de la requête de la zone 2

70
Figure 5.37 – Graphique du nombre de prospects par jour

Figure 5.38 – graphique de la colonne Extra

71
Figure 5.39 – graphique de la distribution démographique

On crée un tableau de bord global avec les graphiques élaborés précédemment


,et on rajoute un outil de filtrage par date et entreprise pour mieux compa-
rer les résultats des compagnes , le tableau de bord finale est affiché dans
l’illustration suivante

72
Figure 5.40 – Le tableau de bord final

73
Figure 5.41 – Filtrage des données

Pour autoriser l’accès des entreprise à ses données tout en gardant les
données des autres entreprise privées , il est possible d’isoler les lignes de
l’entrepôt de données dans Apache Superset.

Sur cet exemple , l’utilisateur ”Reparily” ne peut consulter que les données
de sa propre entreprise

Figure 5.42 – Isolation des données

74
5.11 Conclusion

Dans ce chapitre on a présenté les outils et technologies qui construisent


l’environnement de développement , et les interfaces du système en expliquant
son fonctionnement à travers des images explicatives

pour terminer , on a présenté le résultat sous forme d’un tableau de bord


global final qui sera utilisé par l’entreprise dans la prise de décision.

75
Conclusion générale

Au cours des dernières années, les entreprises ont donné plus d’importance aux données,
en améliorant les méthodes de stockage et en profitant des technologies comme les entrepôts
de données et les outils de visualisation pour créer des tableaux de bords.

L’objectif de ce travail est destiné à mettre en oeuvre un outil d’automatisation du flux


de données récolté par des formulaires Facebook, et l’envoyer en temps réel vers des listes de
contacts CRM (Sendinblue), et alimenter simultanément un entrepôt de données contenant
une table de fait et cinq tables de dimensions. Cette étape consiste à traduire les données
d’un modèle JSON vers un modèle proche des tables (Dataframes) puis générer des requêtes
SQL et les exécuter pour alimenter l’entrepôt de données. On utilise également des triggers
pour assurer la cohérence et la disponibilité des données introduites dans la table de faits.

Les données seront par la suite visualisées dans un tableau de bord centralisé pour mieux
comprendre les prospects.

Les objectifs fixés par Inbound marketing Algérie ont été atteints, et le système est mis
en production.

Perspectives
Le projet est partiellement dans le cloud. On peut envisager de migrer la partie restante
dans le cloud pour rendre le système plus homogène.

On peut aussi développer une application mobile pour améliorer sa portabilité et la vi-
tesse de la réactivité des employés d’Inbound Marketing Algérie.

Annexe
Les base de données NoSQL sont une approche de la conception de bases de données qui
peut s’adapter à une grande variété de modèles de données, y compris les formats avec des
clés, des documents, des colonnes et des graphes. NoSQL signifie  not only SQL , et c’est
une alternative à la base de donnée relationnelle traditionnelles

RethinkDB fait partie de la famille des bases de données Nosql orienté documents.

76
Bibliographie

[1] B2B : Les réseaux sociaux influencent de plus en plus les ventes
comarketing-news.fr/b2b-les-reseaux-sociaux-influencent-de-plus-en-plus-les-ventes/
[2] Facebook wikipedia
fr.wikipedia.org/wiki/Facebook
[3] Comment utiliser Facebook Ads pour obtenir des leads ?
www.maarketer.com/p134-facebook-ads-leads.html
[4] Définitions marketing
www.definitions-marketing.com/definition/crm/
[5] Hub spot - Qu’est-ce que l’inbound marketing ?
blog.hubspot.fr/inbound-marketing-information
[6] Quelle différence entre inbound et outbound marketing ?
https ://blog.comexplorer.com/outbound-marketing
[7] le marketing automation ou automatisation du marketing
www.journalducm.com/dictionnaire-marketing/marketing-automation/
[8] Zapirer -Automation
zapier.com/learn/zapier-quick-start-guide/quick-start-the-basics/
[9] Joutnal Du Net - IFTTT
www.journaldunet.fr/web-tech/dictionnaire-de-l-iot/1440670-ifttt-definition-
fonctionnement-et-offres-alternatives/
[10] Astera - API RESTful
www.astera.com/fr/type/blog/rest-api-definition/
[11] blog Mosesif - REST API Design : Filtering, Sorting, and Pagination
www.moesif.com/blog/technical/api-design/REST-API-Design-Filtering-Sorting-and-
Pagination/
[12] techlib - webhooks
techlib.fr/definition/webhook.html
[13] Webhooks v.s. Polling
blog.cloud-elements.com/webhooks-vs-polling-youre-better-than-this
[14] Business Intelligence
www.lebigdata.fr/business-intelligence-definition

77
[15] Date Warehousing Data Mining
chatakatech.com/data-warehousing.html
[16] Oracle - Tout ce que vous devez savoir sur un Data Warehouse
www.oracle.com/fr/database/data-warehouse-definition.html
[17] Focus sur la modélisation en étoile
https ://www.cartelis.com/blog/data-warehouse-modelisation-etoile/
[18] Wikipedia - ETL
fr.wikipedia.org/wiki/Extract-transform-load
[19] QGis
www.ossdirectory.com/che/fr/produits-oss/single/ossproduct/qgis-quantum-gis/
[20] QT
www.ionos.fr/digitalguide/serveur/know-how/qt/
[21] Docker
www.redhat.com/fr/topics/containers/what-is-docker
[22] RethinkDB
fr.wikipedia.org/wiki/RethinkDB
[23] PostgreSQL
www.oracle.com/fr/database/definition-postgresql.html
[24] blog.ippon.fr/2020/11/02/apache-superset-un-logiciel-de-visualisation-a-
suivre/
www.developpez.com/actu/242071/La-version-5-3-2-de-DBeaver-l-outil-de-base-de-
donnees-multiplateforme-est-disponible-tour-d-horizon-des-principales-nouveautes/
[25] DBeaver
www.developpez.com/actu/242071/La-version-5-3-2-de-DBeaver-l-outil-de-base-de-
donnees-multiplateforme-est-disponible-tour-d-horizon-des-principales-nouveautes/

78

Vous aimerez peut-être aussi