Kembali ke Beranda untuk Developer

How to Visualize WhatsApp Account Metrics in Your App

19 Desember 2022OlehRashed Talukder

API Pengelolaan WhatsApp Business memberi Anda akses ke metrik dan analitik tentang Akun WhatsApp Business (WABA) Anda. Anda bisa mendapatkan dua jenis data tentang akun Anda:

  • Analitik untuk pesan: Jumlah pesan yang dikirim dan disampaikan oleh nomor telepon yang terkait dengan WABA tertentu dalam periode tertentu.
  • Analitik untuk percakapan: Percakapan dan informasi biaya untuk pesan yang dikirim dalam periode tertentu.

Saat meng-kueri endpoint API, Anda wajib menentukan apakah Anda ingin analitik untuk pesan atau percakapan dengan menambahkan analytics atau conversation_analytics sebagai parameter untuk URL.

Contoh: ini adalah contoh permintaan jika Anda ingin mendapatkan analitik pesan tentang akun Anda:

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

Dalam contoh ini, kami menentukan bahwa kami ingin mengambil analitik pesan untuk nomor telepon yang tertaut ke WABA yang memiliki ID WABA unik. Anda akan mempelajari selengkapnya tentang mendapatkan ID WABA dan token akses Anda di bagian Persyaratan berikut ini.

Selain itu, saat membuat permintaan, Anda dapat menerapkan parameter pemfilteran untuk menyaring hasilnya. Endpoint API Pengelolaan Bisnis mendukung enam parameter pemfilteran secara keseluruhan. Anda harus memiliki hal berikut ini:

  • start: Jika Anda menentukan tanggal mulai, tanggapan tidak menyertakan pesan yang dikirim sebelum tanggal yang ditentukan.

  • end: Jika Anda menentukan tanggal akhir, tanggapan tidak menyertakan pesan yang dikirim setelah tanggal yang ditentukan.

  • granularity: Seberapa rinci analitik yang Anda inginkan? Nilai yang mungkin termasuk HALF_HOUR, DAY, dan MONTH.

Untuk conversation_analytics, Anda memiliki sembilan parameter pemfilteran, tiga di antaranya— start, end, dan granularity —wajib.

Persyaratan

Untuk tutorial ini, Anda akan perlu:

  • Menginstal Python dan pip di mesin pengembangan lokal Anda.*

  • Daftar untuk akun developer di Meta untuk Developer, buat Aplikasi Jenis Bisnis, dan tambahkan Akun WhatsApp Business ke Aplikasi.

  • Menyiapkan—di halaman Tambahkan Produk ke Aplikasi Anda, klik tombol Siapkan di opsi WhatsApp.

Setelah membuat Aplikasi Jenis WhatsApp Business, Anda akan mendapatkan ID WABA dan token akses sementara. Anda memerlukan kedua kode ini untuk sisa tutorial ini, jadi simpanlah keduanya.

Anda dapat menambahkan nomor WhatsApp pribadi Anda sebagai pengirim atau menggunakan nomor telepon pengujian yang disediakan oleh WhatsApp.

Membuat Aplikasi Python untuk Memvisualisasikan Data

Siapkan lingkungan pengembangan Python dan instal paket yang diperlukan.

Buat folder, beri nama, lalu arahkan ke folder menggunakan fitur baris perintah. Untuk blog ini, kami akan menggunakan pustaka permintaan untuk membuat permintaan HTTP dan galeri Matplotlib yang populer untuk membuat visualisasi statis, animasi, dan interaktif. Jalankan perintah berikut untuk menginstalnya:

pip install requests matplotlib

Sekarang, Anda akan dapat menggunakan permintaan Python untuk meng-kueri API untuk data analitik dari WhatsApp, lalu menggunakan Matplotlib untuk memvisualisasikan metrik dengan membuat grafik dengan titik data yang diterima dari API.

Memvisualisasikan Jumlah Pesan Terkirim per Hari

Mulai dengan meminta data analitik. Untuk melakukannya, buat file bernama sent.py di folder aplikasi Anda dan impor dependensi yang diperlukan untuk tugas ini:

import datetime
import requests
import matplotlib.pyplot as plt

Berikutnya, buat permintaan GET API untuk mendapatkan analitik menggunakan ID WABA dan token akses Anda. Anda dapat menemukan nilai ini di dasbor akun developer Anda pada Meta untuk Developer. Kode untuk permintaan GET adalah sebagai berikut:

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)

Dalam permintaan di atas, tanggal mulai diberikan dalam gaya UNIX, seperti yang dibutuhkan API. Anda dapat menggunakan konverter gratis untuk mengonversi antara cap waktu yang dapat dibaca manusia dan cap waktu UNIX. Kode mengonversi tanggapan ke format JSON pada baris terakhir dan mencetaknya.

Jalankan perintah berikut untuk menjalankan kode:

python app.py

Jika nomor telepon yang tertaut ke WABA digunakan untuk mengirim pesan dalam jangka waktu yang ditentukan, kami mendapatkan objek kamus tanggapan yang terlihat seperti berikut:

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

Dalam kasus ini, daftar data_points berisi empat kamus. Masing-masing berisi jumlah pesan yang dikirim dan dikirim oleh nomor WhatsApp tertaut selama rentang tanggal yang ditentukan.

Sekarang setelah Anda memiliki data, Anda harus mengambil informasi yang diperlukan. Karena kita ingin memvisualisasikan jumlah pesan terkirim setiap hari, kita harus mendapatkan nilai start dan sent dari setiap kamus.

