Langsung ke konten utama

Input Step By Step Dengan Cache Apps Script Di Telegram

Memanfaatkan ForceReply Telegram dan Cache Apps Script untuk membuat Step by Step input interaktif di Telegram dengan hasil akhir disimpan di Google Sheets.

BAHAN BAKU

SOLUSI PENYIMPANAN PROSES

Tantangan dalam menggelar input formulir di semua messaging app adalah pelacakan jawaban user pada multi pertanyaan. Tidak ada cara lain kita harus menyimpan setiap prosesnya sementara atau permanen secara bertahap atau serempak.

Beberapa alternatif solusi penyimpanan setiap proses input dari user:

  • Google Sheets, konsekuensinya membutuhkan tambahan waktu, resource, dan kuota harian.
  • Browser-based storage [cookies, indexedDB, webSQL], masalahnya tidak selalu user menggunakan Telegram versi web dan terkadang muncul isu kompabilitasnya.
  • Cache Google Apps Script, ini yang akan kita gunakan karena scripting berbasis Apps Script dalam satu rumah.

PROMPT INPUT USER

Setiap tanya jawab harus mampu diolah secara bertahap yang berarti kita harus memaksa user memberi input sebelum melanjutkan proses.

Situasi ini diakomodasi dengan fitur ForceReply dari Telegram yang telah dibahas rinci pada artikel Input User Dengan ForceReply Di Telegram.

Setiap feedback user dari ForceReply tersebut akan kita simpan dalam Cache Apps Script:


let dataReply = {
    method: "post",
    payload: {
      method: "sendMessage",
      parse_mode: "HTML",
      chat_id: String( chatid ),
      text: "Warna favorit anda?",
      reply_markup: JSON.stringify({
        "force_reply": true
      })
    }
};

UrlFetchApp.fetch( telegramAPIURL + "/", dataReply );

CACHE APPS SCRIPT

Apps Script menyediakan Cache Service yang bisa dimanfaatkan sebagai penyimpanan sementara termasuk menyimpan setiap tahapan proses Step by Step sebelum disimpan ke Google Sheets. Dengan begitu data yang disimpan ke Sheets hanya data yang sudah dipastikan valid.

Notasi penulisannya sebagai berikut:


CacheService.getScriptCache().NAMA_METODE

Dalam eksperimen kali ini ini akan digunakan tiga metode cache service:

put(key, value)

Key bisa diilustrasikan seperti warna, buah, cemilan. Value diilustrasikan seperti merah, jeruk, kerupuk. Key menjadi label atau nama field dari nilai dari Value.

Dengan demikian kita anggap pertanyaan-pertanyaan dalam step by step sebagai Key sedangkan jawaban dari user sebagai Value-nya:


CacheService.getScriptCache().put( "Warna favorit anda?", "Merah" );
Key maksimal 250 karakter, Value maksimal 100KB, lama penyimpanan 21600 detik (6 jam)SiLiKiDi

get(key)

Untuk mendapatkan jawaban dari user yang sudah disimpan dalam cache, cukup dengan memanggil nama Key atau konteks pertanyaannya:


CacheService.getScriptCache().get( "Warna favorit anda?" );
get() akan menghasilkan nilai dalam bentuk string, jika tidak ditemukan akan dihasilkan nullSiLiKiDi

remove(key)

Secara default dan karena sifatnya temporary, Cache akan otomatis terhapus dari Apps Script dalam 600 detik (10 menit). Kita dapat mempercepat penghapusannya dengan metode remove():


CacheService.getScriptCache().remove( "Warna favorit anda?" );

TAHAPAN PROSES STEP BY STEP

Dalam eksperimen kali ini kita akan mewawancarai user dengan tiga step pertanyaan. Kemudian ditutup dengan step keempat untuk menawarkan kepada user apakah yakin dengan jawabannya ataukah perlu diulang:


const step = [
   "STEP#1 - Warna favorit anda?",
   "STEP#2 - Buah favorit anda?",
   "STEP#3 - Cemilan favorit anda?",
   "STEP#4 - ketik Y selesai N ulangi"
];

Tahapan proses tersebut ditampung dalam sebuah array dengan ciri khas selalu diawali dengan kode STEP#. Bila script mendeteksi kode tersebut berarti sedang dalam proses tanya jawab berjenjang.

Urutan langkah dapat diketahui oleh script dengan predikat numerik yang mengikuti kode tersebut: STEP#1 STEP#2 ... Kemudian script akan menganggap setelah kode unik tersebut adalah redaksi pertanyaannya.

SKRINING TAHAPAN PROSES

Untuk mendeteksi sampai sejauhmana tahapan proses berlangsung, script akan mendeteksinya dengan notasi berikut:


//menangkap jawaban dari user
const textUser = data.message.text;

//regular expression pendeteksi kode unik
const textRegex = /\STEP\#(.*)/;

if ( textRegex.test( reply.text ) ) {
   const textExtract = reply.text.match( textRegex ).pop().split(" - "); // akan menghasilkan array ["2", "Buah favorit anda?"]
   const stepNumber = Number( textExtract[0].trim() ); //akan menghasilkan angka 2
   const stepText = textExtract[1].trim(); //akan menghasilkan string "Buah favorit anda?"
   ...
}

Hasil skrining tersebut ditampung sementara dalam objek sebelum dikirim ke Google Sheets:


let dataReply = {};
dataReply[ arrayStepText ] = cache.get( arrayStepText );

GOOGLE SHEETS

Masih menggunakan template Google Sheets pada artikel sebelumnya yang dapat diunduh di sini. Data-data Step by Step disimpan dalam sheet tersendiri dengan nama StepByStep.

FINAL SCRIPT

Final Script dapat diunduh di repository dan berikut hasil eksekusi di Telegram dan penyimpanannya di Google Sheets:

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.