How to Create a Facebook Messenger Bot with Ruby on Rails
Bài đăng này đã không được cập nhật trong 3 năm
Chắc hẳn trong chúng ta, ít nhiều mỗi người đều đã nghe đến con Bot rồi, nhưng không phải ai cũng hiểu cơ chế hoạt động của nó. Ở bài viết này mình sẽ giới thiệu hướng dẫn cách tạo một con Bot bằng Rails. Tôi nghĩ làm việc với Rails rất tốt bởi vì nó đã support tất cả những thứ cần thiết để tạo ra một ứng dụng Chat Bot nho nhỏ của bạn. Nếu bạn muốn tạo ra những con Bot tinh vi hơn với các chức năng thông minh, bạn sẽ phải cần một số trung tâm điều khiển, ví dụ: nếu bạn muốn gửi tin nhắn cho tất cả người dùng ứng dụng của bạn. Chúng ta sẽ sử dụng gem facebook-messenger - đã được tạo ra bởi Hyper Nào chúng ta bắt đầu thôi!
Set up a Facebook App
Vào menu dành cho Facebook Developer và click "Add a New App", sau đó tạo một app như hình. Từ đây, bạn sẽ click "+Add Product" và add Messenger. Sau khi chúng ta config webhook, Facebook muốn chúng ta xác nhận Url cho ứng dụng của chúng ta.
Set up ứng dụng Rails
Thực hiện các set up sau:
- Cài đặt gem facebook-messenger.
Note:
Chúng ta sẽ sử dụng version mới nhất (0.11.1) - Tạo 1 file
config/initializers/facebook_messenger.rb
và thêm code sau:
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
- Khởi tạo code trong Bot
app/bot/listen.rb
:
require "facebook/messenger"
include Facebook::Messenger
Facebook::Messenger::Subscriptions.subscribe(access_token: ENV["ACCESS_TOKEN"])
Bot.on :message do |message|
puts "got your message!"
end
Note:
Nhớ set biến ENV cho ACCESS_TOKEN để bảo mật tài khoản nhé!!!
4. Thêm code vào file config/application.rb
để Rails biết về file Bot của chúng ta.
# Auto-load /bot and its subdirectories
config.paths.add File.join("app", "bot"), glob: File.join("**","*.rb")
config.autoload_paths += Dir[Rails.root.join("app", "bot", "*")]
- Định nghĩa Request trong
route.rb
. Mình sử dụng mount để nhận request thay thế cho root path:
# config/routes.rb
Rails.application.routes.draw do
mount Facebook::Messenger::Server, at: "bot"
end
- Set các biến môi trường cho phép truy cập ứng dụng Facebook:
ACCESS_TOKEN=
VERIFY_TOKEN=
APP_SECRET=
Set Up Bot
Chúng ta sẽ set up để con bot lặp lại việc gửi message phản hồi:
# app/bots/listen.rb
require "facebook/messenger"
include Facebook::Messenger
Facebook::Messenger::Subscriptions.subscribe(access_token: ENV["ACCESS_TOKEN"])
# message.id # => 'mid.1457764197618:41d102a3e1ae206a38'
# message.sender # => { 'id' => '1008372609250235' }
# message.sent_at # => 2016-04-22 21:30:36 +0200
# message.text # => 'Hello, bot!'
Bot.on :message do |message|
Bot.deliver({
recipient: message.sender,
message: {
text: message.text
}
}, access_token: ENV["ACCESS_TOKEN"])
end
Như bạn thấy, message là một hash chứa những thông tin như: fb_id và nội dung message của người gửi. Tiếp tục thử trò chuyện với ứng dụng của bạn đi nào!
Link bài dịch: https://chatbotslife.com/create-a-facebook-messenger-bot-with-ruby-on-rails-4ffd8b851135 Tài liệu tham khảo: https://github.com/jgorset/facebook-messenger
All rights reserved