WhatsApp Business Management API 可讓您存取 WhatsApp Business 帳號(WABA)的衡量指標和分析資料。您可以取得帳號的兩種相關資料類型:
查詢 API 端點時,您必須加入 analytics
或 conversation_analytics
做為網址參數,以指定您想要訊息或對話的分析資料。
例如,以下要求範例假設您想要取得關於帳號的訊息分析資料:
https://graph.facebook.com/v14.0/{whatsapp-business-account-ID} ?fields=analytics .{filtering-parameters} &{access-token}
在此範例中,我們指定要針對連結到具有專屬 WABA 編號之 WABA 的電話號碼,擷取訊息分析資料。在隨後的「必備條件」小節中,您將進一步瞭解如何取得 WABA 編號和存取權杖。
此外,在發出要求時,您也可以套用篩選參數來精簡結果。Business Management API 端點總共可支援六個篩選參數。您必須提供下列參數:
start
:如果指定開始日期,則回應不包含給定日期之前發送的訊息。
end
:如果指定結束日期,則回應不包含給定日期之後發送的訊息。
granularity
:您希望所擷取的分析資料多精細?可能的值包括 HALF_HOUR、DAY 和 MONTH。
至於 conversation_analytics
,您有九個篩選參數,其中三個 — start
、 end
和 granularity
— 是必要參數。
就此教學導覽而言,您需要:
在本端開發電腦上安裝 Python 和 pip*。
在 Meta for Developers 上註冊開發人員帳號、建立商業類型應用程式,並將 WhatsApp Business 帳號加入該應用程式。
設定:在「新增產品到應用程式」頁面上,點擊 WhatsApp 選項上的設定按鈕。
建立 WhatsApp 商業類型應用程式後,您會取得 WABA 編號和暫時存取權杖。您在此教學導覽的其餘部分會需要這兩個密鑰,請妥善保存。
您可以加入個人的 WhatsApp 號碼做為傳送者,也可以使用 WhatsApp 提供的測試電話號碼。
設定 Python 開發環境,並安裝必要的套件。
建立資料夾並為其命名,然後使用命令列工具導覽至該資料夾。在此部落格中,我們會使用 requests 資料庫來發出 HTTP 要求,並使用熱門的 Matplotlib 資料庫來建立靜態、動畫和互動式的視覺化效果。請執行下列指令來加以安裝:
pip install requests matplotlib
現在,您將能夠使用 Python 要求來查詢 API,以取得來自 WhatsApp 的分析資料,然後使用 Matplotlib 將衡量指標視覺化,利用從 API 收到的資料點來繪製圖表。
首先要求分析資料。若要執行此作業,請在您的應用程式資料夾中建立一個名為 sent.py
的檔案,並匯入此任務所需的相依項:
import datetime import requests import matplotlib.pyplot as plt
接著,建立 API GET
要求,以使用您的 WABA 編號和存取權杖來取得分析資料。您可以在 Meta for Developer 的開發人員帳號主控板上找到這些值。 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)
在上述要求中,我們依照 API 的要求以 UNIX 樣式呈現開始日期。您可以使用這個免費轉換器來轉換成人類可讀的時間戳記或 UNIX 時間戳記。此程式碼在最後一行將回應轉換成 JSON 格式並列印出來。
請執行下列指令來執行此程式碼:
python app.py
如果使用連結到 WABA 的電話號碼在指定的時間範圍內發送訊息,我們會取得如下所示的回應字典物件:
{ "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" }
在此案例中, data_points
清單包含四個字典。每個都包含所連結之 WhatsApp 號碼在指定日期範圍內發送和送達的訊息數量。
現在您已經有了資料,接下來您必須擷取所需的資訊。由於我們想要將每天發送的訊息數量視覺化,因此必須從每個字典取得 start
和 sent
值。
為此,請使用 Python for...in
迴圈對資料點執行迴圈。將每個資料物件的開始時間從 UNIX 樣式轉換成人類可讀的版本。然後,只取得該月的日期數值,並將其加入日期清單中。將已發送的訊息數量儲存在另一個名為 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()
在這裡,您會繪製一個基本圖表,x 軸為日期,y 軸為已發送的訊息數量。
請儲存檔案並執行程式碼。如果您使用 Linux 並收到如下錯誤:
UserWarning: Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figure.
請確認您已安裝 tkinter。如果尚未安裝,請執行下列指令進行安裝:
sudo apt-get install python3-tk
如果您執行程式碼,將會得到看起來像這樣的圖表:
接著,您要建立圖表來將已送達的訊息數量視覺化。
在上一節中,我們並未在要求中包含電話號碼。因此,API 傳回的資訊會包含指定開始和結束日期內連結至 WABA 的所有電話號碼。
然而,如果你想要擷取一或多個電話號碼的分析資料,但不是所有電話號碼,則需要將電話號碼放在陣列中,並在建立要求時將其傳遞至 .phone_numbers
方法:
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}')
sent.py
中的其餘程式碼保持不變。執行時,您只會獲得指定電話號碼的分析資料。
在前兩節中,我們繪製了圖表來將透過 WhatsApp 連結之電話號碼每天發送的訊息數量視覺化。現在,我們要繪製圖表來將每天送達的訊息數量視覺化。
請建立新檔案並命名為 delivered.py
。然後,將 sent.py
的程式碼複製到 delivered.py
中。
接著,對 delivered.py
中的程式碼進行一些變更。首先,將最上方的變數從 no_of_msgs_sent
重新命名為 no_of_msgs_del
以反映您要儲存的資料類型。
接著,在 for...in
迴圈中,將 point.get
方法中的值從 sent
重新命名為 delivered
。變更後的程式碼片段應如下所示:
# 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()
在終端機上執行程式碼(使用 python delivered.py
)後,您將獲得如下圖表。
現在您已經呈現了兩組訊息分析資料,接下來您要使用 conversation_analytics
中。
再次建立新檔案以用於本節,並將檔案命名為 cost.py
。將 sent
中。py
的程式碼複製到 cost
中。py
中。現在我們來做一些修改。
首先,修改要求程式碼。由於您是要取得對話資訊,因此請將 fields
參數設為 conversation_analytics
,並將 granularity
重新命名為 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}')
請注意, conversation_anaytics
欄位支援其他數個篩選參數來獲得其他類型的資訊。若要進一步瞭解,請參閱完整說明文件。
發出上述要求後,您應該會取得非常類似以下內容的回應物件:
{ "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 } ] } }, }
如上所示, data_points
在資料字典中。字典中的每個資料點都有對話數量和成本。
接著,在 cost.py
中,將 no_of_msgs_del
重新命名為 cost_of_convo
。在 for...in
迴圈中,將 point.get
方法中的值從 delivered
重新命名為 cost
。變更後的程式碼片段應如下所示:
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()
如果您使用終端機來執行程式碼(使用 python cost.py
),您將獲得如下圖表:
大功告成!
若要進一步取得其他資料,您可以依循相同方法,將 WhatsApp Business Management API 提供的其他衡量指標視覺化。
在此教學導覽中,我們使用了 matplotlib 資料視覺化資料庫來將資料視覺化,以顯示每天發送的訊息數量、每天送達的訊息數量,以及每個訊息對話的成本。
WhatsApp Business Management API 為您提供這些篩選參數和許多功能,可讓您在每個要求中用來指定想要的衡量指標。若要進一步瞭解,請參閱完整 API 說明文件。
做為開發人員,WhatsApp Business Management API 可為您提供用戶 WhatsApp 帳號的相關資訊和衡量指標。例如,您可以在用戶的主控板上為用戶顯示他們在指定日期發送的 WhatsApp 訊息數量。
可能性永無止境!
*Meta 無法為任何第三方應用程式負責。