(GAS-15) Bot Telegram: Mengirim Foto

6 menit saja |

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 dipakai tg.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);
}

Contoh Photo Blob

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:

Source Get Photo ID

Hasilnya:

Source Get Photo ID

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:

  1. Pilih fungsi sendPhoto yang mau dijalankan
  2. Klik tombol Run

Run Button

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 😘