Membuat Reminder Otomatis Google Calendar Melalui Chat Whatsapp

Intro:

Jadi pacar saya (haha) punya usaha di mana usaha tersebut membutuhkan penjadwalan dan reminder ke banyak orang tiap hari dengan waktu berbeda-beda. Untuk penjadwalan, paling enak memang menggunakan Microsoft Excel atau Google Spreadsheet. Dan kebetulan jadwal dari Google Spreadsheet bisa digunakan untuk membuat event di Google Calendar secara otomatis (kalau kodingannya sudah ada wkwkwk *lain kali akan saya bahas tutorialnya*). Google Calendar ini sebenarnya sudah ada fitur notifikasi / reminder dengan 2 pilihan, yaitu pop-up yang muncul di HP atau email. Tapi untuk menotifikasi orang lain yang tidak meng-install Google Calendar di HPnya, notifikasi ini akan muncul sebagai email. Dan sebenarnya bagus sih, di emailnya ada permintaan konfirmasi apakah yang bersangkutan bisa hadir atau tidak. Tetapi kan tidak semua orang menghubungkan Gmailnya ke HP, sehingga jatuhnya notifikasi tersebut akan jadi spam. Kebetulan pacar saya selama ini kalau memberikan reminder itu melalui chat Whatsapp. Jadi dia punya grup chat (anggotanya dia sendiri) yang berisi catatan jadwal masing-masing orang. Tiap hari dia mengecek jadwal itu dan secara manual menge-chat masing-masing orang untuk reminder huhu :( Pernah beberapa lama punya admin sih, tapi kurang efektif karena dia tetep aja kudu men-supervisi adminnya terus menerus jadi ya sudah di-handle sendiri lagi.

Berhubung saya bucin - eh nggak sih, ralat, berhubung tiap bulan saya dapat persenan dari keuntungan bersih usahanya dia (yang nilainya lumayan wkwk lebih besar dari total bunga deposito saya) - maka daripada saya makan gaji buta mulu, saya mencoba bikin reminder otomatis Google Calendar yang dikirim melalui chat Whatsapp. Ini sudah ada tutorialnya yang bagus yak (di sini), cuma mungkin saya lengkapi berdasarkan pengalaman saya pribadi dalam menerapkan tutorial tersebut.


How does it works:

Google Calendar secara umum akan memberikan notifikasi pada kita apabila ada event yang hendak berlangsung menggunakan pesan pop-up. Pada tutorial yang link-nya saya sebutkan di atas, pesan pop-up tersebut diubah sehingga menjadi chat Whatsapp ke nomer kita menggunakan aplikasi Twilio Sandbox. Sebuah nomer Twilio Sandbox akan menge-chat nomor Whatsapp kita yang isi chat-nya berasal dari event Google Calendar.

Twilio Sandbox sendiri dapat mengirimkan pesan ke banyak orang sekaligus dengan syarat orang yang nomernya hendak kita kirimi pesan sudah mengijinkan. Proses perijinan dilakukan cukup dengan meminta orang yang hendak kita kirimi pesan untuk mengirimkan chat dengan kode tertentu ke nomer Twilio Sandbox. Dan otomatis orang tersebut dapat kita kirimi pesan menggunakan aplikasi Twilio Sandbox. Dengan demikian, pesan pop-up dari event Google Calendar dapat kita kirimkan juga ke orang tersebut.

Agar pesan untuk tiap orang berbeda-beda, maka perlu dilakukan sedikit penyesuaian di codingan yang Anda buat. Selain itu juga perlu dilakukan standarisasi event Google Calendar untuk tiap-tiap orang yang hendak diberi notifikasi. Sebagai contoh, saya menyetel judul event dengan nama orang yang ingin saya kirimi pesan. Lalu bagian deskripsi event baru saya isi dengan isi pesan yang hendak saya sampaikan.


Requirements:
  • Akun Gmail
  • Whatsapp
  • Akun Twilio

Setup Twilio:
  1. Buat akun Twilio di sini. Yang free trial saja cukup kok.
  2. Saat awal-awal mendaftar kita akan ditanyai soal preferensi meng-coding dsb. Yang paling penting adalah saat ditanya project apa yang akan dibuat, jawab bahwa akan membuat "Programmable SMS" (atau kalau ada pilihan dengan kata-kata Whatsapp pilih saja itu). Nanti Anda akan diarahkan ke URL ini.
  3. Di bagian kiri, pilih menu Whatsapp. Nanti akan didapatkan tampilan seperti ini. Ikuti saja langkah-langkah yang diminta. Di situ Anda diminta menge-chat via Whatsapp ke nomer yang tertera dengan kode "join xxx" (sesuai yang tertera juga). Nomer-nomer yang join dengan kode xxx tersebut akan dikelompokkan ke dalam satu project atau simpelnya dalam satu grup chat. Apabila hendak berhenti atau keluar dari aplikasi Twilio Sandbox, maka cukup menge-chat "stop" ke nomer tersebut. Apabila hendak bergabung dengan grup chat lain, cukup menge-chat kode join dari grup chat lain tersebut. 



  4. Dengan menge-chat "join xxx" ke nomer Twilio Sandbox, artinya Anda mengizinkan Twilio untuk mengirimi Anda pesan dari project di mana Anda bergabung. Apabila hendak menambahkan nomer lain untuk bergabung dalam grup project, nomer lain tersebut juga kita minta untuk menge-chat "join xxx" ke nomer Twilio Sandbox. Sesimpel itu~



  5. Di akhir tutorial langkah 3 atau apabila kita memilih menu Sandbox di bagian kiri, akan kita dapati tampilan berikut. Di bagian bawah itu ada daftar nomer-nomer yang sudah bergabung dalam grup project kita. Di bagian atas itu ada Sandbox Configuration - When a messages come in - yang mengarah ke link codingan untuk automatic reply apabila ada yang menge-chat nomer Twilio (codingan default dari Twilio adalah membalas: "You said :[chat kita]. Configure your Whatsapp Sandbox's Inbound URL to change this message." Nah pada langkah 7 saya akan membahas bagaimana mengubah pesan di automatic reply. Karena sebenarnya tidak berpengaruh signifikan juga terhadap reminder, maka langkah 7 dan seterusnya tersebut bisa di skip dan langsung melakukan pengaturan Google Apps :D



  6. Setelah project Twilio berhasil dibuat, kita harus mendapatkan Account SID dan Auth Token Twilio kita. Caranya adalah dengan masuk ke menu Dashboard di bagian kiri. Copy isi dari Account SID dan show lalu copy isi dari Auth Token.



  7. Untuk membuat codingan automatic reply, di bagian kiri klik menu dengan tanda titik tiga "..." Lalu pilih TwiML Bins.
  8. Untuk codingannya sebenarnya saya dapat dari tutorial TwiML di dokumentasi Twilio. Saya tuliskan di sini strukturnya. Silahkan ubah tulisan "Tulis pesan anda di sini." sesuai dengan isi pesan automatic reply yang ingin Anda kirimkan.

  9. <?xml version="1.0" encoding="UTF-8"?>
    <Response>
    <Message>
    <Body>
    Tulis pesan anda di sini.
    </Body>
    </Message>
    </Response>




  10. Silahkan save codingan Anda. Di bagian atas terdapat URL di mana URL tersebut Anda copy ke Sandbox Configuration - When a messages come in (di langkah 5). Untuk kembali ke Sandbox Configuration, bagian kiri klik menu dengan tanda titik tiga "..." Lalu pilih Programmable SMS. Selesai~~~



Setup Google Apps:
  1. Pertama-tama buka akun Google Drive anda lalu buat file Google SpreadSheet baru. 
  2. Ubah nama sheet pertama menjadi "Twilio" dan tambahkan Sheet baru dengan nama "Contact".
  3. Pada sheet Twilio, isikan Account SID dan Auth Token Twilio Anda (didapatkan dari langkah 6 pada proses sebelumnya) sebagai berikut.



  4. Pada sheet Contact, isikan nomer HP dan nama dari kontak Anda yang terdaftar di Twilio Sandbox. Format penulisan nomer HP adalah dengan menggunakan kode negara (+62) tetapi tanpa menuliskan tanda '+' nya karena akan bermasalah di Google Spreadsheet. Untuk nama kontak, gunakan nama yang sama dengan yang akan anda isikan di judul event Google Calendar.



  5. Buka Google Calendar di sini atau di aplikasi HP Anda. Sebagai uji coba, klik salah satu waktu di hari ini dan isi dengan format berikut:

  6. Title : Nama kontak (yang ingin diberi pesan dan sudah terdaftar di Twilio Sandbox serta sudah dimasukkan ke Google Spreadsheet)
    Description : Isi pesan reminder
    Setel add notification sehingga Anda akan mendapat notifikasi tidak lama dari saat ini.
    Simpan event tersebut ke Google Calendar.


  7. Selanjutnya buka Google Drive, lalu klik New - More. Pilih Google Apps Script. Apabila belum terinstall, klik "Connect more apps", cari "Google Apps Script", dan install. Refresh Google Drive dan buka Google Apps Script (GAS).
  8. Copy isi codingan dari link berikut dan paste ke dalam file GAS yang baru Anda buat. Pada tahap berikutnya akan saya jelaskan makna dari codingan tersebut dan perubahan apa saja yang perlu dilakukan.


Code Google App Script:
  1. Berikut merupakan codingan fungsi WAReminders() yang baru anda copy.



  2. Pada baris 2, code var ss = SpreadsheetApp.getActiveSpreadsheet(); berfungsi untuk membuka Google Spreadsheet yang sedang aktif, padahal Google Spreadsheet yang Anda buat tidak selalu aktif. Oleh sebab itu, kode tersebut diganti dengan

    var ss = SpreadsheetApp.openById("xxxxx");

    yang membuka Google Spreadsheet berdasarkan ID yang dituliskan ("xxxxx"). ID Google Spreadsheet bisa Anda temukan di URL Google Spreadsheet sebagai berikut.



  3. Fungsi ss.getSheetByName("sheet_name") pada baris 3 dan 15 membuka sheet dengan nama yang dituliskan ("sheet_name") pada Google Spreadsheet ss.
  4. Baris 8 dan 9 membuka Google Calendar utama di email Anda dan mencari event yang terjadi pada hari ini.
  5. Code baris 17-30 melakukan looping untuk setiap event Google Calendar pada hari ini, di mana event tersebut dimasukkan pada variabel ev.
  6. Pada baris 20, dilakukan pengecekan apakah judul event Google Calendar diakhiri dengan "~!#". Apabila judul event tidak diakhiri dengan "~!#", maka code di baris 21-26 akan dijalankan. Apabila judul event diakhiri dengan "~!#", maka code tersebut tidak dijalankan karena dianggap bahwa reminder untuk event tersebut sudah dijalankan. Hal ini berhubungan dengan code di baris 26, yang memberikan "~!#" di judul event sebagai tanda bahwa reminder sudah diberikan.
  7. Code baris 22-24 berfungsi untuk mengirimkan pesan ke semua nomer yang ada di sheet Contact Google Spreadsheet. Data nomer kontak yang hendak dikirimi pesan diambil pada code baris 23. Pada baris 24, terdapat fungsi untuk mengirimkan pesan.
  8. Agar pesan yang sama tidak di broadcast ke semua kontak, maka ubah code di baris 24 sebagai berikut agar event hanya dikirimkan kepada orang yang berkepentingan saja. Karena sudah disetel bahwa title dari event adalah nama penerima pesan, maka dapat dilakukan pencocokan antara title suatu event dengan nama kontak yang ada di Google Spreadsheet. Selain itu, code di baris 26 dipindahkan tepat di bawah pemanggilan fungsi sendWA() sehingga berada di dalam if.

  9. var nama = contact.getRange(n,2).getValue();
    if (nama == ev.getTitle()) {
       sendWA(ev.getTitle(), ev.getDescription(), ev.getStartTime(), twilio_sid, twilio_token, cellno);
       ev.setTitle(ev.getTitle() + "~!#");
    }


  10. Berikutnya akan dibahas mengenai perubahan fungsi sendWA() yang awalnya sebagai berikut.



  11. Dapat dilihat pada langkah 8 bahwa parameter dari fungsi sendWA() bertambah dengan ev.getDescription(). Oleh sebab itu nama fungsi pada baris 33 berubah menjadi seperti berikut.

  12. function sendWA(nama, description, time, twilio_sid, twilio_token, cellno) {

  13. Pada baris 34, tulisan "ACxxxxx" sebenarnya merupakan SID Twilio Anda, sehingga baris tersebut dapat diubah menjadi berikut.

  14. var url = "https://api.twilio.com/2010-04-01/Accounts/" + twilio_sid + "/Messages.json";

  15. Baris 43 diisi dengan nomer kontak yang hendak Anda kirimi pesan. Pada langkah pengisian kontak di Google Spreadsheet, saya meminta agar penulisan nomer HP tidak diberi tanda "+" karena akan menyebabkan error yang tidak perlu. Sebagai kompensasi, maka di codingan sendWA() ini perlu ditambahkan tanda "+".

  16. "To": "whatsapp:+" + cellno,

  17. Baris 44 merupakan isi dari pesan yang akan Anda kirim. Karena anda sudah memiliki variabel nama dan description di fungsi sendWA() ini, maka kedua variabel tersebut dapat Anda manfaatkan seperti berikut.

  18. "Body": "Halo " + nama + ", anda memiliki jadwal " + description + " pada " + time + ".

  19. Selesai! Hasilnya kurang lebih sebagai berikut hehe... Tidak sulit, kan? :D


Edit:

Ternyataaa... Twilio Sandbox tidak mau mengirimkan message body yang variatif kalau penerima chat tidak menge-chat si Twilio Sandbox lebih dari 24 jam, Saudara-saudara :( Kalau penerima pesan tidak menge-chat Twilio Sandbox lebih dari 24 jam, maka Twilio hanya dapat mengirimkan pesan yang sesuai dengan template. Daftar template yang secara otomatis tersedia antara lain sebagai berikut:

  • Your {{1}} code is {{2}}
  • Your appointment is coming up on {{1}} at {{2}}
  • Your {{1}} order of {{2}} has shipped and should be delivered on {{3}}. Details: {{4}}

Hueee...

Sebenarnya kita bisa membuat template baru melalui menu Senders (di bawah menu Sandbox). Tapiii... kita harus mempunyai Facebook Business Account yang sudah terverifikasi :(

Ya demikian lah, karena Whatsapp dan Facebook pemiliknya sama jadi begini deh T.T
Tapi kita masih bisa menggunakan template kedua, cukup tulisan {{1}} dan  {{2}} pada template diganti menjadi description dan time :)


Comments

Popular posts from this blog

Sekilas Mengenai Beasiswa PMDSU

Jalan-jalan ke Kyoto dan Osaka

Belajar Ikebana (Part 1)