Revenir aux actualités des développeurs

Visualiser les indicateurs de votre compte WhatsApp dans votre application

19 décembre 2022DeRashed Talukder

L’API WhatsApp Business Management permet d’accéder aux indicateurs et aux analyses de votre compte WhatsApp Business. Vous pouvez obtenir deux types de données sur votre compte :

  • Analyse des messages : nombre de messages envoyés et distribués par des numéros de téléphone associés à un compte WhatsApp Business spécifique pendant une période donnée.
  • Analyse des conversations : informations sur les conversations et les coûts afférents aux messages envoyés pendant une période donnée.

Quand vous envoyez une requête à un point de terminaison de l’API, vous devez spécifier le type de données souhaité en ajoutant le paramètre analytics ou conversation_analytics pour l’URL.

Par exemple, si vous souhaitez obtenir les analyses des messages de votre compte, envoyez la requête suivante :

https://graph.facebook.com/v14.0/{whatsapp-business-account-ID}
      ?fields=analytics
      .{filtering-parameters}
      &{access-token}

Dans cet exemple, nous avons demandé à obtenir les analyses des messages liés aux numéros de téléphone associés au compte WhatsApp Business correspondant à un ID unique. Nous expliquons comment obtenir un ID de compte WhatsApp Business et un token d’accès dans la section Conditions requises ci-dessous.

D’autre part, quand vous envoyez une requête, vous pouvez appliquer des paramètres de filtrage pour affiner les résultats. Au total, le point de terminaison de l’API Business Management accepte jusqu’à six paramètres de filtrage. Vous devez préciser les éléments suivants :

  • start : si vous indiquez une date de début, la réponse exclut tous les messages envoyés avant cette date.

  • end : si vous indiquez une date de fin, la réponse exclut tous les messages envoyés après cette date.

  • granularity : niveau de détail souhaité pour les analyses obtenues. Valeurs acceptées : HALF_HOUR, DAY et MONTH.

Dans le cas de conversation_analytics, vous pouvez utiliser jusqu’à neuf paramètres de filtrage, dont trois ( start, endet granularity ) sont obligatoires.

Conditions requises

Pour suivre ce tutoriel, vous devez effectuer les actions suivantes :

  • Installer Python et pip sur votre machine de développement locale*.

  • Vous connecter à un compte de développeur sur Meta for Developers, créer une application Business et ajouter un compte WhatsApp Business à l’application.

  • Configurer les paramètres. Sur la page Ajouter des produits à votre application, cliquez sur le bouton Configurer de l’option WhatsApp.

Après avoir créé une application de type WhatsApp Business, vous obtiendrez un ID de compte WhatsApp Business et un token d’accès temporaire. Notez bien ces deux clés, car vous allez en avoir besoin plus loin dans ce tutoriel.

Vous pouvez ajouter votre numéro personnel WhatsApp en tant qu’expéditeur, ou utiliser le numéro de téléphone test fourni par WhatsApp.

Créer une application Python pour visualiser les données

Configurez un environnement de développement Python et installez les packages nécessaires.

Créez et nommez un dossier, puis utilisez un outil de ligne de commande pour accéder à ce dossier. Dans cet article de blog, nous utiliserons la bibliothèque de requêtes pour nos requêtes HTTP et la célèbre bibliothèque Matplotlib pour créer des visualisations statiques, animées et interactives. Pour les installer, exécutez la commande ci-dessous :

pip install requests matplotlib

Vous pouvez à présent envoyer les requêtes Python pour obtenir les données d’analyse de WhatsApp via l’API, puis utiliser Matplotlib pour visualiser les points de données ainsi obtenus dans un graphique.

Visualiser le nombre de messages envoyés par jour

Commencez par envoyer une requête pour obtenir les données d’analyse. Pour ce faire, créez un fichier du nom de sent.py dans le dossier de votre application, et importez les dépendances requises pour cette tâche :

import datetime
import requests
import matplotlib.pyplot as plt

Ensuite, créez la requête d’API GET et utilisez vos ID de compte WhatsApp Business et token d’accès pour obtenir les données d’analyse. Ces informations sont disponibles dans le tableau de bord de votre compte de développeur sur Meta for Developer. Voici le code pour la requête GET  :

key = 'put-your-access-token-here'
waba_id = 'put-your-waba-id-here'

res = requests.get(f'https://graph.facebook.com/v14.0/{waba_id}?fields=analytics.start(1662174000).end(1662548446).granularity(DAY)&access_token={key}')

dict = res.json() 
print(dict)

Dans la requête ci-dessus, nous avons représenté la date de début au format UNIX, comme l’exige l’API. Vous pouvez utiliser ce convertisseur gratuit pour convertir les horodatages UNIX dans un format lisible, et inversement. Le code convertit la réponse au format JSON sur la dernière ligne et imprime le résultat.

