Ü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:
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.
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.
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.
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.
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.
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.py
vor. 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
.
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 daily
fest.
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.
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.