=== Xem hình và Đoán tính cách bạn như thế nào? ===
Bạn thấy gì đầu tiên?

Comment : 1 2 3 để chúng tôi giải đáp tính cách của bạn nhé !

 

Để lại bình luận tại đây nè

 

Những người tham gia tích cực bình luận :

Mình cũng bình luận :

Và kết quả nhận được

Đó chính là một Event nhỏ mà đa só các Fanpage thường dùng để tăng tương tác với người dùng bằng những câu hỏi đánh lừa thị giác , tính cách qua những con số , chọn khóa tính yêu ,.. “rồi đợi 1p sau kiểm tra inbox của bạn nhé”

Hmm , nói đến đay chắc các bạn cũng đã từng chơi qua rồi nhỉ . Vậy làm sao khi chúng ta bình luận thì họ có thể inbox cho mình mà không cần thao tác gì cả?
Lúc trước ,khi người dùng bình luận , sẽ có một “em” Admin Fanpage ngồi trả lời từng bình luận (Do mấy sếp yêu cầu kéo tương tác) , trông như việc nhẹ lương cao , tuy nhiên , nhẹ khi bạn là một fanpage nhỏ vl , đôi khi cao lắm được vài chục bình luận thì chuyện này đúng là nhỏ thiệt . Nhưng nếu bạn là một Fanpage lơn thì sao ?? Vài trăm , vài ngàn bình luận thì sao ? Chưa kể thời gian mà những người dùng bình luận đâu phải trong tầm kiểm soát của bạn . ? Đến đây đã thấy nhức đầu chưa twemoji-1f47a

Thôi giải thích vậy chắc đủ rồi nhỉ , bây giờ vào vấn đề chính

Giới thiệu

Như ở bài trước : Tự code Auto tự trả lời bình luận trên Fanpage
Thì mình có hướng dẫn qua cơ chế tự trả lời khi người dùng bình luận trên bài viết của fanpage . Và trong bài này sẽ tiếp tục là tự động Inbox họ luôn .
Vậy sẽ cần những gì để làm điều này , hãy xem nhé ?

  • Một cái Fanpage nào đó
  • Một Ứng dụng trên Facebook Developers
  • Một ID bài viết nào đó
  • Một Access Token
  • Một vài đoạn code nho nhỏ

3 cái đầu tiên ̀, bạn vui lòng đọc lại bài trước để biết cách làm


Phân tích cơ chế tự Inbox

À thật ra chẳng có gì cao siêu hay xa lạ cả vì nó là private_replies và có sẵn trên Docs của Facebook luôn , xem tại đây

Điều chúng ta cần thêm đó chính là {object-id} . Không đâu khác đó chính là ID bình luận của người dùng như hình minh họa ( Lấy được từ Request và lấy Comment ở bài viết trước)

Cấu trúc của private_replies để gửi tin nhắn đến người dùng sẽ là :

https://graph.facebook.com/{object-id}/private_replies?access_token={access_token}&message={messages}&method=POST
    

Trong đó

  • {object-id} : là ID của mình luận
  • {access_token} : Là Access Token của Fanpage
  • {messages} : Là nội dung tin nhắn sẽ gửi đến người đó

Vẫn như ở bài trước , chúng ta sẽ sử dụng vài đoạn để lấy danh sách bình luận và trả lời , đồng thời inbox họ luôn

Như ví dụ ở đầu bài , mình đang đăng một bài viết và yêu cầu người dùng bình luận : 1 2 hoặc 3 để trả lời và inbox họ tương ứng với nội dung của câu trả lời đã thiết đặt trước .

Viết Code

Mình đã thiết lập danh sách câu trả lời như sau :

$list_answer = [
                    "Bạn chọn Số 1 : Nội dụng số 1 !",
                    "Bí mật Số 2 : Nội dụng số 2 !",
                    "Bí mật số 3: Nội dụng số 3 !",
                    "Cảm ơn bạn đã chọn số , tuy nhiên số này không có trong danh sách trả lời , mời bạn chọn số khác nhé !"];

Để câu này chắc chắn là UTF8 thì chúng ta nên thêm :

mb_convert_encoding($list_answer, 'UTF-8');

Chúng ta sẽ cần thêm một function filterComment() để xem người dùng họ bình luận có trong danh sách cho sẵn không

