Langsung ke konten utama

Menyimpan Hasil Poll Telegram Ke Google Sheets

Melanjutkan hasil pengolahaan JSON jawaban poll kiriman Telegram dengan menyimpannya ke Google Sheets sekaligus mengirimkan pesan balik apresiasi atau hasil poll ke user.

BAHAN BAKU

Untuk mengimplementasikan eksperimen ini perlu dipersiapkan beberapa hal:

  1. Satu file Google Sheets yang telah di-publish dalam bentuk web, simak caranya di artikel ini.
  2. ID dari Google Sheets tersebut, cara mendapatkan ID silahkan simak dalam artikel ini.
  3. Bot Telegram berikut API Token, anda dapat menyimak cara membuatnya dan mendapatkan API Token pada artikel ini.
  4. Satu file Apps Script, anda bisa menyimak cara membuatnya dan deployment Web Apps di artikel ini.
  5. Script eksperimen ini yang dapat unduh atau salin dari repository.
  6. ID User anda sebagai admin bot yang akan digunakan untuk menampung keterangan error bila terjadi kendala, gunakan @simrsinfobot untuk mengetahui ID User anda.

Di dalam script terdapat beberapa konstata yang harus anda isi dengan ID, API TOKEN, dan URL file bahan baku milik anda:

Bila anda menemui kendala saat deployment silahkan simak cara penanganannya pada artikel iniSiLiKiDi

TAHAPAN PROSES

  1. Pengiriman poll dengan sendPoll sesuai permintaan user [lihat artikel sebelumnya]
  2. Pengolahan JSON jawaban poll dari user [lihat artikel sebelumnya]
  3. Penyimpanan poll ke Google Sheets akan dibahas pada artikel ini
  4. Pengiriman feedback pesan balik ke user [lihat artikel sebelumnya]
Contoh script setiap proses sesuai judul artikel dapat dilihat di repositorySiLiKiDi

GOOGLE SHEETS

Akses Sheets Berdasarkan ID

Sangat disarankan untuk mengakses Sheets menggunakan ID yang sifatnya permanen tidak berubah sekalipun berpindah folder atau berganti nama file. ID Sheets terdapat dalam url saat membuka Sheets tersebut:

Gunakan metode SpreadsheetApp.openById() untuk mengakes file Sheets berdasarkan ID:

const sheetFile = SpreadsheetApp.openById( sheetID );

Di dalamnya file Sheets terdapat 3 sheet: USER-BASED untuk menampung data poll user-based, ANONYMOUS untuk menampung data poll anonymous, dan USER-BASED yang nantinya menjadi sheet web share untuk dilihat user [dibahas pada artikel selanjutnya].

Anda dapat mengganti masing-masing nama sheet sesuai kebutuhan. Berikut ini cara mengakses sheet setelah file sheets berhasil dibuka dengan catatan bila sheet tidak ditemukan atau nama sheet tidak sesuai dengan yang dideklarasikan di script, maka akan dibuatkan sheet baru dengan insertSheet:


const sheetID = "1eM0zrhyVGDTH6YXiqE6bD8fZvgMaHF7zw";
const sheetFile = SpreadsheetApp.openById( sheetID );
const sheetName = 
  sheetFile.getSheetByName( pollSheet ) ?
  sheetFile.getSheetByName( pollSheet ) :
  sheetFile.insertSheet( pollSheet );

Anda dapat bereksperimen yang sama untuk memeriksa eksistensi file Sheets bila file tersebut tidak ditemukan dibuat baru dengan SpreadsheetApp.create() dan untuk mendapatkan ID-nya gunakan getId().

Contoh Google Sheets yang digunakan dalam eksperimen ini bisa anda unduh di siniSiLiKiDi

OTOMATISASI NAMA HEADER

Pada artikel JSON Poll Answer Telegram Dengan Apps Script dikenalkan fungsi scanJSONPoll() yang khusus mengolah JSON jawaban poll user untuk dipilah menjadi kumpulan nama header dan data jawaban poll itu sendiri:

Dengan memanfaatkan scanJSONPoll() maka kita bisa mengotomatisasi judul kolom tanpa perlu dibuat sebelumnya atau judul header masih kosong dengan metode setValues():

sheetName.getRange( 1, index + 1 ).setValue( pollKeys[index] );

Sehingga judul kolom di sheet akan sama persis dengan nama properti [Keys] pada JSON jawaban poll:

PENYIMPANAN DATA POLL KE SHEETS

Fungsi scanJSONPoll() menghasilkan sebuah array yang berisi dua sub-array yang salah satunya berisi array data jawaban poll dari user.

Untuk mengakses kedua sub-array tersebut gunakan notasi dengan kurung bracket dimulai dengan 0 sebagai elemen pertama berisi kumpulan nama Keys:


  const pollKeys = pollData[0];
  const pollValues = [ pollData[1] ];

pollKeys adalah array yang terdiri dari kumpulan nama Keys untuk menjadi judul kolom. Sedangkan pollValues adalah array yang terdiri dari data jawaban poll dari user.

pollValues inilah yang akan kita simpan di Sheets dengan menggunakan metode setValues():

sheetData.setValues( pollValues );

FINAL SCRIPT

Final Script dapat anda unduh di repository. Anda bisa membuatnya dalam modular sebagai modul tersendiri ataupun singular dalam satu file Code.gs di Apps Script.

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.