Dengan koneksi webhook anda bisa mulai ujicoba mengirim pesan pertama ke Telegram dari Google Apps Script.
Materi ini melanjutkan dari Modularitas Apps ScriptSiLiKiDi
PERAN chat_id SEBAGAI DESTINASI
Seperti dunia paralel, dalam satu waktu bot melayani percakapan dari banyak user. Bagaimana bot bisa dengan benar mengirimkan pesan respon ke user dimaksud tanpa salah kirim tujuan berkat keunikan chat_id sebagai identitas unik dari setiap percakapan.
Kita tidak serta merta mengirimkan pesan ke Telegram hanya dengan mengandalkan username tetapi perlu chat_id yang hanya bisa didapatkan dari respon Telegram ke Apps Script. Setiap respon yang dikirim Telegram API selalu berisi chat_id kecuali respon poll dan inline_query.
Dalam konsepsi Telegram, setiap bot harus menunggu pembukaan percakapan dari user sehingga Bot Telegram lebih terjaga dari kemungkinan penyalahgunaan bot untuk kepentingan spammerSiLiKiDi
Identitas chat_id muncul setiap kali user membuka sebuah percakapan, dan setiap percakapan baru akan baru pula chat_id-nya. Eksistensi chat_id tergantung dari siklus hidup percakapan, sehingga bila muncul respon bahwa chat_id tidak ditemukan itu karena user telah menghapus percakapannya.
Inilah alasannya mengirimkan pesan tidak bisa mengandalkan username karena user dalam waktu yang cepat bisa menghapus percakapan dengan bot lalu kemudian membuka percakapan baru kembali dengan bot yang sama.
Dengan kondisi tersebut pesan tetap terjamin tidak akan tersesat dikirimkan ke percakapan yang sudah tidak ada karena yang menjadi destinasi adalah chat_id bukan username.
MENANGKAP RESPON DARI TELEGRAM
Google memberi syarat agar Web Apps yang dibangkitkan oleh Apps Script bisa beroperasional harus disediakan fungsi doGet() atau doPost(). Kedua fungsi ini tidak disediakan otomatis oleh Google melainkan harus kita racik sendiri dalam Apps Script.
Pada artikel sebelumnya dijelaskan alasan penggunaan POST ketimbang GET. Oleh karena itu untuk menangkap respon dari Telegram API akan kita gunakan fungsi doPost()SiLiKiDi
Fungsi doPost(e)
Kita asumsikan respon yang dari Telegram sebagai e sehingga ditangkap dengan doPost akan menjadi doPost(e). Buat fungsi doPost(e) seperti gambar berikut ini:
Mengkonversi JSON
JSON yang dikirim masih berbentuk string biasa bukan objek. Oleh karena itu untuk memudahkan dalam pengolahan perlu dikonversi menjadi JSON-object dengan fungsi JSON.parse() sehingga akan tampak seperti berikut:
JSON.parse(e);
Untuk kepraktisan, hasil konversi tersebut kita tampung dalam sebuah varibel misalkan dinamakan data sehingga tampak seperti berikut:
var data = JSON.parse(e);
Karena struktur JSON yang dikirimkan punya kedalaman level dan tidak semua level kita perlukan, maka untuk meringkasnya hanya fokus di bagian postData
dan contents
sehingga tampak menjadi:
var data = JSON.parse(e.postData.contents);
Respon Format JSON
Telegram selalu mengirimkan respon dalam format JSON. Mari kita lihat struktur JSON yang dikirim Telegram setiap kali ada percakapan dari user ke bot:
Google Apps Script memperlakukan setiap respon yang masuk dibungkus dalam sebuah event object. Jadi ketika kita menangkap utuh e akan didapatkan respon berupa:
[object Object]
Oleh karena itu kita perlu masuk ke dalam event object tersebut untuk menangkap JSON kiriman Telegram dengan gunakan event object yang disediakan Google yaitu e.postData.contents yang hasilnya barulah kita dapatkan JSON dengan struktur berikut:
{
"update_id":166769824,
"message":{
"message_id":7,
"from":{
"id":18212798765,
"is_bot":false,
"first_name":"RSUD CIBABAT",
"last_name":"CIMAHI",
"username":"rscibabat",
"language_code":"en"
},
"chat":{
"id":18212798765,
"first_name":"RSUD CIBABAT",
"last_name":"CIMAHI",
"username":"rscibabat",
"type":"private"
},
"date":1632886421,
"text":"halo"
}
}
Mengolah JSON
Seperti terlihat dalam struktur JSON di atas, dapatlah diketahui bahwa chat_id dipresentasikan oleh id yang berada di dalam chat sedangkan chat tersebut berada di dalam message dan semua JSON tersebut ditampung dalam variabel data. Sehingga notasi penulisannya sebagai berikut:
data.message.chat.id
Agar ringkas untuk dipanggil maka tampung dalam sebuah variabel misalkan bernama chatID:
var chatID = data.message.chat.id;
Dengan demikian anda bisa berimprovisasi lebih lanjut mengambil elemen lainnya dengan cara yang sama sesuai struktur pada JSON misalkan:
var messageid = data.message.message_id;
var userid = data.message.from.id;
var isbot = data.message.from.is_bot;
var firstname = data.message.chat.first_name;
var username = data.message.chat.username;
var tanggal = data.message.date;
var pesan = data.message.text;
MENGIRIMKAN PESAN KE TELEGRAM
Respon dari Telegram sudah berhasil ditangkap dan diolah, selanjutnya anda bisa melakukan apapun dengan hasil olahan tersebut misalnya menyimpannya ke Google Sheets seperti dijelaskan pada Eksperimen 2 Facebook Shop dan Google Sheets.
Kali ini akan kita coba mengirimkan pesan ke Telegram yang berisi hasil olahan tersebut. Di sisi Telegram disediakan metode sendMessage sedangkan di sisi Google Apps Script disediakan service UrlFetchApp
chat_id sudah kita dapatkan dengan menyimpannya dalam variabel chatid, hasil olahan JSON sudah ditampung ke dalam variabel data, maka dapatlah kita buat sebuah variabel baru dataPesan untuk menampung opsi dan payload yang dibutuhkan metode sendMessage yang kemudian diangkut dan dikirimkan dengan service UrlFetchApp
:
var dataPesan = {
method: "post",
payload: {
method: "sendMessage",
chat_id: String(chatid),
text: JSON.stringify(data)
}
};
UrlFetchApp.fetch(telegramAPIURL + "/", dataPesan);
Fungsi String() pada payload chat_id untuk memastikan chatid yang terdiri dari numerik berbentuk numerik-string.
Karena variabel data masih berbentuk objek sedangkan payload text harus berbentuk string maka data dikonversi menjadi string dengan JSON.stringify().
Anda bisa berimprovisasi lebih lanjut pada konten pesan dengan mengambil komponen-komponen data lainnya misalkan:
var dataPesan = {
method: "post",
payload: {
method: "sendMessage",
chat_id: String(chatid),
text: "Halo Bot!" + "\n" + "\n"
+ "Namaku : " + data.message.chat.first_name + "\n"
+ "@" + data.message.chat.username + "\n"
+ "Apakah aku robot ? " + data.message.from.is_bot
}
};
UrlFetchApp.fetch(telegramAPIURL + "/", dataPesan);
Anda harus men-deploy dan mengaktifkan webhook agar bisa berinteraksi dengan bot yang bisa anda simak caranya di artikel Telegram Bot Dengan Google Apps Script - The First EncounterSiLiKiDi
UJICOBA PADA BOT
Mengirimkan pesan dari Apps Script tidak akan bisa dilakukan tanpa sebelumnya ada respon dari Bot Telegram, jadi sifatnya menunggu baru bisa mengirimkan pesan sebagai respon balik dari Apps Script ke Bot Telegram.
Buka Bot yang dituju, lalu ketik command /start atau tap tombol START dan bila muncul respon berupa JSON maka anda berhasil mengintegrasikan Apps Script dengan Bot Telegram. Begitupula coba untuk mengetikan beberapa pesan dan lihat hasil respon balik akan berupa JSON.
Selamat! anda telah berhasil membangun interaksi pertama Apps Script anda dengan Bot TelegramSiLiKiDi
Dapatkan skrip semua materi di repository
Dukung donasi agar tutorial ini tetap operasional:
SiLiKiDi
Komentar
Posting Komentar