public function filterComment($id,$comment)
                {
                    if (strpos($comment, '1') !== false) {
                        return $this->inboxUser($id,0);
                    }else if(strpos($comment, '2') !== false){
                    if(strpos($comment, '2') !== false){
                         return array($this->inboxUser($id,1));
                    }
                    }else if(strpos($comment, '3') !== false){
                        return $this->inboxUser($id,2);
                    }else{
                        return $this->inboxUser($id,3);
                    }
                }

Danh sách câu trả lời sẽ dựa trên nội dung của bình luận đó (Cơ bản).

Tiếp theo sẽ thêm một function inboxUser() để gửi tin nhắn đến người dùng

public function inboxUser($id,$number)
                {
                    $req = curl_init();
                    curl_setopt_array($req, array(
                        CURLOPT_URL => "https://graph.facebook.com/".$id."/private_replies?access_token=".$this->access_token."&message=".str_replace(" ","%20",$this->list_answer[$number])."&method=POST",
                        CURLOPT_RETURNTRANSFER => true,
                        CURLOPT_TIMEOUT => 0,
                        CURLOPT_SSL_VERIFYPEER => false,
                        CURLOPT_SSL_VERIFYHOST => false
                    ));
                    $res = curl_exec($req);
                    curl_close($req);
                }

Để loại bỏ khoảng trắng ( ) ra khỏi câu để tránh bị lỗi khi Request thì chúng ta cần str_replace (khoảng trắng) với &20.

Tổng hợp lại các function thì ta có 1 Class như sau :
class.event.php

<?php 
            /* Shared on httzip.com
             * Code by fb.com/httzip
             */
            header('Content-Type: text/html; charset=utf-8');
            class Event {
                public $post_id;
                public $access_token;
                public $list_answer;
                function __construct(){
                }
                public function check()
                {
                    $curl = curl_init();
                    curl_setopt_array($curl, array(
                    CURLOPT_URL => "https://graph.facebook.com/".$this->post_id."/comments?fields=from,message,id&filter=stream&order=reverse_chronological&access_token=".$this->access_token."&limit=50&pretty=1",
                    CURLOPT_RETURNTRANSFER => true,
                    CURLOPT_TIMEOUT => 0,
                    CURLOPT_SSL_VERIFYPEER => false,
                    CURLOPT_SSL_VERIFYHOST => false
                    ));
                    $get = curl_exec($curl);
                    curl_close($curl);
                    $decode = json_decode($get,JSON_UNESCAPED_UNICODE);
                    if(!empty($decode['data'])){
                        foreach ($decode['data'] as $data) {
                            if(!empty($data['from']['id']))
                            {
                                $user_id = $data['from']['id'];
                                $comment_id = $data['id'];
                                $user_name = $data['from']['name'];
                                $comment_content = $data['message'];
                                if( strpos(file_get_contents("list.txt"),$comment_id) !== false) 
                                {
                                    return false;
                                }
                                else
                                {
                                    return 
                                        array($this->saveID($comment_id),
                                            $this->filterComment($comment_id,$comment_content),
                                            $this->reply($user_id,$comment_id));
                                }
                            }
                            else{
                                echo "Lỗi !!!";
                            }
                        }
                    }else{
                        return false;    
                    }
                }
                public function saveID($id)
                {
                    $list='list.txt';
                    $file = fopen($list, 'a');
                    fwrite($file,$id."\n");
                    fclose($file);
                }
                public function filterComment($id,$comment)
                {
                    if (strpos($comment, '1') !== false) {
                        return $this->inboxUser($id,0);
                    }else if(strpos($comment, '2') !== false){
                    if(strpos($comment, '2') !== false){
                         return array($this->inboxUser($id,1));
                    }
                    }else if(strpos($comment, '3') !== false){
                        return $this->inboxUser($id,2);
                    }else{
                        return $this->inboxUser($id,3);
                    }
                }
                public function inboxUser($id,$number)
                {
                    $req = curl_init();
                    curl_setopt_array($req, array(
                        CURLOPT_URL => "https://graph.facebook.com/".$id."/private_replies?access_token=".$this->access_token."&message=".str_replace(" ","%20",$this->list_answer[$number])."&method=POST",
                        CURLOPT_RETURNTRANSFER => true,
                        CURLOPT_TIMEOUT => 0,
                        CURLOPT_SSL_VERIFYPEER => false,
                        CURLOPT_SSL_VERIFYHOST => false
                    ));
                    $res = curl_exec($req);
                    curl_close($req);
                }
                public function reply($user,$comment)
                {
                    $reply = "https://graph.facebook.com/".$comment."/comments?message=Xin+Chà[email protected][".$user."]+Page+đã+inbox+tính+cách+của+bạn+như+thế+nào+rồi+nhé+!&method=POST&access_token=".$this->access_token;
                    $curlrep = curl_init();
                    curl_setopt_array($curlrep, array(
                        CURLOPT_URL => $reply,
                        CURLOPT_RETURNTRANSFER => true,
                        CURLOPT_TIMEOUT => 0,
                        CURLOPT_SSL_VERIFYPEER => false,
                        CURLOPT_SSL_VERIFYHOST => false
                    ));
                    $res = curl_exec($curlrep);
                    curl_close($curlrep);
                }
            }
             ?>

