Share
Trang chủ / Tất cả hướng dẫn / Lập trình web / Hướng dẫn viết chat bot cho facebook

Hướng dẫn viết chat bot cho facebook

Xin chào. Hôm nay các bạn có khỏe không ? Bạn có muốn đi bán sim không ? Hay muốn unfriend bằng cách nhắn tin chửi hết mọi người trong friend list hoặc là bạn muốn bán sim để ra đường bị đánh chết. Đúng rồi đấy, hôm nay chúng ta sẽ cùng xây một công cụ như vậy – Facebook Chat Bot.

Chức năng

Bạn có thể nghĩ về rất nhiều chức năng mà con bot này có thể có, nó cũng phong phú, đa dạng như bên slack vậy. Nhưng mà trong bài này thì mình chỉ dừng lại ở một ứng dụng đơn giản nhất là tự động trả lời tin nhắn. Mô tả cơ bản về nó là nó rất đơn giản.

Vì facebook đã ngưng cung cấp chat API. Vì vậy chúng ta sẽ phải tự mình bơi. Chúng ta cần phải đóng giả là một người dùng, login vào facebook và tạo các http request tới server của facebook để thực hiện các thao tác về tin nhắn.

Thật may vì đã có người làm điều này rồi, và anh ấy đã xây dựng nó thành một module mà chúng ta chỉ cần require và sử dụng mà thôi. Người đó là Avery Morin và thư viện Facebook Chat API của ảnh. Mình cũng không biết là liệu có phải những người bán sim cũng sử dụng thư viện này hay không nữa.

facebook-chat-bot

Thiết lập project

Đây là project viết bằng nodejs, nên trước tiên bạn phải có nodeJs, nếu chưa cài đặt, thì bạn có thể làm theo hướng dẫn này : Install Nodejs.

Bây giờ mở cửa sổ command line lên. Và tạo thư mục mà bạn muốn code project trong đó. Di chuyển vào thư mục đó và khởi tạo nodejs project bằng lệnh này :

npm init

Sau đó thì chỉ cần cung cấp các thông tin theo yêu cầu là được. Giờ bạn sẽ có file package.json có nội dung tương tự như sau :

{
  "name": "facebook-bot",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

Theo như config này, thì file chính của chúng ta là index.js. Nên giờ ta cần tạo file này, nội dung thì đơn giản thôi :

console.log("Hello");

Giờ run thử với lệnh node index.js thì kết quả sẽ là Hello.

Cài đặt module

Để cài đăt module Facebook Chat API bạn dùng lệnh :

npm install facebook-chat-api

Đợi vài giây là mọi thứ sẽ được dọn lên mâm.

Ăn

Mọi thứ đã được dọn lên mâm, bây giờ chỉ còn ăn nữa mà thôi. Vì yêu cầu cũng tương đối đơn giản nên không có gì phải phân vân cả. Hãy thử một vài cách ăn sau đây nhé.

Trả lời tin nhắn đơn giản

Chức năng đơn giản thôi, mỗi lần bật bot lên, thì bất kỳ ai nhắn tin vào nó cũng sẽ trả lời là theo một câu nhất đinh. Code sẽ như sau :

var login = require("facebook-chat-api");

var answeredThreads = {};

// Create simple echo bot
login({email: "nguyenvanduocit@gmail.com", password: "*****"}, function callback (err, api) {
    if(err) return console.error(err);

    api.listen(function callback(err, message) {
        console.log(message.threadID);
        if(!answeredThreads.hasOwnProperty(message.threadID)){
            answeredThreads[message.threadID] = true;
            api.sendMessage("BOT - Hiện tại mình đang đi ra ngoài, mình sẽ trả lời bạn ngay khi tới nhà,", message.threadID);
        }
    });
});

Mình cần phải đánh dấu lại những thread nào đã trả lời, để không trả lời 1 người hai lần. Tránh trường hợp họ muốn để lại lời nhắn, nhưng bot lại liên tục reply họ với cùng một câu. Và nhớ là thêm cữ BOT hoặc bất cứ cái gì để họ biết rằng không phải bạn đang trả lời họ.

Tự động trả lời tùy theo khung giờ

Buổi trưa mình thường đi ăn xong rồi ngủ, vì vậy mình không thể trả lời tin nhắn vào lúc này được. Đoạn code dưới đây chỉ tự động trả lời nếu nhận được tin nhắn vào khung giờ đó :

var login = require("facebook-chat-api");

var answeredThreads = {};

// Create simple echo bot
login({email: "YOUR_EMAIL", password: "****"}, function callback (err, api) {
    if(err) return console.error(err);

    api.listen(function callback(err, message) {
        var d = new Date();
        var h = d.getHours();
        if(h >= 12 && h <= 13 && !answeredThreads.hasOwnProperty(message.threadID)){
            api.getUserInfo(message.senderID, function(err, ret) {
                if(err) return console.error(err);
                for(var prop in ret) {
                    if(ret.hasOwnProperty(prop) && ret[prop].name) {
                        api.sendMessage( "BOT : Xin lỗi nha " + ret[prop].name + ", Giờ mình đi ra ngoài rồi, không có thời gian trả lời bạn.", prop, function(){
                            answeredThreads[message.threadID] = true;
                        });
                    }
                }
            });
        }
    });
});

Lời kết

Còn rất nhiều điều thú vị mà bạn có thể làm với thư viện này, Nhưng giới hạn bài viết chỉ dừng lại ở đây mà thôi. Mình cũng không muốn các bán sử dụng thư viện này để đi bán sim đâu, Hãy bắt tay vào làm điều gì đó có ích xem nào. Bạn có thể integrate facebook chat với slack, hoặc với một support board nào đó. Nó thật tuyệt vời, tiết kiệm thời gian biết mấy nhỉ. Hoặc bạn có thể xây dựng một game show bằng cách nhắn tin vào inbox và quay số ngẫu nhiên.

Hãy xem mã nguồn của thư viện này và xem bạn làm được gì với nó nhé.