WhatsApp Business 管理 API 讓您能夠存取有關 WhatsApp Business 帳戶 (WABA) 的衡量數據和分析資料。您可以取得關於帳戶的兩種資料:
查詢 API 端點時,您需要新增 analytics
或 conversation_analytics
為網址參數,以指定要取得訊息還是對話的分析資料。
例如,下方範例要求顯示如何取得帳戶相關的訊息分析資料:
https://graph.facebook.com/v14.0/{whatsapp-business-account-ID} ?fields=analytics .{filtering-parameters} &{access-token}
在此範例中,我們指定了要檢索訊息分析資料,這則資料與連結到 WhatsApp Business 帳戶(具有不重複 WhatsApp Business 帳戶編號)之手機號碼相關。隨後的「要求」部分將進一步介紹如何獲取 WhatsApp Business 帳戶編號和存取憑證。
此外,在提出要求時,您可以套用篩選參數來精簡結果。WhatsApp Business 管理 API 端點一共支援六個篩選參數。您必須採用以下參數:
start
:如果您指定開始日期,則回應不包括在指定日期之前傳送的訊息。
end
:如果您指定結束日期,則回應不包括在指定日期之後傳送的訊息。
granularity
:您希望檢索到的分析資料有多精確?可能的值包括 HALF_HOUR、DAY 和 MONTH。
如果是 conversation_analytics
,您可以套用九個篩選參數,其中三個參數 start
、 end
及 granularity
為必要參數。
在本教學導覽中,您將需要:
在本機開發人員機器上安裝 Python 和 pip。*
在 Meta for Developers 上註冊開發人員帳戶、建立一個商業類型應用程式,並將 WhatsApp Business 帳戶新增至該應用程式。
設定—在「為應用程式新增產品」頁面,點擊 WhatsApp 選項上的設定按鈕。
建立 WhatsApp Business 類型應用程式後,您會取得 WhatsApp Business 帳戶編號和臨時存取憑證。在本教學導覽的餘下部分,您會需要用到這兩個密鑰,因此請保管好它們。
您可以新增個人 WhatsApp 號碼作為寄件人,也可使用 WhatsApp 提供的測試手機號碼。
請設定 Python 開發環境,並安裝所需的套件。
建立一個資料夾並為其命名,然後使用指令行工具前往該資料夾。在本網誌中,我們會使用要求資料庫來執行 HTTP 要求,並使用熱門的 Matplotlib 資料庫來建立靜態、動畫和互動式視覺化圖表。執行以下指令以進行安裝:
pip install requests matplotlib
現在,您可使用 Python 要求查詢 API,以從 WhatsApp 取得分析資料,然後使用 Matplotlib 將從 API 接收的資料點繪製成圖表,以視覺化呈現衡量數據。
首先,要求取得分析資料。要做到這一點,請在應用程式資料夾中建立名為 sent.py
的檔案,然後匯入此任務所需的依賴項目:
import datetime import requests import matplotlib.pyplot as plt
接著,建立 API GET
要求,以使用您的 WhatsApp Business 帳戶編號和存取憑證取得分析資料。您可在 Meta for Developers 的開發人員帳戶管理中心找到這些值。 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
如果連結到 WhatsApp Business 帳戶的手機號碼用於在指定時間範圍內傳送訊息,我們會得到一個回應字典物件,如下所示:
{ "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 傳回了指定開始日期和結束日期內連結到 WhatsApp Business 帳戶的所有手機號碼之資訊。
不過,如要檢索一個或多個手機號碼的分析資料,而不是所有手機號碼,則需要將手機號碼放在一個陣列中,並在建立要求時將其傳遞給 .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 管理 API 提供的其他衡量數據。
在本教學導覽中,我們使用 matplotlib 資料視覺化資料庫來製作資料圖表,以視覺化呈現每天傳送的訊息數量、每天送達的訊息數量,以及每次訊息對話的成本。
WhatsApp Business 管理 API 為您提供了本文所述的篩選參數和其他更多參數,供您用來在每個要求中指定您想要的衡量數據。詳情請參閱完整 API 文件。
作為開發人員,WhatsApp Business 管理 API 為您提供來自用戶 WhatsApp 帳戶的相關資訊和衡量數據。舉例來說,您可以在用戶的管理中心向用戶顯示他們在指定日期傳送的 WhatsApp 訊息數量。
還有其他無限可能性等您來探索!
*Meta 不對任何第三方應用程式負責。