
Skrip ini hanya menyentuh permukaan dari apa yang mungkin dilakukan dengan menggunakan Python, Plotly Dash, dan API kami.
Hampir setahun yang lalu, Tom Mairs, direktur kesuksesan pelanggan Bird, menulis alat mailer menggunakan Bird APIs. Dalam postingan ini, saya melanjutkan dari mana dia berhenti. Alatnya memungkinkan pengiriman pekerjaan secara terjadwal, tetapi bagaimana jika kita ingin membuat dashboard dan log acara kita sendiri?
Mungkin saya ingin membuat dashboard khusus untuk kelompok bisnis atau dashboard yang menghadap pelanggan, tetapi tidak memberikan pengguna akses penuh ke antarmuka pengguna Bird. Skrip ini hanya menyentuh permukaan dari apa yang mungkin dilakukan dengan memanfaatkan Python, Plotly Dash, dan API kami. Saat membangun dashboard yang memproses data API dalam volume tinggi, sadari bahwa komponen infrastruktur seperti DNS dapat menjadi hambatan - kami mengalami tantangan penskalaan DNS AWS yang memengaruhi kemampuan pemrosesan data kami. Bagi penggemar alur kerja visual, Anda juga dapat menjelajahi mengintegrasikan Flow Builder dengan Google Cloud Functions dan Vision API untuk menambahkan otomatisasi bertenaga AI ke dalam jalur pemrosesan data Anda.
Ketika saya mulai mencari online, saya ingin menemukan jalur dengan sedikit hambatan. Saya bisa saja membuat semua dashboard dan UI sendiri dalam HTML dan python, namun, setelah beberapa pencarian di Google, saya menemukan Plotly’s Dash, yang mudah diintegrasikan dengan python. Saya memilih Dash dengan 2 alasan: 1) ini adalah open source, dan 2) setelah membaca dokumentasinya tampaknya mudah disesuaikan dengan apa yang saya coba lakukan. Dash adalah perpustakaan open-source yang ideal untuk membangun dan menerapkan aplikasi data dengan antarmuka pengguna yang disesuaikan. Ini membuat pembuatan antarmuka pengguna menjadi sangat sederhana. Pertanyaannya kemudian menjadi, seberapa kompleks saya ingin membuat aplikasi ini? Semakin banyak waktu yang saya habiskan, semakin banyak fitur yang ingin saya tambahkan.
Untuk proyek awal, saya ingin memastikan bahwa saya memiliki dashboard dengan metrik yang dapat disesuaikan dan rentang waktu yang dapat dipilih. Awalnya, saya memulai dengan dashboard di mana Anda hanya dapat memilih satu metrik dari dropdown. Kemudian, saat saya mendapatkan umpan balik dari rekan kerja, saya memperbaiki dashboard sedikit untuk menambahkan multi-pilih dan judul sumbu. Saya juga memutuskan untuk menambahkan tab tambahan untuk log acara. Saya sampai pada titik di mana saya puas dengan apa yang saya miliki sebagai titik awal yang baik bagi siapa saja yang ingin membangun dashboard mereka sendiri. Untuk pengembang yang ingin memasukkan data webhook real-time ke dalam dashboard mereka, lihat panduan kami tentang membangun konsumen webhook dengan Azure Functions. Tentu saja, saya menempatkan proyek ini di Github agar Anda dapat menggandakan atau membuat cabang.
Memulai
Untuk mengakses app ini, Anda perlu memastikan menjalankan python 3.10 atau lebih dan menginstal perpustakaan berikut:
requests
dash
pandas
Kemudian, masukkan API key Anda ke dalam App.py dan jalankan app-nya. Ini akan berjalan pada http://localhost:8050. Untuk informasi lebih lanjut tentang menerapkan ini ke server publik (seperti AWS), silakan lihat sumber daya berikut:
Membuat Halaman Dashboard
Membuat Halaman Detil Event
Halaman detail acara sedikit lebih sulit karena saya tidak tahu cara terbaik untuk menyajikan semua metrik acara dalam cara yang mudah dibaca. Saya mempertimbangkan untuk menambahkan parameter penyaringan ke halaman ini, namun, saya memutuskan bahwa itu akan menambah waktu yang signifikan untuk proyek ini karena tabel tersebut kemudian harus menjadi dinamis (bersama dengan menambahkan parameter, callback, dll.). Saya memutuskan untuk menampilkan semua acara dan menempatkan cap waktu pertama (karena tanpa menempatkan cap waktu pertama, grafik tidak mudah dibaca). Awalnya, saya menemukan bahwa dengan hanya HTML mentah, tabelnya sangat sulit di mata. Tidak ada batas dan tidak ada perbedaan warna untuk header versus baris. Untuk membuat tabel lebih mudah dibaca, saya bisa menggunakan CSS di dalam Dash.
Ide untuk detail acara hampir sama dengan dasbor, kecuali kali ini, saya memanggil Events API dan membawa semua acara. Perhatikan bahwa detail acara hanya menunjukkan 10 acara terbaru (menggunakan parameter max_rows dan penyaringan API). Ini dapat ditingkatkan, namun, saya memutuskan untuk menampilkan 10 acara terbaru karena semakin banyak acara yang ditampilkan, semakin lama waktu yang dibutuhkan untuk panggilan API. Satu perbaikan signifikan yang dapat dilakukan adalah kemampuan untuk membagi halaman dan menyertakan Halaman Berikutnya / Halaman Sebelumnya dalam antarmuka pengguna.
Untuk membangun tab acara (halaman), pertama, saya memanggil Events API dan mengurai respons JSON menjadi kerangka data. Kemudian saya menyortir dan menyusun ulang kerangka data untuk menempatkan cap waktu sebagai kolom pertama. Terakhir, saya membangun tabel HTML dengan mengiterasi melalui kerangka data.
#Bangun dan panggil parameter API acara params = { "events" : "delivery,injection,bounce,delay,policy_rejection,out_of_band,open,click,generation_failure,generation_rejection,spam_complaint,list_unsubscribe,link_unsubscribe", "delimiter" : ",", "page" : "1", "per_page" : "10" } api_url = BASE_URL + "/events/message" response_API = requests.get(api_url, headers = {"Authorization" : API_KEY}, params=params) response_info = json.loads(response_API.text) new_df = pd.json_normalize(response_info, record_path=['results']) max_rows=10 #Jumlah maksimal hasil ditampilkan dalam tabel acara #Tempatkan cap waktu sebagai kolom pertama dalam tabel new_df = new_df.reindex(sorted(new_df.columns), axis=1) cols = ['timestamp'] new_df = new_df[cols + [c for c in new_df.columns if c not in cols]] #Tampilkan HTML baru dengan tabel acara (catatan, tabel ini juga merujuk pada table.css) return html.Div([ html.H2("Detail Acara"), html.Table([ html.Thead( html.Tr([html.Th(col) for col in new_df.columns],className="table_css") ), html.Tbody([ html.Tr([ html.Td(new_df.iloc[i][col],className="table_css") for col in new_df.columns ]) for i in range(min(len(new_df), max_rows)) ]) ]) ])
Yang terlihat seperti ini di antarmuka pengguna.

Langkah Selanjutnya
Bagi seseorang yang ingin membuat dashboard atau log acara mereka sendiri, ini adalah awal yang baik. Dengan kustomisasi di sini, langit adalah batasnya.
Seperti yang dibahas di atas, beberapa peningkatan di masa depan yang bisa dilakukan adalah:
Menambahkan analitik pengiriman ke dashboard
Menambahkan lebih banyak filter ke dashboard
Opsi caching yang memungkinkan sehingga API tidak dipanggil setiap kali untuk menampilkan halaman
Peningkatan UI
Menambahkan penyaringan dan paginasi ke halaman detail acara
Saya akan tertarik mendengar umpan balik atau saran untuk mengembangkan proyek ini.
~ Zach Samuels, Bird Senior Solutions Engineer