Pour exécuter le code, saisissez la commande suivante :

python app.py

Si les numéros de téléphone associés au compte WhatsApp Business sont utilisés pour envoyer des messages pendant une certaine période, vous obtenez dans la réponse un objet de dictionnaire qui ressemble à ceci :

{
  "analytics": {
    "phone_numbers": [
      "16505550111",
      "16505550112",
      "16505550113"
    ],
    "country_codes": [
      "US",

    ],
    "granularity": "DAY",
    "data_points": [
      {
        "start": 1662174000,
        "end": 1662260400,
        "sent": 199251,
        "delivered": 183001
      },
      {
        "start": 1662260400,
        "end": 1662346800,
        "sent": 162489,
        "delivered": 141234
      },
      {
        "start": 1662346800,
        "end": 1662433200,
        "sent": 67902,
        "delivered": 53902
      },
      {
        "start": 1662433200,
        "end": 1662519600,
        "sent": 129521,
        "delivered": 117832
      }
    ]
  },
  "id": "952305634918047"
}

Dans ce cas, la liste data_points contient quatre dictionnaires. Chacun d’entre eux contient le nombre de messages envoyés par les numéros WhatsApp associés et distribués pendant la période spécifiée.

Maintenant que vous avez les données, vous devez récupérer les informations nécessaires. Comme nous voulons visualiser le nombre de messages envoyés chaque jour, nous devons obtenir les valeurs start et sent de chaque dictionnaire.

Pour ce faire, utilisez la boucle Python for...in pour parcourir les points de données. Convertissez l’heure de début du format UNIX dans un format lisible pour chacun des objets de données. Ensuite, obtenez uniquement le numéro du jour du mois et ajoutez-le à la liste des jours. Conservez le nombre de messages envoyés dans une autre liste appelée no_of_msgs_sent :

days = []
no_of_msgs_sent = []

data_points = dict.get("analytics").get("data_points")

for point in data_points:
    
    # Get date in human readable format
    x = datetime.datetime.fromtimestamp(point.get('start'))
    
    # Get just the day in string format
    y = x.strftime("%d")
    
    days.append(y)
    
    # Add the number of sent messages to the list 
    no_of_msgs_sent.append(point.get('sent'))
    
print(days)
print(no_of_msgs_sent)

If you run the code, you get two lists:

['03', '04', '05', '06'] // days
[196093, 147649, 61988, 132465] // number of messages

Now that you have what you need, it's time to visualize it. Add the following code to app.py:

plt.plot(days, no_of_msgs_sent)

plt.title('Our Graph')
plt.xlabel('Days')
plt.ylabel('Number of messages sent')

plt.show()

Dans notre exemple, vous tracez un graphique basique, avec les jours sur l’axe horizontal et le nombre de messages envoyés sur l’axe vertical.

Enregistrez le fichier et exécutez votre code. Si vous êtes sur Linux et obtenez un message d’erreur comme celui-ci :

UserWarning: Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figure.

Vérifiez que vous avez installé tkinter. Si ce n’est pas le cas, exécutez la commande suivante pour l’installer :

sudo apt-get install python3-tk

Si vous exécutez le code, vous obtenez un graphique semblable à celui-ci :

Ensuite, vous allez créer un graphique pour visualiser le nombre de message distribués.

Visualiser les informations relatives à un numéro WhatsApp spécifique

Dans la section précédente, la requête ne contenait pas de numéros de téléphone. Par conséquent, l’API renvoyait les informations de tous les numéros de téléphone associés au compte WhatsApp Business comprises entre les dates de début et de fin précisées.

Si vous souhaitez obtenir les données d’analyse de certains numéros de téléphone uniquement, vous devez saisir les numéros de téléphone concernés dans un ensemble et le transmettre à la méthode .phone_numbers lors de la création de la requête :

res = requests.get(f'https://graph.facebook.com/v14.0/{waba_id}?fields=analytics.start(1662174000).end(1662548446).phone_numbers([16505550111, // others]).granularity(DAY)&access_token={key}')

Le reste du code dans le fichier sent.py est identique. Vous obtenez uniquement les analyses concernant les numéros de téléphone spécifiés au moment de l’exécution de la requête.

Visualiser le nombre de messages distribués par jour

Dans les deux précédentes sections, nous avons tracé un graphique pour visualiser le nombre de messages envoyés chaque jour par les numéros de téléphone associés via WhatsApp. Nous allons maintenant tracer un graphique pour visualiser le nombre de messages distribués chaque jour.

Créez un fichier et appelez-le delivered.py. Ensuite, copiez le code de sent.py dans delivered.py.

Vous allez maintenant apporter quelques modifications au code dans delivered.py. Commencez par remplacer la variable du haut no_of_msgs_sent par no_of_msgs_del afin de refléter le type de données collectées.

