Zurück zu den Neuigkeiten für Entwickler

Kennzahlen des WhatsApp-Kontos in deiner App visualisieren

19. Dezember 2022VonRashed Talukder

Über die WhatsApp Business Management API erhältst du Zugriff auf Kennzahlen und Analysen zu deinem WhatsApp Business-Konto (WABA). Du kannst zwei Arten von Daten für dein Konto abrufen:

  • Analysen zu Nachrichten: Die Anzahl der gesendeten und zugestellten Nachrichten nach Telefonnummern, die mit einem bestimmten WABA verknüpft sind, innerhalb eines gegebenen Zeitraums.
  • Analysen zu Unterhaltungen: Informationen zu Unterhaltungen und Kosten für Nachrichten, die in einem bestimmten Zeitraum gesendet wurden.

Beim Abfragen des API-Endpunkts musst du angeben, ob du Analysen zu Nachrichten oder zu Unterhaltungen erhalten möchtest, indem du analytics oder conversation_analytics als Parameter für die URL hinzufügst.

Dies ist eine Beispielanfrage für das Abrufen von Nachrichtenanalysen zu deinem Konto:

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

In diesem Beispiel haben wir angegeben, dass wir Nachrichtenanalysen für Telefonnummern abrufen möchten, die mit dem WABA verknüpft sind, das über eine eindeutige WABA-ID verfügt. Im Abschnitt „Voraussetzungen“ erfährst du mehr dazu, wie du deine WABA-ID und deinen Zugriffsschlüssel abrufst.

Wenn du eine Anfrage durchführst, kannst du außerdem Filterparameter anwenden, um deine Ergebnisse einzuschränken. Der Business Management API-Endpunkt unterstützt insgesamt sechs Filterparameter. Du benötigst zwingend die Folgenden:

  • start: Wenn du ein Startdatum angibst, werden in der Antwort keine Nachrichten berücksichtigt, die vor besagtem Datum gesendet wurden.

  • end: Wenn du ein Enddatum angibst, werden in der Antwort keine Nachrichten berücksichtigt, die nach besagtem Datum gesendet wurden.

  • granularity: Mit welcher Granularität sollen deine Analysen abgerufen werden? Mögliche Werte sind unter anderem HALF_HOUR, DAY und MONTH.

Für conversation_analytics stehen dir neun Filterparameter zur Verfügung, wovon drei – start, end und granularity  – obligatorisch sind.

Voraussetzungen

Für dieses Tutorial musst du Folgendes tun:

  • Installiere Python und pip auf deinem lokalen Entwicklungscomputer.*

  • Registriere dich für ein Entwicklungskonto bei Meta for Developers, erstelle eine App vom Typ Business und füge ein WhatsApp Business-Konto zu der App hinzu.

  • Nimm die Einrichtung vor. Klicke auf der Seite „Produkte zu deiner App hinzufügen“ auf den Button Einrichten unter der Option WhatsApp.

Nachdem du eine WhatsApp-App mit dem Typ Business erstellt hast, erhältst du eine WABA-ID und einen vorübergehenden Zugriffsschlüssel. Diese beiden Schlüssel benötigst du im weiteren Verlauf dieses Tutorials, also bewahre sie gut auf.

Du kannst deine private WhatsApp-Nummer als Sender verwenden oder die von WhatsApp bereitgestellte Testnummer.

Eine Python-App zum Visualisieren von Daten erstellen

Richte eine Entwicklungsumgebung in Python ein und installiere die erforderlichen Pakete.

Erstelle einen Ordner, gib ihm einen Namen und navigiere dann über ein Befehlszeilen-Tool zu dem Ordner. In diesem Beitrag verwenden wir die Bibliothek „Anfragen“ zum Durchführen der HTTP-Anfrage und die beliebte Matplotlib-Bibliothek zum erstellen statischer, animierter und interaktiver Visualisierungen. Führe den folgenden Befehl aus, um sie zu installieren:

pip install requests matplotlib

