Monday, August 8, 2016

Hướng dẫn viết ứng dụng ChatBot trên Facebook Messenger bằng node.js (Phần 1)

Hiện tại Facebook đang và đã tách riêng ứng dụng Messenger trên Facebook thành 1 platform riêng biệt, để viết thêm những tính năng mới cho Messenger này được phong phú hơn nữa. 1 chức năng mà Facebook cũng như các công ty làm về ứng dụng Chat đang quan tâm và làm đó là chức năng Chat Bot. Chat Bot là một chức năng có thể tự động trả lời lại cho người dùng khi bạn chat với con Bot đó, nói tóm lại nó là một máy tự động trả lời lại.

Mình dự định sẽ có 2 bài viết về chủ đề này. Phần 1 là mình hướng dẫn căn bản các bạn các bước để thiết lập kết nối với Facebook Messenger bằng Node.js.  Phần 2 là mình sẽ hướng dẫn các bạn sử dụng công cụ AI mà Facebook đang phát triển để biến con Bot có khả năng phân tích từ bạn nói với con Bot và trả lời lại cho bạn.

Node.js là gì?

Node.js là một môi trường thực thi Javascript được xây dựng trên Chrome's V8 Javascript engine. Vì thế nếu bạn rành ngôn ngữ Javascript có thể viết trên node.js 1 cách dễ dàng.

Chắc hẳn các bạn đang thắc mắc tại sao mình lại dùng nodejs để viết bài này. Đơn giản vì hiện tại những code mẫu của Facebook đang dùng là nodejs, theo mình đoán là Facebook đang PR cho nodejs ^^. Mình không muốn mất thời gian chuyển code nodejs sang ngôn ngữ khác nên dùng nó luôn cho tiện. Nếu bạn rành những ngôn ngữ khác như Java, Php, Python, Ruby hay Swift, có thể đọc code Javascript và chuyển sang xài cũng được. Hiện tại mình thấy node.js rất mạnh, tự start web server bằng code, khả năng truy suất dưới system như ngôn ngữ Python và Ruby, có nhiều thư viện trên NPM. NPM thực chất cơ chế dùng giống như Cocoapods, nếu ai quen dùng thì sẽ sử dụng tool npm này dễ dàng trên nodejs.

Theo mình thấy thì hiện tại và tương lai những ngôn ngữ scripting (như Python, Ruby, Swift, Javascript ...) sẽ còn phát triển mạnh hơn nữa, vì thế nếu bạn rành những ngôn ngữ này đó là thế mạnh của bạn. Hiện tại Apple đang dần chuyển ngôn ngữ Objective-C sang ngôn ngữ Swift để phát triển ứng dụng trên nền tảng của họ.

Công cụ để viết ứng dụng trên Node.js:

Các bạn có thể sử dụng bất kỳ công cụ nào như XCode, Eclipse, TextEdit,... cũng có thể viết code trên node.js. Nhưng để thực thi đoạn code đó thì máy của bạn phải cài Node từ brew hay nvm về máy. Khi cài node thì sẽ tự động cài npm cùng với phiên bản node tương ứng. Hiện tại phiên bản mới nhất của node.js là 6.x.

Nhưng bài này mình hướng dẫn các bạn 1 tool có thể dễ dàng lập trình và thực thi code đó chính là Cloud9. Nguyên nhân khi thiết lập với Facebook Messenger bắt phải có đường link là https và có domain nữa, nên dùng công cụ này thì hỗ trợ sẵn cho mình những thứ đó mình khỏi cần phải kiếm những platform khác để deploy lên đó. Nếu các bạn viết code ở dưới máy thì có thể deploy code lên Heroku để chạy thử cũng được.

Sau khi bạn đăng ký tài khoản trên Cloud9 xong, bạn hãy nhấn vào nút tạo workspace và nhập thông tin project, chọn 1 template là Node.js, như hình sau:

Sau khi tạo workspace thành công sẽ xuất hiện màn hình sau:

Màn hình công cụ này giống như những công cụ mà bạn đang làm việc ở dưới máy local. Có 1 điểm khác biệt là bạn có thể thấy thanh tab có chữ bash đó là terminal trên Cloud9, bạn có thể thao tác những lệnh trên terminal ở trong tab đó.

Bạn hãy chạy project mẫu của Cloud9 bằng cách nhấn vào file server.js và nhấn chuột phải chọn chức năng là Run. Đây là ứng dụng Chat Example bằng cách sử dụng thư viện socket.io. Sau khi Run bạn để ý sẽ có 1 tab ở bên dưới, ghi những thông tin như:

