สำหรับเนื้อหาในตอนต่อไปนี้ จะเป็นแนวทางการใช้งาน LINE bot sdk php ในการจัดการกับ
ไฟล์รูปภาพ เสียง และไฟล์วิดีโอ ที่ผู้ใช้ส่งมา โดยเราจะทำการบันทึกไฟล์ต่างๆ เหล่านี้ไว้ที่ฝั่ง
server ของเรา เราจะประยุกต์จากเนื้อหาโค้ดตอนที่แล้ว
การใช้งาน Template Message ใน LINE Messaging API ตอนที่ 3 http://niik.in/836
https://www.ninenik.com/content.php?arti_id=836 via @ninenik
โดยเราจะตัดส่วนของโค้ดทดสอบ template message ออกก่อน คงเหลือไว้เฉพาะในส่วนของ
การกำหนดเงื่อนไข switch
ก่อนลงรายละเอียดเกี่ยวกับการบันทึกรูปภาพ เสียง และวิดีโอ จากผู้ใช้ ใน LINE ขอเพิ่มเนื้อหา
เกี่ยวกับการใช้คำสั่ง เพื่อเรียกดูข้อมูลของผู้ใช้ LINE หรือก็คือดูโพรไฟล์ ซึ่งค่าที่ได้กลับมาก็จะไม่ได้
มีอะไรมาก จะไอดีผู้ใช้ LINE ชื่อที่แสดง url รูปโพรไฟล์ และก็ข้อความสถานะ ที่ผู้ใช้ตั้ง
การเรียกดูโพรไฟล์ผู้ใช้ LINE
เราจะเพิ่มเงื่อนไขสำหรับทดสอบ โดยเมื่อถ้าผู้ใช้พิมพ์ตัว "P" ก็จะให้ bot ไปดึงข้อมูลของผู้ใช้ โดย
อาศัย userId ของ ผู้ใช้ และถ้าผู้ใช้พิมพ์คำว่า "สวัสดี" เราก็จะให้ bot ทักทายกลับไปว่า "สวัสดีครับ คุณ xxxx"
โดยแทน xxx เป็นชื่อที่แสดงของผู้ใช้ LINE
ไฟล์ bot.php
<?php // กรณีต้องการตรวจสอบการแจ้ง error ให้เปิด 3 บรรทัดล่างนี้ให้ทำงาน กรณีไม่ ให้ comment ปิดไป ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); // include composer autoload require_once '../vendor/autoload.php'; // การตั้งเกี่ยวกับ bot require_once 'bot_settings.php'; // กรณีมีการเชื่อมต่อกับฐานข้อมูล //require_once("dbconnect.php"); ///////////// ส่วนของการเรียกใช้งาน class ผ่าน namespace use LINE\LINEBot; use LINE\LINEBot\HTTPClient; use LINE\LINEBot\HTTPClient\CurlHTTPClient; //use LINE\LINEBot\Event; //use LINE\LINEBot\Event\BaseEvent; //use LINE\LINEBot\Event\MessageEvent; use LINE\LINEBot\MessageBuilder; use LINE\LINEBot\MessageBuilder\TextMessageBuilder; use LINE\LINEBot\MessageBuilder\StickerMessageBuilder; use LINE\LINEBot\MessageBuilder\ImageMessageBuilder; use LINE\LINEBot\MessageBuilder\LocationMessageBuilder; use LINE\LINEBot\MessageBuilder\AudioMessageBuilder; use LINE\LINEBot\MessageBuilder\VideoMessageBuilder; use LINE\LINEBot\ImagemapActionBuilder; use LINE\LINEBot\ImagemapActionBuilder\AreaBuilder; use LINE\LINEBot\ImagemapActionBuilder\ImagemapMessageActionBuilder ; use LINE\LINEBot\ImagemapActionBuilder\ImagemapUriActionBuilder; use LINE\LINEBot\MessageBuilder\Imagemap\BaseSizeBuilder; use LINE\LINEBot\MessageBuilder\ImagemapMessageBuilder; use LINE\LINEBot\MessageBuilder\MultiMessageBuilder; use LINE\LINEBot\TemplateActionBuilder; use LINE\LINEBot\TemplateActionBuilder\DatetimePickerTemplateActionBuilder; use LINE\LINEBot\TemplateActionBuilder\MessageTemplateActionBuilder; use LINE\LINEBot\TemplateActionBuilder\PostbackTemplateActionBuilder; use LINE\LINEBot\TemplateActionBuilder\UriTemplateActionBuilder; use LINE\LINEBot\MessageBuilder\TemplateBuilder; use LINE\LINEBot\MessageBuilder\TemplateMessageBuilder; use LINE\LINEBot\MessageBuilder\TemplateBuilder\ButtonTemplateBuilder; use LINE\LINEBot\MessageBuilder\TemplateBuilder\CarouselTemplateBuilder; use LINE\LINEBot\MessageBuilder\TemplateBuilder\CarouselColumnTemplateBuilder; use LINE\LINEBot\MessageBuilder\TemplateBuilder\ConfirmTemplateBuilder; use LINE\LINEBot\MessageBuilder\TemplateBuilder\ImageCarouselTemplateBuilder; use LINE\LINEBot\MessageBuilder\TemplateBuilder\ImageCarouselColumnTemplateBuilder; $httpClient = new CurlHTTPClient(LINE_MESSAGE_ACCESS_TOKEN); $bot = new LINEBot($httpClient, array('channelSecret' => LINE_MESSAGE_CHANNEL_SECRET)); // คำสั่งรอรับการส่งค่ามาของ LINE Messaging API $content = file_get_contents('php://input'); // แปลงข้อความรูปแบบ JSON ให้อยู่ในโครงสร้างตัวแปร array $events = json_decode($content, true); if(!is_null($events)){ // ถ้ามีค่า สร้างตัวแปรเก็บ replyToken ไว้ใช้งาน $replyToken = $events['events'][0]['replyToken']; $userID = $events['events'][0]['source']['userId']; $sourceType = $events['events'][0]['source']['type']; $is_postback = NULL; $is_message = NULL; if(isset($events['events'][0]) && array_key_exists('message',$events['events'][0])){ $is_message = true; $typeMessage = $events['events'][0]['message']['type']; $userMessage = $events['events'][0]['message']['text']; $idMessage = $events['events'][0]['message']['id']; } if(isset($events['events'][0]) && array_key_exists('postback',$events['events'][0])){ $is_postback = true; $dataPostback = NULL; parse_str($events['events'][0]['postback']['data'],$dataPostback);; $paramPostback = NULL; if(array_key_exists('params',$events['events'][0]['postback'])){ if(array_key_exists('date',$events['events'][0]['postback']['params'])){ $paramPostback = $events['events'][0]['postback']['params']['date']; } if(array_key_exists('time',$events['events'][0]['postback']['params'])){ $paramPostback = $events['events'][0]['postback']['params']['time']; } if(array_key_exists('datetime',$events['events'][0]['postback']['params'])){ $paramPostback = $events['events'][0]['postback']['params']['datetime']; } } } if(!is_null($is_postback)){ $textReplyMessage = "ข้อความจาก Postback Event Data = "; if(is_array($dataPostback)){ $textReplyMessage.= json_encode($dataPostback); } if(!is_null($paramPostback)){ $textReplyMessage.= " \r\nParams = ".$paramPostback; } $replyData = new TextMessageBuilder($textReplyMessage); } if(!is_null($is_message)){ switch ($typeMessage){ case 'text': $userMessage = strtolower($userMessage); // แปลงเป็นตัวเล็ก สำหรับทดสอบ switch ($userMessage) { case "p": // เรียกดูข้อมูลโพรไฟล์ของ Line user โดยส่งค่า userID ของผู้ใช้ LINE ไปดึงข้อมูล $response = $bot->getProfile($userID); if ($response->isSucceeded()) { // ดึงค่ามาแบบเป็น JSON String โดยใช้คำสั่ง getRawBody() กรณีเป้นข้อความ text $textReplyMessage = $response->getRawBody(); // return string $replyData = new TextMessageBuilder($textReplyMessage); break; } // กรณีไม่สามารถดึงข้อมูลได้ ให้แสดงสถานะ และข้อมูลแจ้ง ถ้าไม่ต้องการแจ้งก็ปิดส่วนนี้ไปก็ได้ $failMessage = json_encode($response->getHTTPStatus() . ' ' . $response->getRawBody()); $replyData = new TextMessageBuilder($failMessage); break; case "สวัสดี": // เรียกดูข้อมูลโพรไฟล์ของ Line user โดยส่งค่า userID ของผู้ใช้ LINE ไปดึงข้อมูล $response = $bot->getProfile($userID); if ($response->isSucceeded()) { // ดึงค่าโดยแปลจาก JSON String .ให้อยู่ใรูปแบบโครงสร้าง ตัวแปร array $userData = $response->getJSONDecodedBody(); // return array // $userData['userId'] // $userData['displayName'] // $userData['pictureUrl'] // $userData['statusMessage'] $textReplyMessage = 'สวัสดีครับ คุณ '.$userData['displayName']; $replyData = new TextMessageBuilder($textReplyMessage); break; } // กรณีไม่สามารถดึงข้อมูลได้ ให้แสดงสถานะ และข้อมูลแจ้ง ถ้าไม่ต้องการแจ้งก็ปิดส่วนนี้ไปก็ได้ $failMessage = json_encode($response->getHTTPStatus() . ' ' . $response->getRawBody()); $replyData = new TextMessageBuilder($failMessage); break; default: $textReplyMessage = " คุณไม่ได้พิมพ์ ค่า ตามที่กำหนด"; $replyData = new TextMessageBuilder($textReplyMessage); break; } break; default: $textReplyMessage = json_encode($events); $replyData = new TextMessageBuilder($textReplyMessage); break; } } } $response = $bot->replyMessage($replyToken,$replyData); if ($response->isSucceeded()) { echo 'Succeeded!'; return; } // Failed echo $response->getHTTPStatus() . ' ' . $response->getRawBody(); ?>
ทดสอบผลลลัพธ์ ถ้าเราพิมพ์ p และถ้าเราพิมพ์ สวัสดี ผลที่ได้จะเป็นดังรูปด้านล่างตามลำดับ
โครงสร้างของข้อมูล กรณีพิมพ์ "p" จะได้ในรูปแบบดังนี้
{ "userId": " ไอดีของผู้ใช้ LINE ", "displayName": "Ninenik", "pictureUrl": "http://dl.profile.line-cd5174e308deba5c12e", "statusMessage": "You can do anything in this world, but never forget where you come from." }
จะเห็นว่า การเรียกดูข้อมูลของผู้ใช้ เราควรใช้คำสั่ง getJSONDecodedBody() เพื่อดึงข้อมูลเกี่ยวกับผู้ใช้มาในรูปแบบ array
จาก response ที่ได้ จะสะดวกในการนำไปใช้งานต่อ
การบันทึกรูปภาพ ไฟล์เสียง และวิดีโอจากผู้ใช้
ต่อไป เรามาดูวิธีการที่จะทำให้เราสามารถที่จะบันทึกไฟล์ที่เป็นรูปภาพ เสียง และวิดีโอ ที่ถูกส่งมาจากผู้ใช้ มาบันทึกเป็นข้อมูล
ไว้ใน server หลักการทำงานคือ เมื่อผู้ใช้ส่งข้อมูลมายัง bot โดยเป็น รูปภาพ เสียง หรือวิดีโอ เราสามารถใช้คำสั่ง
$bot->getMessageContent($idMessage)
เพื่อดูข้อมูลของเนื้อหาที่ผู้ใช้ส่งมา โดยอ้างอิงการเรียกดูข้อมูลจากการระบุ messageId ที่ได้รับจาก Event Object
ในโค้ดตัวอย่างด้านบน เราได้เก็บค่า messageId ไว้ในตัวแปร $idMessage
มาดูการเพิ่ม case เมื่อข้อมูลที่ผู้ใช้ส่งเป็น ไฟล์รุปภาพ เสียง หรือวิดีโอ ดังนี้
ไฟล์ bot.php บางส่วน
case (preg_match('/image|audio|video/',$typeMessage) ? true : false) : $response = $bot->getMessageContent($idMessage); if ($response->isSucceeded()) { // คำสั่ง getRawBody() ในกรณีนี้ จะได้ข้อมูลส่งกลับมาเป็น binary // เราสามารถเอาข้อมูลไปบันทึกเป็นไฟล์ได้ $dataBinary = $response->getRawBody(); // return binary // ทดสอบดูค่าของ header ด้วยคำสั่ง getHeaders() $dataHeader = $response->getHeaders(); $replyData = new TextMessageBuilder(json_encode($dataHeader)); break; } $failMessage = json_encode($idMessage.' '.$response->getHTTPStatus() . ' ' . $response->getRawBody()); $replyData = new TextMessageBuilder($failMessage); break;
ข้อมูลที่เป็นรูปภาพ เสียง หรือวิดีโอ จะเข้าเงื่อนไขนี้ โดยข้อมูลที่เราจะนำไปสร้างเป็นไฟล์ คือค่าที่ได้จากคำสั่ง
$response->getRawBody();
ในตัวอย่างข้อมูลที่ใช้ในการสร้างไฟล์จะอยู่ในตัวแปร $dataBinary สว่นตัวแปร $dataHeader จะเป็นการไปดึงค่า
ส่วนของ header ของไฟล์ที่ผู้ใช้ส่งมา ค่าส่วนนี้ เราสามารถใช้คำสั่ง getHeader($name) เพื่อดึงเฉพาะค่า header
ที่สนใจ แทนการดึงมาทั้งหมดก็ได้
ผลลัพธ์ที่ได้ กรณีผู้ใช้ส่งรูปภาพ เสียง หรือวิดีโอ จะได้เป็นดังนี้
มาดูโครงสร้างของค่า header จากไฟล์ที่ผู้ใช้ส่งมาหา bot
กรณีรูปภาพ
{ "Server": "nginx", "Content-Type": "image/jpeg", "Content-Length": "84748", "X-Line-Request-Id": "a1f60f25-f716-419e-bfb7-7fc5fc5148d6", "X-Content-Type-Options": "nosniff", "X-XSS-Protection": "1; mode=block", "X-Frame-Options": "DENY", "Expires": "Fri, 17 Nov 2017 17:23:07 GMT", "Cache-Control": "max-age=0, no-cache, no-store", "Pragma": "no-cache", "Date": "Fri, 17 Nov 2017 17:23:07 GMT", "Connection": "keep-alive" }
กรณีไฟล์เสียง
{ "Server": "nginx", "Content-Type": "audio/aac", "Content-Length": "48804", "X-Line-Request-Id": "cee50bc8-2b91-4333-8179-95053a4aacf4", "X-Content-Type-Options": "nosniff", "X-XSS-Protection": "1; mode=block", "X-Frame-Options": "DENY", "Expires": "Fri, 17 Nov 2017 17:23:54 GMT", "Cache-Control": "max-age=0, no-cache, no-store", "Pragma": "no-cache", "Date": "Fri, 17 Nov 2017 17:23:54 GMT", "Connection": "keep-alive" }
กรณีไฟล์วิดีโอ
{ "Server": "nginx", "Content-Type": "video/mp4", "Content-Length": "728810", "X-Line-Request-Id": "f43ee0bd-2ca4-46ca-9d3d-ff1ef65aeb24", "X-Content-Type-Options": "nosniff", "X-XSS-Protection": "1; mode=block", "X-Frame-Options": "DENY", "Expires": "Fri, 17 Nov 2017 17:25:06 GMT", "Cache-Control": "max-age=0, no-cache, no-store", "Pragma": "no-cache", "Date": "Fri, 17 Nov 2017 17:25:06 GMT", "Connection": "keep-alive" }
ส่วนของ header ของไฟล์ ที่เราจะนำมาเป็นตัวกำหนดการบันทึกไฟล์ ก็คือค่า Content-Type ดังนั้น เราสามารถใช้แค่
คำสั่ง getHeader($name) เฉพาะในส่วนของ Content-Type แทนก็ได้ สมมติเราจะบันทึกไฟล์ของผู้ใช้ในโฟลเดอร์
botdata ซ้อนด้วยโฟลเดอร์ userId ของผู้ใช้ แล้วก็มีไฟล์ต่างๆ อยู่ด้านใน โดยชื่อไฟล์จะใช้เป็น timestamp
เบื้องต้นให้สร้างโฟลเดอร์ botdata ขึ้นมาก่อน ส่วน userId เราจะใช้โค้ดเป็นตัวสร้าง
ส่วนของไฟล์ bot.php บางส่วน เพิ่มการบันทึกไฟล์
case (preg_match('/image|audio|video/',$typeMessage) ? true : false) : $response = $bot->getMessageContent($idMessage); if ($response->isSucceeded()) { // คำสั่ง getRawBody() ในกรณีนี้ จะได้ข้อมูลส่งกลับมาเป็น binary // เราสามารถเอาข้อมูลไปบันทึกเป็นไฟล์ได้ $dataBinary = $response->getRawBody(); // return binary // ดึงข้อมูลประเภทของไฟล์ จาก header $fileType = $response->getHeader('Content-Type'); switch ($fileType){ case (preg_match('/^image/',$fileType) ? true : false): list($typeFile,$ext) = explode("/",$fileType); $ext = ($ext=='jpeg' || $ext=='jpg')?"jpg":$ext; $fileNameSave = time().".".$ext; break; case (preg_match('/^audio/',$fileType) ? true : false): list($typeFile,$ext) = explode("/",$fileType); $fileNameSave = time().".".$ext; break; case (preg_match('/^video/',$fileType) ? true : false): list($typeFile,$ext) = explode("/",$fileType); $fileNameSave = time().".".$ext; break; } $botDataFolder = 'botdata/'; // โฟลเดอร์หลักที่จะบันทึกไฟล์ $botDataUserFolder = $botDataFolder.$userID; // มีโฟลเดอร์ด้านในเป็น userId อีกขั้น if(!file_exists($botDataUserFolder)) { // ตรวจสอบถ้ายังไม่มีให้สร้างโฟลเดอร์ userId mkdir($botDataUserFolder, 0777, true); } // กำหนด path ของไฟล์ที่จะบันทึก $fileFullSavePath = $botDataUserFolder.'/'.$fileNameSave; file_put_contents($fileFullSavePath,$dataBinary); // ทำการบันทึกไฟล์ $textReplyMessage = "บันทึกไฟล์เรียบร้อยแล้ว $fileNameSave"; $replyData = new TextMessageBuilder($textReplyMessage); break; } $failMessage = json_encode($idMessage.' '.$response->getHTTPStatus() . ' ' . $response->getRawBody()); $replyData = new TextMessageBuilder($failMessage); break;
ตัวอย่างผลลัพธ์ที่ได้
ไฟล์จากผู้ใช้ที่ส่งมา จะถูกสร้างเป็นไฟล์ใหม่ไว้บน server ใน path โฟลเดอร์
botdata > userId ของคนที่สนทนากับ bot > ชื่อไฟล์ด้านใน
เท่านี้เราก็สามารถบันทึกไฟล์รูปภาพ เสียง หรือวิดีโอ ที่ส่งมาจากผู้ใช้ ลงบน server ได้
ดูไฟล์ bot.php ทดสอบแบบเต็ม จะได้เป็นดังนี้
<?php // กรณีต้องการตรวจสอบการแจ้ง error ให้เปิด 3 บรรทัดล่างนี้ให้ทำงาน กรณีไม่ ให้ comment ปิดไป ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); // include composer autoload require_once '../vendor/autoload.php'; // การตั้งเกี่ยวกับ bot require_once 'bot_settings.php'; // กรณีมีการเชื่อมต่อกับฐานข้อมูล //require_once("dbconnect.php"); ///////////// ส่วนของการเรียกใช้งาน class ผ่าน namespace use LINE\LINEBot; use LINE\LINEBot\HTTPClient; use LINE\LINEBot\HTTPClient\CurlHTTPClient; //use LINE\LINEBot\Event; //use LINE\LINEBot\Event\BaseEvent; //use LINE\LINEBot\Event\MessageEvent; use LINE\LINEBot\MessageBuilder; use LINE\LINEBot\MessageBuilder\TextMessageBuilder; use LINE\LINEBot\MessageBuilder\StickerMessageBuilder; use LINE\LINEBot\MessageBuilder\ImageMessageBuilder; use LINE\LINEBot\MessageBuilder\LocationMessageBuilder; use LINE\LINEBot\MessageBuilder\AudioMessageBuilder; use LINE\LINEBot\MessageBuilder\VideoMessageBuilder; use LINE\LINEBot\ImagemapActionBuilder; use LINE\LINEBot\ImagemapActionBuilder\AreaBuilder; use LINE\LINEBot\ImagemapActionBuilder\ImagemapMessageActionBuilder ; use LINE\LINEBot\ImagemapActionBuilder\ImagemapUriActionBuilder; use LINE\LINEBot\MessageBuilder\Imagemap\BaseSizeBuilder; use LINE\LINEBot\MessageBuilder\ImagemapMessageBuilder; use LINE\LINEBot\MessageBuilder\MultiMessageBuilder; use LINE\LINEBot\TemplateActionBuilder; use LINE\LINEBot\TemplateActionBuilder\DatetimePickerTemplateActionBuilder; use LINE\LINEBot\TemplateActionBuilder\MessageTemplateActionBuilder; use LINE\LINEBot\TemplateActionBuilder\PostbackTemplateActionBuilder; use LINE\LINEBot\TemplateActionBuilder\UriTemplateActionBuilder; use LINE\LINEBot\MessageBuilder\TemplateBuilder; use LINE\LINEBot\MessageBuilder\TemplateMessageBuilder; use LINE\LINEBot\MessageBuilder\TemplateBuilder\ButtonTemplateBuilder; use LINE\LINEBot\MessageBuilder\TemplateBuilder\CarouselTemplateBuilder; use LINE\LINEBot\MessageBuilder\TemplateBuilder\CarouselColumnTemplateBuilder; use LINE\LINEBot\MessageBuilder\TemplateBuilder\ConfirmTemplateBuilder; use LINE\LINEBot\MessageBuilder\TemplateBuilder\ImageCarouselTemplateBuilder; use LINE\LINEBot\MessageBuilder\TemplateBuilder\ImageCarouselColumnTemplateBuilder; $httpClient = new CurlHTTPClient(LINE_MESSAGE_ACCESS_TOKEN); $bot = new LINEBot($httpClient, array('channelSecret' => LINE_MESSAGE_CHANNEL_SECRET)); // คำสั่งรอรับการส่งค่ามาของ LINE Messaging API $content = file_get_contents('php://input'); // แปลงข้อความรูปแบบ JSON ให้อยู่ในโครงสร้างตัวแปร array $events = json_decode($content, true); if(!is_null($events)){ // ถ้ามีค่า สร้างตัวแปรเก็บ replyToken ไว้ใช้งาน $replyToken = $events['events'][0]['replyToken']; $userID = $events['events'][0]['source']['userId']; $sourceType = $events['events'][0]['source']['type']; $is_postback = NULL; $is_message = NULL; if(isset($events['events'][0]) && array_key_exists('message',$events['events'][0])){ $is_message = true; $typeMessage = $events['events'][0]['message']['type']; $userMessage = $events['events'][0]['message']['text']; $idMessage = $events['events'][0]['message']['id']; } if(isset($events['events'][0]) && array_key_exists('postback',$events['events'][0])){ $is_postback = true; $dataPostback = NULL; parse_str($events['events'][0]['postback']['data'],$dataPostback);; $paramPostback = NULL; if(array_key_exists('params',$events['events'][0]['postback'])){ if(array_key_exists('date',$events['events'][0]['postback']['params'])){ $paramPostback = $events['events'][0]['postback']['params']['date']; } if(array_key_exists('time',$events['events'][0]['postback']['params'])){ $paramPostback = $events['events'][0]['postback']['params']['time']; } if(array_key_exists('datetime',$events['events'][0]['postback']['params'])){ $paramPostback = $events['events'][0]['postback']['params']['datetime']; } } } if(!is_null($is_postback)){ $textReplyMessage = "ข้อความจาก Postback Event Data = "; if(is_array($dataPostback)){ $textReplyMessage.= json_encode($dataPostback); } if(!is_null($paramPostback)){ $textReplyMessage.= " \r\nParams = ".$paramPostback; } $replyData = new TextMessageBuilder($textReplyMessage); } if(!is_null($is_message)){ switch ($typeMessage){ case 'text': $userMessage = strtolower($userMessage); // แปลงเป็นตัวเล็ก สำหรับทดสอบ switch ($userMessage) { case "p": // เรียกดูข้อมูลโพรไฟล์ของ Line user โดยส่งค่า userID ของผู้ใช้ LINE ไปดึงข้อมูล $response = $bot->getProfile($userID); if ($response->isSucceeded()) { // ดึงค่ามาแบบเป็น JSON String โดยใช้คำสั่ง getRawBody() กรณีเป้นข้อความ text $textReplyMessage = $response->getRawBody(); // return string $replyData = new TextMessageBuilder($textReplyMessage); break; } // กรณีไม่สามารถดึงข้อมูลได้ ให้แสดงสถานะ และข้อมูลแจ้ง ถ้าไม่ต้องการแจ้งก็ปิดส่วนนี้ไปก็ได้ $failMessage = json_encode($response->getHTTPStatus() . ' ' . $response->getRawBody()); $replyData = new TextMessageBuilder($failMessage); break; case "สวัสดี": // เรียกดูข้อมูลโพรไฟล์ของ Line user โดยส่งค่า userID ของผู้ใช้ LINE ไปดึงข้อมูล $response = $bot->getProfile($userID); if ($response->isSucceeded()) { // ดึงค่าโดยแปลจาก JSON String .ให้อยู่ใรูปแบบโครงสร้าง ตัวแปร array $userData = $response->getJSONDecodedBody(); // return array // $userData['userId'] // $userData['displayName'] // $userData['pictureUrl'] // $userData['statusMessage'] $textReplyMessage = 'สวัสดีครับ คุณ '.$userData['displayName']; $replyData = new TextMessageBuilder($textReplyMessage); break; } // กรณีไม่สามารถดึงข้อมูลได้ ให้แสดงสถานะ และข้อมูลแจ้ง ถ้าไม่ต้องการแจ้งก็ปิดส่วนนี้ไปก็ได้ $failMessage = json_encode($response->getHTTPStatus() . ' ' . $response->getRawBody()); $replyData = new TextMessageBuilder($failMessage); break; default: $textReplyMessage = " คุณไม่ได้พิมพ์ ค่า ตามที่กำหนด"; $replyData = new TextMessageBuilder($textReplyMessage); break; } break; case (preg_match('/image|audio|video/',$typeMessage) ? true : false) : $response = $bot->getMessageContent($idMessage); if ($response->isSucceeded()) { // คำสั่ง getRawBody() ในกรณีนี้ จะได้ข้อมูลส่งกลับมาเป็น binary // เราสามารถเอาข้อมูลไปบันทึกเป็นไฟล์ได้ $dataBinary = $response->getRawBody(); // return binary // ดึงข้อมูลประเภทของไฟล์ จาก header $fileType = $response->getHeader('Content-Type'); switch ($fileType){ case (preg_match('/^image/',$fileType) ? true : false): list($typeFile,$ext) = explode("/",$fileType); $ext = ($ext=='jpeg' || $ext=='jpg')?"jpg":$ext; $fileNameSave = time().".".$ext; break; case (preg_match('/^audio/',$fileType) ? true : false): list($typeFile,$ext) = explode("/",$fileType); $fileNameSave = time().".".$ext; break; case (preg_match('/^video/',$fileType) ? true : false): list($typeFile,$ext) = explode("/",$fileType); $fileNameSave = time().".".$ext; break; } $botDataFolder = 'botdata/'; // โฟลเดอร์หลักที่จะบันทึกไฟล์ $botDataUserFolder = $botDataFolder.$userID; // มีโฟลเดอร์ด้านในเป็น userId อีกขั้น if(!file_exists($botDataUserFolder)) { // ตรวจสอบถ้ายังไม่มีให้สร้างโฟลเดอร์ userId mkdir($botDataUserFolder, 0777, true); } // กำหนด path ของไฟล์ที่จะบันทึก $fileFullSavePath = $botDataUserFolder.'/'.$fileNameSave; file_put_contents($fileFullSavePath,$dataBinary); // ทำการบันทึกไฟล์ $textReplyMessage = "บันทึกไฟล์เรียบร้อยแล้ว $fileNameSave"; $replyData = new TextMessageBuilder($textReplyMessage); break; } $failMessage = json_encode($idMessage.' '.$response->getHTTPStatus() . ' ' . $response->getRawBody()); $replyData = new TextMessageBuilder($failMessage); break; default: $textReplyMessage = json_encode($events); $replyData = new TextMessageBuilder($textReplyMessage); break; } } } $response = $bot->replyMessage($replyToken,$replyData); if ($response->isSucceeded()) { echo 'Succeeded!'; return; } // Failed echo $response->getHTTPStatus() . ' ' . $response->getRawBody(); ?>
ในตอนหน้า เราจะมาดูวิธีการใช้ LINE Messaging API ในการส่ง Push Message และ Multicast Message
รอติดตาม