Langsung ke konten utama

JSON Poll Answer Telegram Dengan Apps Script

Setelah kita berhasil mengirimkan sebuah poll melalui Bot Telegram, langkah selanjutnya menangkap dan mengolah JSON jawaban poll tersebut.

Artikel ini kelanjutan dari Poll Telegram Dengan Apps ScriptSiLiKiDi

STRUKTUR JSON JAWABAN POLL

Pada artikel sebelumnya sudah dijelaskan kerumitan struktur JSON dari jawaban poll yang pada dasarnya terbagi menjadi dua variasi: Poll User-based dan Poll Anonymous. Masing-masing JSON tersebut memiliki entitas properti yang berbeda dan setiap properti beragam jenisnya:

Contoh lengkap struktur JSON respon dari Telegram bisa anda lihat di repository Telegram-JSON-ResponseSiLiKiDi

TARGET PENGOLAHAN

Target kita kali ini membuat sebuah script yang dapat menangani dua variasi JSON poll tersebut.

  1. Pengolahan dilakukan dengan Google Apps Script
  2. Satu script dapat menangani dua variasi JSON jawaban poll
  3. Mendapatkan semua nama keys dari tiap properti untuk nantinya dijadikan sebagai nama kolom di Sheets
  4. Mendapatkan semua values dari setiap properti untuk disimpan di Sheets
  5. Hasil pengolahan ditampung dalam satu variabel Array

MENDETEKSI JENIS PROPERTI

Banyak cara untuk mendeteksi jenis properti dari entitas JSON seperti constructor hanya saja perlu langkah spesifik, instanceof hanya saja tidak bisa membedakan jenis string, atau typeof hanya saja memperlakukan objek dan array sama sebagai object sehingga sulit untuk mendeteksi keberadaan array.

Properti poll_answer ataupun poll merupakan contoh dari object dengan ciri khas kurung kurawal { } yang di dalamnya berisi objek-objek berjenis string, numerik, boolean, array, bahkan object, dll.


"poll_answer": { 
   "poll_id": "...", 
   "user": {...}, 
   "option_ids": [0,2] 
}

Properti poll_id ataupun id merupakan contoh dari string / numerik / boolean / date dengan ciri khas berisi nilai.

"poll_id": "6301080145537007634"

Properti user juga merupakan contoh dari object perbedaannya berisi properti nilai saja sedangkan poll_answer tidak hanya properti nilai tapi berisi pula objek yang lain.


"user": { 
   "id": 1821266651, 
   "is_bot": false, 
   ..., 
   "language_code": "en" 
}

Properti options dan option_ids keduanya contoh dari array dengan ciri khas kurung bracket [ ], perbedaannya options adalah array yang berisi objek-objek sedangkan option_ids adalah array yang hanya berisi properti nilai.


"options": [ 
   {
      "text": "RED", 
      "voter_count": 0
   }, 
   {...} 
]

"option_ids": [ 0, 1, 2 ]

Di sini kita akan mencoba alternatif lain dengan Object.prototype.toString.call() yang lebih mudah digunakan untuk memberitahu kita tentang jenis properti dengan notasi outputnya: [object Object], [object Array], [object String] dan seterusnya.

Penting untuk mengenali jenis properti yang ada di dalam kiriman JSON karena setiap jenis properti berbeda cara penanganannyaSiLiKiDi

NAMA PROPERTI UNTUK NAMA KOLOM SHEETS

Di dalam JSON dikenal penanda Key dan Value. Key adalah nama/judul dari properti, sedangkan Value adalah isi dari properti tersebut. Misalkan "username": "John Doe" maka yang menjadi Key adalah "username" sedangkan Value-nya adalah "John Doe".

Pada eksperimen kali ini, kita akan mencoba mengumpulkan semua Key tersebut ditampung dalam array yang bertujuan untuk kita jadikan sebagai judul kolom di Google Sheets nantinya.

Untuk judul kolom pada sheet User-based maka targetnya akan kita kumpulkan dari JSON properti-properti berikut ini:


[ "poll_id", "id", "is_bot", "first_name", "last_name", "username", "language_code", "option_ids" ]

Untuk judul kolom pada sheet Anonymous:


[ "id", "question", "text", "voter_count", "total_voter_count", "is_closed", "is_anonymous", "type", "allows_multiple_answers" ]

SATU ARRAY UNTUK DATA PROPERTI DAN DATA NILAINYA

Setelah kita kumpulkan Keys untuk judul kolom, selanjutnya mengumpulkan nilai-nilai dari setiap properti tersebut untuk disimpan di Google Sheets.

Data-data Keys dan Values dari hasil pengumpulan kemudian ditampung dalam satu array. Array tersebut yang akan kita olah nantinya dalam proses penyimpanan data hasil poll ke Google Sheets.

Anda bisa saja tidak mengunakan data Keys bilamana sudah disetel secara manual. Hal ini dimungkinkan karena data Keys dihimpun dalam elemen terpisah dari data Values di dalam array induk tersebut.

FINAL SCRIPT

Final Script berupa fungsi scanJSONPoll() dapat diunduh di repository. Pembahasan artikel ini hanya sebatas eksperimen cara mengolah JSON poll kiriman dari Telegram setiap kali user memberikan jawabannya.

Pada artikel selanjutnya kita mulai bereksperimen menyimpan data poll Telegram ke Google SheetsSiLiKiDi
Dapatkan skrip semua materi di repository

Dukung donasi agar tutorial ini tetap operasional:
Trakteer Saya SiLiKiDi

Komentar

Postingan populer dari blog ini

Kirim Pesan Ke Telegram Dengan Apps Script

Dengan koneksi webhook anda bisa mulai ujicoba mengirim pesan pertama ke Telegram dari Google Apps Script.

Input User Dengan ForceReply Di Telegram

Metode ForceReply memungkinkan Bot memaksa user untuk memberikan input sebelum melanjutkan proses, dengan demikian anda dapat menggelar Step-by-Step formulir di Telegram.