通过使用 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}
在此示例中,我们指定要检索与具有唯一 WABA 编号的 WABA 相关联的电话号码的消息分析数据。随后的“要求”部分将进一步介绍如何获取 WABA 编号和访问口令。
此外,在提出请求时,您可以应用筛选参数来细化结果。WhatsApp Business 管理 API 端点共支持六个筛选参数。您必须采用以下参数:
start
:如果您指定开始日期,则响应不包括在指定日期之前发送的消息。
end
:如果您指定结束日期,则响应不包括在指定日期之后发送的消息。
granularity
:您希望以何种精确程度检索分析数据?可能的值包括 HALF_HOUR、DAY 和 MONTH。
对于 conversation_analytics
,您可以应用九个筛选参数,其中 start
、 end
及 granularity
这三个为必要参数。
在本教程中,您将需要:
在本地开发机上安装 Python 和 pip。*
设置—在“为应用添加产品”页面上,点击 WhatsApp 选项上的设置按钮。
创建 WhatsApp 业务类应用后,您会获得 WABA 编号和临时访问口令。在本教程的余下部分,您会需要用到这两者,因此请妥善保管。
您可以新增个人 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
请求,以使用您的 WABA 编号和访问口令获取分析数据。您可在 Meta 开发者的开发者帐户面板找到这些值。 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 相关联的电话号码发送消息,我们会得到响应字典 (dictionary) 对象,如下所示:
{ "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 管理 API 提供的其他指标。
在本教程中,我们使用 matplotlib 数据可视化库来制作图表,以可视化每天的已发送消息数量、每天的已送达消息数量,以及各个消息对话的成本。
WhatsApp Business 管理 API 为您提供了本文所述的筛选参数和其他更多参数,供您用来在每个请求中指定您想要的指标。详情请参阅完整 API 文档。
作为开发者,WhatsApp Business 管理 API 为您提供来自用户 WhatsApp 帐户的相关信息和指标。举例来说,您可以在用户的面板上显示他们在指定日期发送的 WhatsApp 消息数量。
还有其他无限可能性等您来探索!
*Meta 不对任何第三方应用负责。