Ensuite, dans la boucle for...in , modifiez la valeur dans la méthode point.get en remplaçant sent par delivered. Après modification, votre code devrait ressembler à ça :

# Variables go here

for point in data_points:
    
    # Code for getting human readable date goes here    
    
    # Now add the number of delivered messages to the list  
    no_of_msgs_del.append(point.get('delivered'))

print(day)
print(no_of_msgs_del)

Finally, specify no_of_msgs_del in the plt.plot method and update the label shown on the y-axis:

plt.plot(days, no_of_msgs_del)

plt.title('Our Graph')
plt.xlabel('Days')
plt.ylabel('Number of messages delivered')

plt.show()

Lorsque vous avez exécuté le code sur votre terminal (avec python delivered.py), vous obtenez un graphique comme celui-ci.

Vous avez créé une visualisation de deux ensembles de données d’analyse pour les messages. Maintenant, vous allez représenter le coût des messages en utilisant conversation_analytics.

Visualiser le coût des messages envoyés par jour

Ici encore, vous allez créer un fichier et l’appeler cost.py. Copiez le code du fichier sent.py dans cost.py. Vous allez maintenant effectuer quelques modifications.

Tout d’abord, vous devez changer le code de la requête. Comme vous cherchez à obtenir les informations des conversations, configurez le paramètre fields sur la valeur conversation_analytics et granularity sur daily.

res = requests.get(f'https://graph.facebook.com/v14.0/{waba_id}?fields=conversation_analytics.start(1662174000).end(1662548446).granularity(DAILY).phone_numbers([])&access_token={key}')

Notez que le champ conversation_anaytics accepte plusieurs autres paramètres de filtrage, si vous souhaitez obtenir d’autres types d’informations. Pour en savoir plus, consultez la documentation complète.

La requête ci-dessus devrait renvoyer un objet de réponse similaire à celui-ci :

{
  "conversation_analytics": {
    'data': {
        "data_points": [
          {
            "start": 1662174000,
            "end": 1662260400,
            "conversation": 5250,
            "cost": 45.0532
          },
          {
            "start": 1662260400,
            "end": 1662346800,
            "conversation": 2250,
            "cost": 25.0290
          },
          {
            "start": 1662346800,
            "end": 1662433200,
            "conversation": 800,
            "cost": 0.0000
          },
          {
            "start": 1662433200,
            "end": 1662519600,
            "conversation": 3150,
            "cost": 33.2015
          }
        ]
    }
  },
}

Comme nous l’avons vu précédemment, les data_points se trouvent dans le dictionnaire de données. Chaque point de données du dictionnaire comprend un nombre de conversations et un coût associé.

Dans cost.py, remplacez la variable du haut no_of_msgs_del par cost_of_convo. Dans la boucle for...in , modifiez la valeur dans la méthode point.get en remplaçant delivered par cost. Après modification, votre code devrait ressembler à ça :

days = []
cost_of_convo = []

data_points = dict.get('conversation_analytics').get("data").get("data_points")

for point in data_points:
   
    x = datetime.datetime.fromtimestamp(point.get('start'))   
    y = x.strftime("%d")
    
    days.append(y)
    
    # Add the cost of messages in each data point
    cost_of_convo.append(point.get('cost'))

Now, to plot a graph visualizing it:

plt.plot(days, cost_of_convo)

plt.title('Our Graph')
plt.xlabel('Days')
plt.ylabel('Cost of messages sent')

plt.show()

Si vous exécutez le code avec le terminal (avec python cost.py), vous obtenez un graphique comme celui-ci :

Et le tour est joué !

Pour aller plus loin, vous pouvez appliquer la même méthode pour visualiser d’autres indicateurs fournis par l’API WhatsApp Business Management.

Conclusion

Dans ce tutoriel, nous avons utilisé la bibliothèque de visualisation des données de matplotlib pour visualiser les données reflétant le nombre de messages envoyés par jour, le nombre de messages distribués par jour et le coût de chaque conversation par messages.

L’API WhatsApp Business Management propose de nombreux paramètres de filtrage que vous pouvez utiliser pour spécifier les indicateurs que vous souhaitez obtenir dans chaque requête. Pour en savoir plus, consultez la documentation complète sur l’API.

L’API WhatsApp Business Management offre aux développeurs et développeuses des informations et indicateurs pertinents sur le compte WhatsApp de leurs utilisateurs et utilisatrices. Par exemple, ils et elles peuvent montrer à leurs utilisateur·ices le nombre de messages WhatsApp qu’ils et elles ont envoyés un jour donné dans leur tableau de bord.

Les possibilités sont illimitées !

*Meta ne peut être tenu pour responsable des applications tierces.