Jetzt kannst du Python-Anfragen verwenden, um Analysedaten aus WhatsApp bei der API anzufragen. Verwende anschließend Matplotlib, um die Kennzahlen zu visualisieren, indem du anhand der Datenpunkte, die du von der API erhalten hast, eine Grafik erstellst.

Anzahl der täglich gesendeten Nachrichten visualisieren

Beginne mit dem Anfordern der Analysedaten. Erstelle hierzu eine Datei mit dem Namen sent.py in deinem Anwendungsordner und importiere die für diese Aufgabe erforderlichen Abhängigkeiten:

import datetime
import requests
import matplotlib.pyplot as plt

Erstelle anschließend die API GET -Anfrage, um mithilfe deiner WABA-ID und deines Zugriffsschlüssels die Analysen abzurufen. Diese Werte findest du im Dashboard deines Entwicklungskontos bei Meta for Developers. Der Code für die GET -Anfrage sieht wie folgt aus:

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)

In der Anfrage oben ist das Startdatum im UNIX-Format angegeben, wie von der API verlangt. Du kannst diesen kostenlosen Umwandler verwenden, um von Menschen lesbare und UNIX-Zeitstempel zu konvertieren. Der Code konvertiert die Antwort in der letzten Zeile in ein JSON-Format und druckt sie.

Führe den folgenden Befehl aus, um den Code auszuführen:

python app.py

Wenn die mit dem WABA verknüpften Telefonnummern innerhalb des festgelegten Zeitraums zum Senden von Nachrichten verwendet werden, erhalten wir als Antwort ein Wörterbuchobjekt, das aussieht wie dieses:

{
  "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"
}

In diesem Fall enthält die Liste data_points vier Wörterbücher. Jedes enthält die Anzahl der Nachrichten, die innerhalb des festgelegten Zeitraums über die verknüpften WhatsApp-Nummern gesendet und zugestellt wurden.

Jetzt, da du über die Daten verfügst, musst du die erforderlichen Informationen abrufen. Da wir die Anzahl der gesendeten Nachrichten pro Tag visualisieren möchten, müssen wir die Werte start und sent aus jedem Wörterbuch abrufen.

„Loope“ hierzu durch die Datenpunkte und verwende dabei die for...in -Schleife in Python. Konvertiere die Startzeit für jedes Datenobjekt vom UNIX-Format in ein von Menschen lesbares Format. Nimm dann nur den nummerischen Wert für den Tag des Monats und füge ihn zur Liste der Tage hinzu. Speichere die Anzahl der gesendeten Nachrichten in einer anderen Liste mit dem Namen 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()

Hier erstellst du eine Basisgrafik mit den Tagen auf der x-Achse und der Anzahl der gesendeten Nachrichten auf der y-Achse.

Speichere die Datei und führe deinen Code aus. Wenn du Linux verwendest und eine Fehlermeldung erhältst die Folgendes besagt:

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

Stelle sicher, dass tkinter installiert ist. Wenn dies nicht der Fall ist, führe den folgenden Befehl aus, um die Installation vorzunehmen:

sudo apt-get install python3-tk

Wenn du den Code ausführst, erhältst du eine Grafik, die aussieht wie diese:

Als Nächstes erstellst du eine Grafik zur Visualisierung der Anzahl zugestellter Nachrichten.

Informationen zu einer bestimmten WhatsApp-Nummer visualisieren

Im vorherigen Abschnitt haben wir keine Telefonnummern in die Anfrage einbezogen. Daher hat die API Informationen zu allen mit dem WABA verknüpften Telefonnummern zwischen dem Start- und Enddatum zurückgegeben.

Wenn du jedoch Analysedaten für eine oder mehrere Telefonnummer(n) – jedoch nicht alle – abrufen möchtest, musst du die Telefonnummern in einem Array zusammenfassen und diesen an die .phone_numbers -Methode übergeben, wenn du die Anfrage erstellst:

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}')

Der verbleibende Code in sent.py bleibt unverändert. Du erhältst bei der Ausführung lediglich Analysedaten für die angegebenen Telefonnummern.

