(GAS-15) Bot Telegram: Mengirim Foto
Alhamdulillah, sudah banyak yang praktek di tutorial sebelumnya. Maka sudah saatnya kita tambahkan sedikit demi sedikit materi pendalaman lagi. Bobotnya masih tergolong ringan sih, jadi jangan takut.
Kita mulai dari yang sering banyak ditanyakan dan dibahas di grup @botIndonesia, yakni cara mengirim foto.
Pendahuluan
Sekali lagi, ini adalah materi lanjutan ya. Bukan materi mulai dari awal. Jadi jika tidak tau atau mengalami kesulitan, silakan dilihat kembali materi-materi sebelumnya.
Ruang Lingkup
Materi ini bukan pembuatan bot, hanya modifikasi atau sisipan. Lebih tepatnya materi pendalaman untuk mengirim sebuah foto. Ditambah pengayaan fungsi untuk men-debug mendapatkan ID file foto.
Tujuan
Dalam materi ini, memiliki banyak tujuan:
- User memahami format / syntax umum untuk mengirim foto
- User bisa mengetahui macam-macam cara mengirim foto dari bot Telegram
- User mengerti ada banyak parameter dalam pengiriman foto, paramter wajib dan tambahan
- User bisa mengirim pesan foto dengan berbagai cara
- User bisa belajar men debug foto untuk mendapatkan ID file
- User bisa menambahkan pesan caption dalam pengiriman foto
- User bisa belajar menjalankan fungsi dan berinteraksi 1 arah dengan bot tanpa mendeploy
- User mengenal tambahan fungsi library, yakni
tg.requestForm
selain yang biasa dipakaitg.request
- User bisa membuat fungsi-fungsi test sebelum mengintegrasikan
- User bisa belajar memodifikasi bot sesuai kebutuhan dalam hal penambahan fitur media foto
Code
Materi ini diberi kode, materi nomor 15.
Format Umum
Fungsi yang digunakan adalah sendPhoto
Parameter fungsi yang terpenting cuma 2 saja. Yakni chat_id
dan photo
.
Syntax: tg.request('sendPhoto', data);
Nah, data
itulah yang berisi parameternya.
Contoh:
function sendPhoto () {
var data = {
chat_id: 1234567890,
photo: 'ID_photo'
};
return tg.request('sendPhoto', data);
}
Tentang ID photo akan dijelaskan pada materi dibawah.
Parameter
Selebihnya saya bantu jelaskan sekilas, adalah sebagai berikut:
chat_id
Wajib diisi. Berisi chat id tujuan, sebaiknya dalam bentuk angka.
photo
Wajib diisi. Bisa berisi string atau data blob.
caption
Opsional. String berisi 1 KB (1024 karakter).
parse_mode
Opsional. Bisa berisi Markdown atau HTML.
reply_to_message_id
Opsional. Berisi id message jika dipakai untuk reply pesan.
reply_markup
ini juka opsional, dipergunakan untuk memodifikasi keyboard.
Referensi lengkapnya bisa di cek di sini.
Metode Kirim
Ada 3 metode buat mengirim foto via Bot. Yang mana yang ingin dipergunakan? Masing-masing memiliki kelebihan dan kekurangan. Jadi amati kebutuhan dan analisis kira-kira seperti apa bot akan dipergunakan.
1. Foto dari URL
Spesifikasi:
- Maksimal ukuran file yang dapat di attach adalah 5 MB
- Direct URL. Artinya alamat foto dari situsnya harus langsung, tanpa didahului dengan verifikasi user/ip, login, session, cookies, atau lainnya.
- Tipe MIME pada file harus benar. Kesalahan paling sering jika ada file gambar tidak dapat di attach karena ini.
- Penggunaan cocok untuk penggunaan sesekali, yang terpenting MIME foto harus valid. Misalnya untuk aplikasi toko online, yang size fotonya biasanya kecil-kecil.
Contoh penggunaannya:
function sendPhoto () {
var data = {
chat_id: 1234567890,
photo: 'https://blog.banghasan.com/assets/images/banghasan.jpg',
caption : 'Ini data Foto yang dikirim via URL'
};
return tg.request('sendPhoto', data);
}
2. Foto dari Blob
- Maksimal ukuran file yang dapat di attach adalah 10 MB
- Penggunaan cocok untuk segala suasana, yang terpenting ukuran file terbatas.
- Namun ingat, GAS memiliki keterbatasan waktu eksekusi dan limitasi ukuran proses. Jadi sebaiknya berhati-hati menggunakan mode blob. Pergunakan hanya untuk file kecil-kecil saja (amannya < 5 MB).
- Dengan metode blob, MIME pada URL dapat diperbaiki.
Untuk mengirim data dari blob, syntax yang dipakai agak beda.
Yakni menggunakan :
tg.requestForm('sendDocument', data);
Semua value di parameter data
harus menggunakan tipe String (kecuali blobnya itu sendiri).
Contoh penggunaannya:
function sendPhoto () {
var fileURL = 'https://blog.banghasan.com/assets/images/banghasan.jpg';
var blob = UrlFetchApp.fetch(fileURL).getBlob();
var data = {
'chat_id' : String(1234567890),
'photo' : blob,
'caption' : 'Ini data Foto yang dikirim menggunakan tipe Blob'
};
return tg.requestForm('sendPhoto', data);
}
Meski sama-sama diambil dari URL, namun beda perlakuannya. Yang ini dijadikan data bertipe blob terlebih dahulu baru kemudian dikirim.
Dan lihat juga beda penulisan chat_id
dan photo
yang menggunakan petik. Serta isi dari chat_id
harus bertipe string juga dengan menggunakan fungsi String()
.
3. Foto dari ID
- Maksimal ukuran file yang dapat di attach tidak terbatas.
- Tidak bisa membuat thumbnail baru ketika ID sudah terbentuk.
- ID file photo tidak dapat dikirim ulang dengan metode lainnya (misalnya dikirim menjadi tipe document)
- file_id yang didapat dari bot adalah unik, file_id nya tidak bisa dipakai oleh bot lain
- file_id meski unik untuk bot, tapi 1 file bisa memiliki beberapa file_id. Karena terdapat beda-beda size file.
- file_id yang mana yang dipakai? Jika untuk kirim ulang ke telegram, yang mana saja tidak masalah.
- Jika file ingin download, baru memperhatikan resolusi atau ukuran (panjangxlebar) atau size file. Pilih yang size paling gede.
- Penggunaan metode ID ini cocok untuk file yang berukuran besar
- Sangat cocok dipergunakan dengan tujuan dikirim berulang-ulang. Bisa hemat resource banyak.
Untuk mendapatkan file_id
, kita perlu mendebug atau menguraikan dulu pesan gambar di Telegram.
Cari dicodingan botmu:
var msg = update.message;
Tambahkan sebuah sisipan coding untuk men-debug dibawahnya seperti ini:
// buat mendebug file_id jika ada kiriman foto
if (msg.photo) {
// biar gak mengganggu, kita batasi bot hanya bekerja di PM chat id diri sendiri
// Ganti chat id nya ke ID mu!
if (msg.chat.id == 1234567890) {
var photo = msg.photo[msg.photo.length-1];
return tg.kirimPesan(msg.chat.id, "ID Photonya adalah: "+photo.file_id);
}
}
Kira-kira seperti ini sourcenya:
Hasilnya:
Dari situ diketahui ID nya yakni : AgACAgUAAxkBAANKXvtG_d4CtorHSK3Q03R-VGmXNBMAAluqMRsbcNlXS9WKn5fxE_WedMNqdAADAQADAgADeAADZGYEAAEaBA
Contoh :
function sendPhoto () {
var data = {
chat_id: 1234567890,
photo: 'AgACAgUAAxkBAANKXvtG_d4CtorHSK3Q03R-VGmXNBMAAluqMRsbcNlXS9WKn5fxE_WedMNqdAADAQADAgADeAADZGYEAAEaBA',
caption : 'Ini foto dikirim dengan ID file.'
};
return tg.request('sendPhoto', data);
}
Coding ini jangan langsung dicontek. Dijamin tidak bisa jalan!!
Ingat, photo ID tiap bot hasilnya beda. Jadi, cari photo ID nya sendiri dan sesuiakan coding diatas.
Menjalankan
Untuk menjalankan contoh-contoh diatas, bisa langsung di Run
tanpa mendeploy. Kecuali yang fungsi untuk mendebug (mendapatkan ID Photo) butuh deploy.
Seperti biasa, (biar aman) letakkan semua fungsi test di paling bawah.
Cara menjalankannya:
- Pilih fungsi
sendPhoto
yang mau dijalankan - Klik tombol Run
Pemanfaatan
Silakan dimanfaatkan sesuai fungsi dan tujuan botnya. Gabungkan contoh codingan tersebut sesuai kebutuhan.
Contoh prakmatisnya, mungkin akan dijelaskan di videonya.
🔖 Bot yang memanfaatkan ID File buat menyimpan dan organize, contohnya adalah @filetobot
Referensi
📑 Semua materi Bot Telegram dengan Google Apps Script (GAS) saya cantumkan pada link ini
Youtube
Maaf kualitas audio nya jelek, lupa kejauhan dengan laptop pas rekaman. Pakai headset saja ya buat dengerin hehe..
Lihat daftar video: https://bit.ly/botIndonesia
Penutup
Sengaja tidak saya sertakan full source code nya. Karena kebanyakan langsung di copas dan dijalankan, dan keluarlah error, kemudian bertanya kok ga bisa.
Jika ada pertanyaan, saran atau masukkan silakan didiskusikan. Jika ingin diskusi live dan biasanya jawabannya juga lebih cepat, baiknya bergabung saja di group Telegram @botIndonesia.
BUAT YANG SUKSES mencoba, jangan lupa komentarnya yak 😘