Facebook Developer

Lab การสร้าง Chat Bot บน Facebook Messenger ด้วย PHP

บทเรียนการพัฒนา Chat bot เช่นเคยเปลี่ยนจากใน Line เป็น Facebook ผ่านการทำงานด้วย Rules บน Webhooks ที่พัฒนาด้วยภาษาโปรแกรม PHPบทเรียนนี้จะใกล้เคียงการสร้าง Chat Bot บน Line เหมือนบทความ: Lab พัฒนา Line Bot ด้วย Message API และ PHP ซึ่งยังคงใช้ Heroku สำหรับ Host HTTPs ผ่าน github ตามบทเรียนดังกล่าวเพียงแค่เปลี่ยนเพิ่ม Script สำหรับการโต้ตอบผ่าน Messgengers ไปมาผ่าน WebHook โดยมี MongoDB ของ mLab.com เช่นเดิมเป็นฐานข้อมูล(ตัวเดียวกัน)

ดังนั้น: Facebook Chat Bot ตัวนี้ก็จะสามารถสอนมันได้เหมือนกับ Line Bot

เริ่มต้นกันดีกว่า:

ไปสร้าง page ใหม่กันดีกว่าที่ https://www.facebook.com/page ผมก็ได้ไปสร้าง เพจใหม่ชื่อว่า “เป็ดเหลือง”

เมื่อได้ Page มาแล้วก็ให้เราไปสร้าง Facebook Apps ใหม่ขึ้นมาที่ https://developers.facebook.com ซึ่งอาจจะชื่อเดียวกันกับเพจ

เมื่อสร้าง Apps ใหม่แล้วไปที่เมนู PRODUCTS ทางด้านซ้ายมือ เปิดใช้งาน Messenger

เชื่อมสิทธิ Token ของ Apps Facebook เราหน่อยนึง

เลือก Page ของเราแล้วทำการขอสิทธิ Access Token (เพื่อเก็บไว้) ในการเข้าโต้ตอบให้ App บน Facebook สามารถทำได้ ซึ่งต้องเก็บเป็นความลับ

เมื่อเราขอ Access Token เราจำเป็นต้องให้สิทธิเข้าถึงทั้งหมด

เก็บ Access Token ดังกล่าวไว้ใน NotePad เพื่อนำไปใช้กับ PHP ของเรา

สร้างไฟล์ขึ้นมาสำหรับ WebHook ซึ่งใช้กระบวนการเดียวกันกันบทความ:Lab พัฒนา Line Bot ด้วย Message API และ PHP

คำสั่งการทำงานมีดังนี้

<?php
$access_token = "<ACCESS TOKEN>";
$verify_token = "yellow_duck";
$hub_verify_token = null;
if(isset($_REQUEST['hub_challenge'])) {
 $challenge = $_REQUEST['hub_challenge'];
 $hub_verify_token = $_REQUEST['hub_verify_token'];
}
if ($hub_verify_token === $verify_token) {
 echo $challenge;
}
$input = json_decode(file_get_contents('php://input'), true);
$sender = $input['entry'][0]['messaging'][0]['sender']['id'];
$message = $input['entry'][0]['messaging'][0]['message']['text'];
$message_to_reply = '';
/**
 * Some Basic rules to validate incoming messages
 */

$api_key="<mLAP API KEY>";
$url = 'https://api.mlab.com/api/1/databases/duckduck/collections/linebot?apiKey='.$api_key.'';
$json = file_get_contents('https://api.mlab.com/api/1/databases/duckduck/collections/linebot?apiKey='.$api_key.'&q={"question":"'.$message.'"}');
$data = json_decode($json);
$isData=sizeof($data);
if (strpos($message, 'สอนเป็ด') !== false) {
  if (strpos($message, 'สอนเป็ด') !== false) {
    $x_tra = str_replace("สอนเป็ด","", $message);
    $pieces = explode("|", $x_tra);
    $_question=str_replace("[","",$pieces[0]);
    $_answer=str_replace("]","",$pieces[1]);
    //Post New Data
    $newData = json_encode(
      array(
        'question' => $_question,
        'answer'=> $_answer
      )
    );
    $opts = array(
      'http' => array(
          'method' => "POST",
          'header' => "Content-type: application/json",
          'content' => $newData
       )
    );
    $context = stream_context_create($opts);
    $returnValue = file_get_contents($url,false,$context);
    $message_to_reply = 'ขอบคุณที่สอนเป็ด';
  }
}else{
  if($isData >0){
   foreach($data as $rec){
     $message_to_reply = $rec->answer;
   }
  }else{
    $message_to_reply = 'ก๊าบบ คุณสามารถสอนให้ฉลาดได้เพียงพิมพ์: สอนเป็ด[คำถาม|คำตอบ]';
  }
}
//API Url
$url = 'https://graph.facebook.com/v2.6/me/messages?access_token='.$access_token;
//Initiate cURL.
$ch = curl_init($url);
//The JSON data.
$jsonData = '{
    "recipient":{
        "id":"'.$sender.'"
    },
    "message":{
        "text":"'.$message_to_reply.'"
    }
}';
//Encode the array into JSON.
$jsonDataEncoded = $jsonData;
//Tell cURL that we want to send a POST request.
curl_setopt($ch, CURLOPT_POST, 1);
//Attach our encoded JSON string to the POST fields.
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonDataEncoded);
//Set the content type to application/json
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
//curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
//Execute the request
if(!empty($input['entry'][0]['messaging'][0]['message'])){
    $result = curl_exec($ch);
}
?>

