Membuat Chatbot (Facebook Messenger) Sederhana dengan Ruby on Rails

Interface atau frontend untuk chatbot yang cukup mudah dibangun (API, dokumentasi dan resourcenya banyak tersedia) salah satunya adalah Facebook Messenger. Mengembangkan oprekan yang sama dari postingan Chatbotslife.com kali ini untuk backendnya saya akan gunakan framework favorit saya: Ruby on Rails.

Setup Environment Rails
Untuk environment development saya menggunakan Docker container, silakan simak postingan Docker: Ruby on Rails+MariaDB saya sebelumnya (standar penamaan dan path saya juga berdasar postingan tersebut).

Pastikan container kita sudah berjalan, lalu kita masuk ke shell container:

localhost$ docker ps -a
CONTAINER ID IMAGE STATUS PORTS NAMES
15d90259f0 apps_rails Up 2 minutes 0.0.0.0:3000->3000 apps_rails_1
a05d9f0b56 mariadb Up 3 minutes 0.0.0.0:3304->3306 apps_db_1
localhost$ docker start apps_rails_1
localhost$ docker exec -it apps_rails_1 /bin/bash
root@dockerhost#

Di titik ini aplikasi Ruby on Rails (kosong) kita sudah harus bisa diakses dari internet (saya di postingan ini menggunakan VPS), koneksi ke MariaDB juga pastikan harus lancar:

Setup Rubygem facebook-messenger
Edit Gemfile, tambahkan gem facebook-messenger (dan gem dotenv sekalian, demi kemudahan konfigurasi/variabel aplikasi):

...
gem 'facebook-messenger'
gem 'dotenv-rails'
...

Setelah modifikasi Gemfile, lakukan bundle install dari console container Ruby on Rails kita:

root@dockerhost# bundle install

Kita mulai gunakan gem ini dengan membuat file initializer “config/initializers/facebook_messenger.rb” yang berisi:

unless Rails.env.production?
bot_files = Dir[Rails.root.join("app", "bot", "**", "*.rb")]
bots_reloader = ActiveSupport::FileUpdateChecker.new(bot_files) do
bot_files.each{ |file| require_dependency file }
end
ActionDispatch::Callbacks.to_prepare do
bots_reloader.execute_if_updated
end
bot_files.each { |file| require_dependency file }
end

Seperti yang tercantum di konfigurasi di atas, direktori “app/bot” akan berisi file-file bot kita. Kita buat fungsi sederhana pertama berupa file “app/bot/listen.rb” yang fungsinya membuat chatbot mengulang pesan yang kita kirim ke dia:

require "facebook/messenger"
include Facebook::Messenger
Facebook::Messenger::Subscriptions.subscribe(access_token: ENV["ACCESS_TOKEN"])
Bot.on :message do |message|
Bot.deliver({
recipient: message.sender,
message: {
text: message.text
}
}, access_token: ENV["ACCESS_TOKEN"])
end

Karena direktori “app/bot” mulai berisi file bot kita, jangan lupa me-load isi direktori tersebut di file “config/application.rb” dengan menambahkan:

...
config.paths.add File.join("app", "bot"), glob: File.join("**","*.rb")
config.autoload_paths += Dir[Rails.root.join("app", "bot", "*")]
...

Untuk berkomunikasi dengan request dari luar (dalam hal ini Facebook App yang menjembatani kita dengan Facebook Messenger) kita siapkan routing di file “config/routes.rb” dengan menambahkan:

...
mount Facebook::Messenger::Server, at: "bot"
...

Agar bisa berkomunikasi dengan Facebook App, buat file “.env” di working direktori kita (satu direktori dengan Gemfile) lalu isi dengan (detail isinya akan dijelaskan setelah kita setup Facebook App kita:

ACCESS_TOKEN=
VERIFY_TOKEN=
APP_SECRET=

Setup Facebook App
Dari halaman developer Facebook, buatlah Facebook App baru dengan mengklik “+ Add a New App”. Copy bagian “App Secret” untuk kita paste ke variabel “APP_SECRET” di file “.env” kita.

Tambahkan product “Messenger” dengan cara mengklik “+ Add Product” di menu kiri, lalu klik tombol”Set Up” di icon Messenger.

Untuk bisa memanfaatkan interface Facebook Messenger ini tentu saja kita harus memilih/membuat Facebook Page mana yang akan melayani chat via messenger ini. Page Access Token yang tergenerate juga sekaligus akan menjadi variabel “ACCESS_TOKEN” yang kita masukan ke file “.env”

Setelah itu buat webhook dengan callback URL alamat server kita (harus HTTPS) plus /bot di belakangnya, sesuai dengan routing kita. Fields yang harus dinyalakan: messages, messaging_postbacks dan messaging_optins. Di bagian verify token kita isi dengan string pilihan kita, dan harus sama / paste ke variabel “VERIFY_TOKEN” di file “.env” kita. Lalu save.

Pastikan sekali lagi Facebook Page pilihan kita sudah subscribe ke webhook yang baru saja kita buat (klik dropdown di box webhook saja):

Buka app Messenger atau login ke Facebook, akses Facebook Page yang tadi kita pilih dan mulailah testing chatbot kita sebagai visitor. Chatbot kita akan membalas semua pesan yang kita kirimkan seperti burung Beo x)

Selanjutnya kita bisa melakukan eksplorasi dan mengembangkan chatbot kita dengan memodifikasi file-file Ruby sederhana yang mengatur perilaku chatbot kita tadi. Bisa dengan membuat modul natural language processing sendiri (parser dan koneksi dengan AIML misalnya) atau menghubungkan aplikasi kita dengan API layanan natural language processing pihak ketiga.

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.