Trong này có ghi thông tin URL cũng như Port 8080 mà ứng dụng bạn đang chạy.

Bạn nên xóa những file ví dụ mẫu đi để tránh nhầm lẫn với code kết nối với Facebook Messenger. Bạn xóa folder có tên là client, node_module đi, và làm những bước như sau:

Bước 1: Tải những thư viện cần thiết về: 

Bạn mở file package.json lên và nhập nội dung như sau vào:
Sau khi lưu thành công, bạn vào terminal của cloud9 và nhập lệnh "npm install" để tải những thư viện được khai báo trong file package.json về thư mục "node_modules". Đường link này hướng dẫn chi tiết những thiết lập trong file package, các bạn nên đọc để có thể hiểu và thiết lập cho đúng.

Bạn tạo 1 folder tên config và 1 file tên 'default.json' để chứa những thông tin thiết lập của Facebook.

Bước 2: Tạo webhook và khởi động một web server:

Bạn mở file 'server.js' lên và xóa hết nội dung bên trong đó đi. Sau đó khai báo những biến load framework express và những thư viện như http, body-paser, request, config vào như sau:
Sau đó bạn load những thông tin config lên:
Bước kế tiếp bạn khai báo đường dẫn trang chủ và webhook để chứng thực với Facebook: Và khai báo những method để có thể xử lý việc nhận tin nhắn từ người dùng và gởi trả về cho người dùng, code demo mình chỉ gởi echo những đoạn chat mà user đã chat về thôi: Hiện tại code này chỉ xử lý message bằng text, nếu người dùng gởi hình ảnh hay file gì lên bạn sẽ phải xử lý riêng trong phần switch (messageText). Cái này mình sẽ nói sau.
Bước cuối cùng bạn chọn file server.js, nhấn chuột phải và chọn Run web server lên. Bạn nhớ chú ý url của chúng để thiết lập trên Facebook.

Bước 3: Thiết lập Facebook Page và Facebook Messenger:

Điều kiện trước tiên bạn phải có 1 Page trên Facebook, cách tạo Page cũng rất đơn giản. Bạn chỉ chọn chữ 'Create Page' trong phần Menu của Facebook:
Bạn thiết lập thông tin cần thiết mà Facebook yêu cầu để tạo 1 Page cho bạn.

Bước tiếp theo bạn vào trang Developer Facebook, bạn nhớ login tài khoản Facebook vào. Sau khi login thành công ở góc trên bên phải có chữ 'My Apps', bạn nhấn vào nút 'Add a new App' và sẽ xuất hiện màn hình như sau và chọn 'basic setup':
Và nhập những thông tin cần thiết như App Id và Contact Info vào là xong.

Bạn chọn Add Product là Messenger:
Chọn tên Page của chính bạn để tạo ra Page Access Token và copy vào file config trên nodejs.

Sau đó bạn nhấn vào nút Setup Webhooks ở bên dưới để thiết lập url webhook với Facebook để chứng thực, chỉ chọn event là messages thôi, nếu bạn chọn message_delivery hay message_echoes thì Facebook sẽ gởi những tin nhắn không cần thiết về webhook, sau khi bạn gởi message đến người dùng. Khi nào cần thiết sẽ enable chúng lên và sử lý.


Sau khi thiết lập thành công sẽ xuất hiện màn hình như bên dưới:

ở phần bên dưới nhớ chọn tên page và Subscribe thì mới chứng thực webhook được.

Sau khi thiết lập thành công, bạn trở lại màn hình home và vào Page của mình chọn chức năng Message và chat thử với chúng thì sẽ như hình sau:

Lưu ý: Hiện tại App trên Facebook đang ở chế độ Development nên người dùng khác ngoài bạn ra mà muốn chat với bot thì bạn phải add tên người đó vào phần Tester trong App tại Developer Facebook:

- Hiện tại mình đang viết thử trên Page Hội Thích Truyện Cười tại đây, các bạn có thể like và gởi tin nhắn trong message hoặc email cho mình để mình add các bạn vào phần tester để các bạn có thể chat được với bot.

Phần 2 mình sẽ hướng dẫn và tích hợp AI vào để con bot thông minh hơn có thể trả lời đúng những câu hỏi mà bạn hỏi chúng. Các bạn hãy đón xem nhá.

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.