Untuk melakukannya, loop melalui poin data menggunakan loop for...in Python. Konversikan waktu mulai dari gaya UNIX ke versi yang dapat dibaca manusia untuk setiap objek data. Kemudian, dapatkan hanya angka tanggal dalam bulan itu dan tambahkan ke daftar hari. Simpan jumlah pesan terkirim di daftar lain yang bernama 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()

Di sini, Anda menggambar grafik dasar dengan sumbu x sebagai hari dan sumbu y sebagai pesan terkirim.

Simpan file dan jalankan kode Anda. Jika Anda menggunakan Linux dan Anda mendapatkan pesan kesalahan berikut:

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

Pastikan tkinter sudah terinstal. Jika belum, jalankan perintah berikut untuk menginstalnya:

sudo apt-get install python3-tk

Jika Anda menjalankan kode tersebut, Anda akan mendapatkan grafik yang terlihat seperti ini:

Berikutnya, Anda akan membuat grafik untuk memvisualisasikan jumlah pesan yang tersampaikan.

Memvisualisasikan Informasi untuk Nomor WhatsApp Tertentu

Di bagian sebelumnya, kami tidak menyertakan nomor telepon dalam permintaan. Akibatnya, API memberikan informasi untuk semua nomor telepon yang tertaut ke WABA dalam tanggal mulai dan akhir yang ditentukan.

Namun, jika Anda ingin mengambil data analitik untuk satu atau beberapa nomor telepon tetapi tidak semuanya, Anda perlu memasukkan nomor telepon ke array dan meneruskannya ke metode .phone_numbers saat membuat permintaan:

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

Sisa kode di sent.py tetap sama. Anda hanya mendapatkan analitik untuk nomor telepon yang ditentukan saat Anda menjalankannya.

Memvisualisasikan Jumlah Pesan Tersampaikan per Hari

Di dua bagian terakhir, kami membuat grafik untuk memvisualisasikan jumlah pesan yang dikirim setiap hari oleh nomor telepon yang tertaut melalui WhatsApp. Sekarang, mari buat grafik untuk memvisualisasikan jumlah pesan yang dikirim setiap hari.

Buat file baru dan beri nama delivered.py. Berikutnya, salin kode dari sent.py ke delivered.py.

Berikutnya, buat beberapa perubahan pada kode di delivered.py. Pertama, ganti nama variabel di atas dari no_of_msgs_sent ke no_of_msgs_del untuk mencerminkan jenis data yang Anda simpan.

Berikutnya, di loop for...in , ubah nilai dalam metode point.get dari sent ke delivered. Snippet kode Anda seharusnya terlihat seperti ini setelah perubahan dilakukan:

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

Jika Anda menjalankan kode di terminal (dengan python delivered.py), Anda akan mendapatkan grafik seperti di bawah ini.

Sekarang setelah Anda mewakili dua set data analitik untuk pesan, Anda akan mewakili biaya pesan menggunakan conversation_analytics.

Memvisualisasikan Biaya Pesan Terkirim per Hari

Sekali lagi, buat file baru untuk bagian ini, dan namai file cost.py. Salin kode dari sent.py ke cost.py. Sekarang, mari kita buat beberapa modifikasi.

Pertama, ubah kode permintaan. Karena Anda mendapatkan informasi percakapan, atur parameter fields ke conversation_analytics dan atur granularity ke 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}')

Perhatikan bahwa kolom conversation_anaytics mendukung beberapa parameter pemfilteran lain untuk mendapatkan jenis informasi lainnya. Untuk mempelajari selengkapnya, baca dokumentasi lengkap.

Setelah membuat permintaan di atas, Anda akan mendapatkan objek tanggapan yang sangat mirip dengan berikut ini:

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

Seperti terlihat di atas, data_points ada di dalam kamus data. Setiap titik data dalam kamus memiliki jumlah dan biaya percakapan.

Berikutnya, di cost.py, ubah variabel di atas dari no_of_msgs_del ke cost_of_convo. Di loop for...in , ubah nilai dalam metode point.get dari delivered ke cost. Snippet kode Anda seharusnya terlihat seperti ini setelah perubahan dilakukan:

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

Jika Anda menjalankan kode menggunakan terminal (dengan python cost.py), Anda akan mendapatkan grafik seperti ini:

Selesai!

Untuk melangkah lebih jauh, Anda dapat mengikuti metode yang sama untuk memvisualisasikan metrik lain yang disediakan API Pengelolaan WhatsApp Business.

Kesimpulan

Di tutorial ini, kita menggunakan galeri visualisasi data matplotlib untuk memvisualisasikan data yang menunjukkan jumlah pesan terkirim per hari, jumlah pesan tersampaikan per hari, dan biaya setiap percakapan pesan.

API Pengelolaan WhatsApp Business memberi Anda parameter pemfilteran ini dan banyak lagi, yang dapat Anda gunakan untuk menentukan metrik yang Anda inginkan di setiap permintaan. Untuk mempelajari selengkapnya, baca dokumentasi API lengkap.

Sebagai developer, API Pengelolaan WhatsApp Business memberi Anda informasi dan metrik yang relevan dari akun WhatsApp pengguna Anda. Contoh: Anda dapat menunjukkan kepada pengguna Anda jumlah pesan WhatsApp yang telah mereka kirim pada hari tertentu di dasbor mereka.

Kemungkinannya tak terbatas!

*Meta tidak dapat dimintai pertanggungjawaban atas aplikasi pihak ketiga mana pun.