ตั้งค่าตัวแปรสำหรับตรวจสอบการ Verify ว่าเราเป็นคนสร้าง Bot จริงไหมผ่าน Access Token ดังกล่าวด้วย

$verify_token = "yellow_duck";

ส่วนการทำงานของ BOT นั้นเหมือน Line Bot เลยคือมี Pattern ในการสอนคือ:

สอนเป็ด[คำถาม|คำตอบ]

ทำการ deploy ขึ้น Heroku แล้วนำ URL ดังกล่าวมาทำการ Setup WebHooks

จำเป็นต้องใส่ Callback URL และค่า Verify Token ในที่นี้คือ “yellow_duck” ให้ตรงกัน

ขอสิทธิ์ตามรูปภาพ จะเพิ่ม message_reads ก็ได้ แล้วกด Verify and Save

ทีนี้ก็มาทดสอบการพูดคุยกับเจ้า Chat Bot เป็ดเหลืองบน Page เป็ดเหลือง กด Like แล้ว Message หามันซะ

นั่นไง…… ใช้ได้เลย แต่…… คนพัฒนาใช้ได้คนเดียวครับ คนอื่น Like ไปก็จะโต้ตอบไม่ได้มันจะเงียบเป็นเป่าสาก เพราะ Facebook นั้นต้องมีการ Reviews ตัว App โดยต้องใช้เวลา 5 วัน (หรือมากกว่านั้น) ดังนั้นถ้าทดสอบเสร็จก็ Reviews ซะต้องอัดหน้าจอวีดีโอด้วยนะ บอกก่อน

ดังนั้นก็รอต่อไป เอาเป็นว่าใครอยากจะลองพัฒนา Chat Bot Facebook ก็สามารถทำตามได้เลยเผื่อจะได้เทคนิคการสร้าง Rules ใหม่ๆ มาแชร์กันบ้างครับ : )

อัพเด็ต ภายใน 24 ชม.

ทีม Developer Facebook จะทำการส่ง Test Message มายัง Bot เราหลังจากที่เราส่งคลิปอัดหน้าจอไปแล้วให้เค้ารีวิวครับ (ซึ่งไม่รู้ว่าเป็นทีมงานจริงไหม?)

แต่หลังจากที่ Bot เรา Response กลับไป ไม่เกิน 24 ชม.ครับ ก็มี Alert Message กลับมาว่า App ของเจ้า Chat Bot เราผ่านการพิจารณาแล้ว!

ก็เข้าไปทดสอบกันได้เลยครับที่เพจ: เป็ดเหลือง

Asst. Prof. Banyapon Poolsawas

อาจารย์ประจำสาขาวิชาการออกแบบเชิงโต้ตอบ และการพัฒนาเกม วิทยาลัยครีเอทีฟดีไซน์ & เอ็นเตอร์เทนเมนต์เทคโนโลยี มหาวิทยาลัยธุรกิจบัณฑิตย์ ผู้ก่อตั้ง บริษัท Daydev Co., Ltd, (เดย์เดฟ จำกัด)

Related Articles

One Comment

Back to top button

Adblock Detected

เราตรวจพบว่าคุณใช้ Adblock บนบราวเซอร์ของคุณ,กรุณาปิดระบบ Adblock ก่อนเข้าอ่าน Content ของเรานะครับ, ถือว่าช่วยเหลือกัน