HƯỚNG
DẪN VIẾT CHATBOT CHO FACEBOOK: Phần I - Giới
thiệu về cơ chế hoạt động & Các khái niệm
Vào
tháng 4 năm 2016, Facebook đã giới thiệt Facebook Messenger
Flatform cho phép ta có thể viết được 1 chatbot tự động
trả lời các user. Mình thích táy máy nghịch ngợm thì
trong khi gần đâu cũng có máy mò ra một số source code
rồi viết thêm để hoàn thiện 1 con chatbot demo cho các
bạn. Nếu các bạn muốn thử hay test tại: m.me/noobislife
nhé :3 Còn không hay xem ảnh ở dưới nhé
Có
2 điều mình muốn nói: Thứ nhất: Đây là chuyên mục
Lập Trình để chúng ta học hỏi và nghịch ngợm. Thứ 2
là các bạn hoàn toàn có thể làm bằng Chatfuel một cách
đơn giản mà không có vấn đề gì hơn nữa chatfuel có
thể nhiều RestAPI(Sẽ nói ở dưới) hơn và nhiều chức
năng hơn nhưng ở đây mình muốn hướng dẫn các bạn tự
làm :) Tự tay dev 1 con bot
Tuy
đa phần các developer nếu tự viết bot(Không xài Chatfuel
nhé) thì sẽ dung Ruby để code nhưng mình không chuyên
Ruby(Thực ra ở Google DevFest 2016) đã có 1 buổi hướng
dẫn xài Ruby nhưng mình không viết được Ruby các bạn
thông cảm nhé :D Tuy mình viết được Python nhưng nhiều
trước có thử thì bị lỗi do vậy mình đã lên github
search các repo có sẵn và tham khảo và hơn nữa nhiều
người xài sẽ có người fix hộ những bug khó :D. Tuy
nhiên theo lí thuyết, nếu bạn nắm được bản chất bản
có thể dung php, java hay cả C#,… đều được.
Ở
Series này mình sẽ hướng dẫn các bạn từ nắm cơ chế,
vấn đề đến lúc hoàn thiện 1 coiậnn bot tự trò chuyện
bằng những gì nhập vào và đồng thời sử dụng Simsimi
:D
Vậy
chúng ta cùng đi vào chủ đề chính nhé. Để hiểu rõ
cách thức hoạt động của Bot bạn cần nắm rõ 2 khái
niệm sau: Webhook
và RestAPI.
Về bản
chất thì cả 2 được tao ra nhầm 1 mục đích đó là:
Làm sao để 2 chương trình tuy viết bằng 2 ngôn ngữ khác
nhau, tách biệt nhau mà vẫn có thể giao tiếp với nhau
được.
Webhook
là gì?
Các
bạn biết Slack chứ? Slack tích hợp nhiềiậu tính năng
là nhờ webhook đó. Giả sử bạn commit lên Git, git sẽ
gửi 1 POST request lên webhook của Slack. Từ đó Slack sẽ
đọc webhook và xử lí chúng => Build code và lưu trữ
:D
Nếu chưa hiểu
thì đến ví dụ tiếp theo. Tưởng tượng bạn là một
cậu học sinh đẹp trai ở Việt Nam vừa đi sang Mĩ du học
chẳng hạn mà bạn lại cực ngu tiếng Anh(Ví dụ thôi
Đừng g :D).
Lớp đó có vài bạn gái thấy vẻ đẹp trai của bạn và
muốn làm quen với bạn nhưng xấu hổ chẳng hạn. Bạn
biết điều đó nhưng nói ra sợ ngại :D Vậy
là bạn thả thính các bạn nữ ví dụ up tus thả thính
chẳng hạn :D Bạn nào đi chơi với mình thì ném vào nhà
mình lịch hẹn thời gian nhé :D Sau khi nhặt được mẩu
giấy thì bạn liền lên Google Translate dịch :D Hiểu ra ý
bạn liền sửa soạn quần áo để chuẩn bị đi chơi.
Vậy có thể hiểu bạn éo biết cái gì về tiếng Anh và
cô bạn gái người Mĩ là 2 chương trình khác nhau về
ngôn ngữ còn cái cửa nhà bạn cái Webhook. Vậy tóm váy
lại, Webhook là thứ để 2 chương trình giao tiếp với
nhau(Còn thực tế mình cho Google Translate để cho thấy rõ
nhân vật nói đến ngu tiếng anh thôi). Theo lí thuyết,
thì webhook là 1 HTTP callback. Trong code nếu bạn truyền vào
callback vào 1 hàm mang ý nghĩa “Tao
đưa mày cái hàm này, khi nào gọi hàm đó thì báo tao”.
Webhook thì như thế nó cũng tương tự nhưng nó thông qua
HTTP POST. Ví dụ có thể hiểu như sau:
Cô bạn: Anh ơi em muốn đi chơi. Bạn: Webhook của anh là: http://cua.com. Khi nào muốn cứ đi em gửi POST Request (ném tờ giấy) lên http://cua.com. Trong request nhớ ghi thời gian và địa điểm nhé. Cô bạn: OK !
Nó
cũng đơn giản dễ hiểu thôi. Có vấn đề gì bạn cứ
inbox facebook cho mình, mình sẽ giải đáp :D Link
fb mình để bên dưới
RestAPI
là gì?
Quay
lại cô bạn gái Mĩ ngoan hiền dễ thương. Sau khi nhặt
được mẩu giấy bạn sướng rơn lên nhưng không biết
làm sao báo lại cho cô. Cô thì không biết tiếng Việt,
bạn thì cũng không rành lắm tiếng Anh. May mắn thay là
trong lớp bạn có 1 thằng bạn biết 1 thứ tiếng trung
gian giả sử tiếng Thái đi :D. Bạn nhờ thằng bạn đó
báo lại cho cô bạn kia địa điểm. Cuộc hẹn thành công
tốt đẹp, 2 người đi xem phim ăn uống rồi lôi nhau vào
nơi yên tĩnh để nghỉ ngơi :D. Vậy thì ở đây ví dụ
bạn viết bằng C++ còn nàng viết bằng Java, thằng bạn
kia chính là RestAPI của cô gái, sử dụng tiếp Thái(có
thể hiểu là HTTP đi) để giúp 2 bạn giao tiếp. Nhờ
RestAPI mà 2 chương trình khác nhau ngôn ngữ có thể giao
tiếp và truy cập cơ sở . Cũng
đã có khá nhiều bài viết về REST nên mình không nhắc
lại, bạn nào muốn tìm hiểu có thể google thêm
nhé: RestAPI.
Hiện tại, các ứng dụng nổi tiếng như Facebook, Youtube,
Twitter đều có REST API. Thông qua các Rest API này, ta có
thể viết
app hay web để truy
cập dữ liệu Facebook, Youtube, … mà không
cần quan tâm đến ngôn ngữ sử dụng.
(Ví
dụ như Facebook chủ yếu viết = php hay ngôn ngữ gì cũng
được nhưng bạn viết bot bằng javascript hay ruby cũng thế
chúng vẫn connect được với nhau đó thôi)
Cơ
chế hoạt động của Facebook Bot
Cơ
chế hoạt động của Facebook Bot cũng khá đơn giản,
không khác em gái mình miêu tả phía trên là mấy.
Đầu
tiên, ta đưa 1 địa
chỉ webhook (cửa
nhà bạn) cho Facebook. Khi có người gửi tin nhắn đến
bot, facebook POST thông báo (ném tờ giấy) đến webhook của
chúng ta để ta tiếp tục xử lý.
Sau
khi xử lý xong, nếu muốn reply lại người dùng, ta gửi
tin cho RestAPI (thằng
bạn bạn) của Facebook. Nhận được tin, bot sẽ trả lời
lại cho người dùng.
Nắm
vững cơ chế hoạt động trên, bạn có thể viết 1 con
bot Facebook bằng bất cứ ngôn ngữ nào bằng cách thực
hiện 2 bước sau:
-
Viết Webhook và đưa nó cho Facebook.
-
Xử lý nội dung nhận được từ Webhook, gửi lại reply cho Rest API của Facebook.
Ở
bài viết sau, mình sẽ hướng dẫn các bạn cách tạo
trang fanpage, tạo ứng dụng và bắt đầu viết code nhé.
Các bạn nhớ đón xem.
Facebook của mình: https://facebook.com/minhnh0302
Email:
nghminh163@outlook.com