Anzahl der täglich zugestellten Nachrichten visualisieren

In den letzten beiden Abschnitten haben wir eine Grafik erstellt, um die Anzahl der von den verknüpften Telefonnummern gesendeten Nachrichten pro Tag zu visualisieren. Jetzt erstellen wir eine Grafik zur Visualisierung der zugestellten Nachrichten pro Tag.

Erstelle eine neue Datei mit dem Namen delivered.py. Kopiere dann den Code aus sent.py nach delivered.py.

Anschließend nimmst du einige Änderungen am Code in delivered.pyvor. Zuerst benennst du die Variable oben von no_of_msgs_sent in no_of_msgs_del um, sodass sie die Art der gespeicherten Daten widerspiegelt.

Danach änderst du in der for...in -Schleife den Wert der point.get -Methode von sent zu delivered. Dieser Code-Schnipsel zeigt, wie der Code nach dem Vornehmen der Änderungen aussehen sollte:

# 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()

Wenn du den Code in deinem Terminal ausführst (mit python delivered.py), erhältst du eine Grafik wie die nachfolgende.

Nachdem du nun zwei Sätze von Analysedaten dargestellt hast, visualisierst du nun die Kosten für Nachrichten anhand von conversation_analytics.

Kosten der täglich gesendeten Nachrichten visualisieren

Erstelle wieder eine neue Datei für diesen Abschnitt und nenne sie cost.py. Kopiere den Code aus sent.py nach cost.py. Nun nehmen wir einige Änderungen vor.

Ändere zuerst den Anfrage-Code. Da du die Unterhaltungsinformationen abrufst, setze den fields -Parameter auf conversation_analytics und lege granularity auf dailyfest.

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}')

Beachte, dass das conversation_anaytics -Feld mehrere andere Filterparameter für das Abrufen anderer Informationen unterstützt. Weitere Informationen findest du in der vollständigen Dokumentation.

Nachdem du die oben beschriebene Anfrage ausgeführt hast, solltest du ein Antwortobjekt erhalten, das ähnlich wie dieses aussieht:

{
  "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
          }
        ]
    }
  },
}

Wie oben gezeigt, befinden sich die data_points innerhalb des Datenwörterbuchs. Jeder Datenpunkt im Wörterbuch verfügt über eine Unterhaltungsanzahl und über Unterhaltungskosten.

Als Nächstes änderst du in cost.py die Variable oben von no_of_msgs_del zu cost_of_convo. Ändere in der for...in -Schleife den Wert der point.get -Methode von delivered zu cost. Dieser Code-Schnipsel zeigt, wie der Code nach dem Vornehmen der Änderungen aussehen sollte:

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()

Wenn du den Code in deinem Terminal ausführst (mit python cost.py), erhältst du eine Grafik wie diese.

Das ist schon alles!

Du kannst dieselbe Methode verwenden, um andere Kennzahlen, die die WhatsApp Business Management API liefert, zu visualisieren.

Fazit

In diesem Tutorial haben wir die matplotlib-Bibliothek für das Visualisieren von Daten verwendet, um die Anzahl der täglich gesendeten Nachrichten, der täglich zugestellten Nachrichten und der Kosten jeder Nachrichtenunterhaltung darzustellen.

Die WhatsApp Business Management API stellt dir diese und viele weitere Filterparameter zur Verfügung, die du verwenden kannst, um festzulegen, welche Kennzahlen du in jede Anfrage einbeziehen möchtest. Weitere Informationen findest du in der vollständigen API-Dokumentation.

Die WhatsApp Business Management API liefert Entwickler*innen relevante Informationen und Kennzahlen von den WhatsApp Business-Konten ihrer Benutzer*innen. Du kannst zum Beispiel deinen Benutzer*innen die Anzahl der von ihnen an einem bestimmten Tag gesendeten Nachrichten in ihrem Dashboard anzeigen.

Die Möglichkeiten sind grenzenlos.

* Meta kann nicht für Apps von Drittanbietern in Verantwortung gezogen werden.