Langsung ke konten utama

Handling Error Google Apps Script

Menangkap error akan membantu penelusuran sumber masalah dengan memanfaatkan try-catch, hasOwnProperty(), if-else, String(), atau Logger.log

Materi ini melanjutkan dari Kirim Pesan Ke Telegram Dengan Apps Script SiLiKiDi

MENDAPATKAN ID USER DARI ADMIN BOT

Penting untuk mengarahkan ke mana pesan error dikirimkan agar tidak tampil ke pengguna bot dan penting pula untuk tidak membiarkan user tanpa respon saat terjadi error apakah itu berupa pesan bahwa sistem sedang dalam pemeliharaan dan lain sebagainya.

Diperlukan ID User yang menjadi destinasi pengiriman pesan error. Anda bisa memanfaatkan bot @simrsinfobot untuk mengetahui info ID User anda.

Artikel Cara Mendapatkan ID User, ID Sticker dan ID Bot menjelaskan rinci untuk kebutuhan iniSiLiKiDi

MENGARAHKAN PESAN ERROR KE ADMIN BOT

Setelah ID User anda dapatkan, selanjutnya tampung dalam sebuah konstanta khusus:

const telegramAdminID = "IDUSERANDA";

Konstanta ini yang akan menjadi destinasi pada payload chat_id saat pengiriman pesan error:


var dataPesan = {
    method: "post",
    payload: {
      method: "sendMessage",
      chat_id: String(telegramAdminID),
      text: String(e)
    }
};
UrlFetchApp.fetch(telegramAPIURL + "/", dataPesan);

MENGGUNAKAN TRY-CATCH

Filosofinya "Coba Dulu [Try] Tangkap Error [Catch]" jadi penanganan error ada di bagian catch. Bungkuslah semua script ke dalam try lalu buat fungsi pengiriman pesan error ke dalam catch seperti gambar berikut ini:

Saat catch menangkap terjadi error, ia akan langsung meneruskan ke Admin BOT berupa kiriman pesan yang berisi error tersebut. Contoh pesan error yang akan diterima Admin di Telegram:


Exception: Verzoek voor https://api.telegram.org is mislukt.
Foutcode: 403.
Ingekorte serverreactie:
  {
    "ok":false,
    "error_code":403,
    "description":"Forbidden: bot was kicked from the group chat"
  }
(Gebruik de optie muteHttpExceptions om de volledige reactie te onderzoeken.)

CEK DENGAN if-else DAN hasOwnProperty()

Penerapan if-else sangat berguna dalam pelacakan dan pengalihan proses jika tidak memenuhi syarat kondisi tertentu. Bisa diterapkan dengan dua gaya: struktural dan ternary.

hasOwnProperty()

Konten respon JSON yang dikirim Telegram terkadang berbeda-beda sehingga bila kita mendeklarasikan variabel sedangkan properti yang dimaksud tidak disertakan dalam kiriman JSON maka akan muncul error yang menyebut properti null.

Di sinilah kegunaan hasOwnProperty() sejak di awal dipastikan terlebih dulu apakah properti yang dimaksud benar-benar ada dalam kiriman JSON dari Telegram. Hasilnya berupa true atau false yang bisa dijadikan patokan kemudian dalam pengolahan kondisi.

Ternary Conditional

Ternary conditional merupakan versi ringkas cukup dengan satu baris dengan ciri khas tanda pemisah ? untuk penanda syarat kondisi dan : untuk aksi bila sesuai dan tidak sesuai kondisi. Contoh:

var messageText = data.message.hasOwnProperty("text") ? data.message.text : "";

Kondisi di atas memeriksa apakah properti text disertakan dalam respon JSON kiriman Telegram. Jika ada maka variabel messageText diisi dengan konten yang dibawa text tersebut. Jika tidak ada maka messageText ganti dengan string kosong.

Structural Conditional

Gaya ternary di atas tak ada bedanya dengan gaya kondisi struktural berikut:


if (data.message.hasOwnProperty("text")) {
  var messageText = data.message.text;
} else {
  var messageText = "";
}

PASTIKAN DENGAN String()

Penggunaan fungsi konverter String() akan terasa kegunaannya ketika berhadapan dengan variabel yang bernilai numerik. Kondisi ini sulit untuk menentukan apakah nilai numerik tersebut benar-benar murni integer atau string.

Sedangkan properti dan payload saat pengiriman pesan mengharuskan untuk berbentuk string sekalipun itu adalah numerik. Di sinilah kegunaan String() yang akan mengkonversi menjadi string sekalipun itu bentuknya numerik.

Dalam keterangan Telegram API disebutkan chat_id harus berbentuk string sedangkan chat_id yang dikirimkan dari Telegram selalu berisi nilai numerik. Sehingga akan lebih aman jika dalam payload chat_id dilibatkan pula String() seperti berikut ini:

chat_id: String( chatid )

PANTAU DENGAN Logger.log

Logger.log sama fungsinya dengan console log di browser sebagai penampung atau penayang hasil proses sementara. Untuk menggunakannya cukup dengan notasi seperti berikut ini:


function getMe() {
  var url = telegramAPIURL + "/getMe";
  var response = UrlFetchApp.fetch(url);
  Logger.log( response.getContentText() );
}

Hanya saja tidak semua proses bisa diarahkan ke Logger.log tergantung respon balik dari proses tersebut dan trigger pertama harus di layar Apps Script.

CONTOH LENGKAP OPTIMALISASI

Semua uraian di atas secara lengkap bisa dilihat contoh penerapannya di repository.

Banyak cara menangani error dalam Apps Script yang bisa anda improvisasikanSiLiKiDi
Dapatkan skrip semua materi di repository

Dukung donasi agar tutorial ini tetap operasional:
Trakteer Saya SiLiKiDi

Komentar

Postingan populer dari blog ini

Mengirim File Google Drive ke Telegram

Pada eksperimen kali ini anda akan diajak untuk mencoba mengirimkan file yang ada di Google Drive ke chat Telegram menggunakan perantaraan Apps Script.

Meracik Script Untuk Merespon Command Bot Telegram - PART 1

BotFather hanya menyiapkan menu command sedangkan menghidupkannya perlu sentuhan Apps Script. Bot Telegram mengirim command dari user, selanjutnya Apps Script membalasnya dengan konten tertentu.

Mengambil Kiriman File Chat Telegram

Dalam situasi membutuhkan validasi dari user berupa bukti dokumen atau bukti screenshot untuk syarat pengaduan dan lainnya, langkah selanjutnya bagaimana mengambil file kiriman dari user tersebut agar bisa diolah di backend oleh Apps Script.