Hướng dẫn viết chat bot cho Facebook – Phần 1: Kiến thức cơ bản & Cơ chế hoạt động

Cách đây 1,2 tháng, Facebook vừa ra mắt Facebook Messenger Platform, cho phép ta viết 1 con bot hỗ trợ tự động trả lời người dùng. Vốn đam mê công nghệ nên mình cũng tò mò viết thử 1 con. Các bạn có thể thử trò chuyện với bot tại: m.me/toidicodedao, hoặc xem video demo tại đây.

Như đã hứa với các bạn trên Facebook, nếu được hơn 100 like mình sẽ đăng bài hướng dẫn cách viết bot. Vốn hơi lười nhưng mà ai ngờ chỉ mới hơn 30p đã được 100 like, biết vậy mình set 300 like là được rồi. Hứa rồi thì viết vậy.

Tuy hiện tại NodeJS đã có sẵn botkit để viết bot, song nếu chỉ chăm chăm dùng thư viện, dùng hàng ăn sẵn, bạn sẽ không học hỏi được gì. Ngoài ra, không phải bạn nào cũng biết dùng NodeJS, do đó mình sẽ viết bài giải thích cơ chế, cách viết 1 con bot từ đầu cho tới cách deploy. Chỉ cần nắm rõ cơ chế, bạn có thể dùng C#, Java, Python, … cũng đều viết được bot cả.

Series gồm 3 phần:

  1. Giới thiệu một số khái niệm, cơ chế hoạt động của Facebook bot
  2. Hướng dẫn cách code và test bot Facebook
  3. Cách deploy bot và nộp cho Facebook xét duyệt

Để hiểu rõ cách thức Facebook Bot hoạt động, bạn cần nắm rõ 2 khái niệm: Webhook và RestAPI. Webhook và RestAPI được tạo ra để giải quyết một vấn đề: Làm sao để 2 chương trình viết bằng 2 ngôn ngữ riêng biệt có thể giao tiếp được với nhau.

webhooks_600x300-600x300 (1)

Webhook là gì?

Hãy tưởng tượng bạn là một thanh niên đi làm đã có vợ con đùm đề. Một ngày nọ, có một em gái người Pháp tóc vàng ngực khủng rất xinh chuyển tới gần nhà bạn. Nhà em gái nọ kín cổng cao tường, có 2 con chó bẹc giê giữ tợn canh giữ; nhà bạn cũng chả khá hơn, có 1 mụ vợ già canh giữ.

Bạn rất muốn rủ rê em gái nọ đi chơi nhưng không biết cách. Bí quá, bạn bèn ra lan can dựng tấm bảng: “Đang tìm người xem phim chung, ai muốn đi thì ném cái thời gian địa điểm hẹn qua nhé”. May thay, thấy bạn đẹp trai khoai to nên em gái kia cũng hứng thú, viết một mẩu giấy ghi thời gian địa điểm hẹn ném qua lan can nhà bạn. Nhặt được tờ giấy, bạn bắt đầu lên kế hoạch nói dối mụ vợ để ra ngoài hú hí.

adultery_2821940b

Nếu nói bạn và em gái Pháp là 2 chương trình khác nhau, thì ở đây Webhook chính là cái lan can, thứ giúp 2 người kết nối với nhau. Theo lý thuyết, webhook là một HTTP callback. Trong code, khi bạn truyền callback vào 1 hàm, mang ý nghĩa “Tao đưa mày cái hàm này nè, khi nào có thì gọi hàm đó báo tao nhe”. Webhook cũng tương tự, nhưng là thông qua HTTP POST. Ví dụ có thể giải thích như sau trên:

Em gái Pháp: Anh ơi em muốn đi chơi.
Bạn: Webhook của anh là: http://lancan.com. Khi nào muốn cứ đi em gửi POST Request (ném tờ giấy) lên http://lancan.com. Trong request nhớ ghi thời gian và địa điểm nhé.
Em gái Pháp: OK !

Slack có thể tích hợp được rất nhiều dịch vụ là nhờ webhook. Giả sử khi bạn commit code lên Git, git sẽ gửi một POST request lên webhook của Slack tại: http://slack.com/id/hook. Slack sẽ đọc webhook này và xử lý (Build code, lưu trữ xuống database).

RestAPI là gì?

Quay lại chuyện em gái Pháp tóc vàng ngực khủng. Nhận được tờ giấy, bạn mừng rơn nhưng không biết làm sao báo lại cho nàng. Nàng không biết tiếng Việt, còn bạn cũng không rành tiếng Pháp. May thay, nàng vốn là tiểu thư, nên nhà có con người hầu biết tiếng Anh. Bạn gửi một mẫu giấy cho con người hầu, nhờ nó báo lại địa điểm hẹn cho nàng.

Cuộc hẹn thành công tốt đẹp. Hai người đi ăn uống, xem phim rồi tìm nơi thanh vắng riêng tư nghỉ ngơi. Chó bẹc giê hay mụ vợ già cũng chẳng thể nào ngăn cách tình yêu đôi lứa.

adultery-and-divorce-large

Ở đây, bạn là chương trình C#, còn nàng lại viết bằng Java. Con bé người hầu ở đây là RestAPI của nàng, sử dụng tiếng Anh (giao thức HTTP) để giúp 2 bạn giao tiếp với nhau. Nhờ có RestAPI mà 2 chương trình viết bằng 2 ngôn ngữ khác nhau có thể giao tiếp, truy cập dữ liệu của nhau.

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é: REST API là gì?. 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 web, mobile app để truy cập dữ liệu Facebook, Youtube, …  mà không cần quan tâm đến ngôn ngữ sử dụng.

rest-apis-fig2-100602499-large.idge

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.

Document 1

Đầu tiên, ta đưa 1 địa chỉ webhook (lan can) 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 (em hầu gái) 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:

  1. Viết Webhook và đưa nó cho Facebook.
  2. 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.

20 thoughts on “Hướng dẫn viết chat bot cho Facebook – Phần 1: Kiến thức cơ bản & Cơ chế hoạt động”

  1. cám ơn anh…cái này nghe có vẻ hấp dẫn…

    p/s: thích e người Pháp…kaka

    Like

  2. Chưa đọc hết, mới tới đoạn RestAPI mà thấy cậu ví von cho 2 cái định nghĩa quá hay nên nhảy xuống đây mần một cái comment cho thõa.

    Cố gắng phát huy tiếp nhé 🙂

    Liked by 1 person

  3. Hi bạn, mình có chút thắc mắc, theo cơ chế hoạt động trên thì Webhook sẽ được expose ra ngoài, về lý thuyết thì có thể nhận bất cứ request nào không chỉ riêng Facebook. Vậy có cách nào để ngăn chặn các request mà không phải đến từ Facebook không anh? Thanks bạn!

    Like

    1. Từ server thì có thể đọc được nguồn của request đó, sau đó check nội dung request đó có key của mình không, dựa vào đó để chặn thôi e 😀

      Like

Leave a comment