Ở function reply() các bạn có thể thay đổi nội dung trả lời bình luận theo ý của mình nhé.
Tuy nhiên chưa hết tiếp đến là file chứa các thông tin cần thiết , mình đặt là function.php và sẽ có nội dung như sau :
function.php

<?php 
            /* Shared on httzip.com
             * Code by fb.com/httzip
             */
            header('Content-Type: text/html; charset=utf-8');
                include 'class.event.php';
                $event = new Event();
            if(!empty($_GET['action'] == "get")) // Thay sao tùy ý bạn
            {
                $event->access_token = "ACCESS-TOKEN";
                $event->post_id = "ID-BAI-VIET";
                $list_answer = [
                    "Nội dụng khi chọn số 1!",
                    "Nội dụng khi chọn số 2!",
                    "Nội dụng khi chọn số 3",
                    "Cảm ơn bạn đã chọn số , tuy nhiên số này không có trong danh sách trả lời , mời bạn chọn số khác nhé !"];
                $event->list_answer = mb_convert_encoding($list_answer, 'UTF-8');
                $event->check();
            }else{
                die("WTF");
            }
             ?>

Danh sách câu trả lời ở $list_answer và kiểm tra tại function filterComment() trong class.event.php.

Thử nghiệm

Làm sao để chạy??
Sau khi hoàn tất thay thế các thông số thì chạy URL của file function.php của bạn
Ví dụ : http://localhost/event/function.php?action=get
OK nếu thành công thì rất tốt , còn không thì chịu khó đọc lại bài nhé các bạn .

Vậy làm sao để chạy liên tục ?

Tạo thêm file index.html và paste đoạn này vào

<!doctype html>
            <html lang="en">
              <head>
                <!-- Required meta tags -->
                <meta charset="utf-8">
                <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
                <!-- Bootstrap CSS -->
                <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
                <script src="https://content.jwplatform.com/libraries/rI5FHjdp.js"></script>
                <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
                <title>Auto Reply and Inbox - HTTZIP.COM</title>
              </head>
              <body>
                <div id="mediaplayer"></div>
                <script type="text/javascript">
              function reply()
                  {
                     $.ajax({
                        url: 'function.php?action=get',       
                        data: "", 
                        dataType: 'json', 
                        success: function (data) {
                           if(data != "")
                           {
                            console.log(data);
                        }
                        else
                        {  }
                }
            });
                 }
                 setInterval(reply, 6000); 
            </script>
                <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
                <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
              </body>
            </html>

Hoặc bỏ lên Hosting/VPS và thiết lập Cronjob vào file function.php?action=get để tự động chạy ngày đêm .

Kết thúc

Bài viết đến đây là hết , xin kính chào và hẹn gặp lại các bạn trong những lần phát sóng sau

Hy vọng rằng với những thông tin cùi chuối này sẽ giúp ích đến các bạn trong việc hack like , rip facebook ủa nhầm , mà là quản lý Fanpage , tăng tương tác… một cách dễ dàng hơn thay vì làm thủ công .

Và tất nhiên , vì bài viết này chỉ hướng dẫn những kiên thức và cấu trúc cơ bản nên sẽ gây bối rối một chút , hy vọng các bạn đừng chê .
Nếu có thắc mắc hay câu hỏi , hãy để lại bình luận phía dưới hoặc liên hệ trưc tiếp với mình lại :
Facebook : /httzip
hoặc Email : httzip[at]gmail.com

Chúc các bạn thành công .