ขอสอบถามเกี่ยวกับ Line Messaging API เรื่อง rich menu

ถาม-ตอบ แนะนำไอเดียว โค้ดตัวอย่าง แนวทาง วิธีแก้ปัญหา ขอสอบถามเกี่ยวกับ Line Messaging API เรื่อง rich menu

ขอสอบถามเกี่ยวกับ Line Messaging API เรื่อง rich menu
หนูลองศึกษาโค้ดจากบทความ https://www.ninenik.com/การสร้าง_และใช้งาน_Rich_Menu_ผ่าน_LINE_Messaging_API_ตอนที่_8-898.html
และลองทำตามตัวอย่างโค้ดและ demo แล้ว แต่เรียกใช้ case gr2- ไม่ได้ค่ะ กับลองทำตาม demo 4 คือ create rich menu อันใหม่ขึ้นมา ผลลัพธ์ก็ไม่ออกค่ะ 
ขอแนวทางในการศึกษาเพิ่มเติมด้วยนะคะ ขอบคุณล่วงหน้าค่ะ


Muk Chanapa 01-10-2021 18:13:24

คำแนะนำ และการใช้งาน

สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
  • เปลี่ยน


    ( หรือ เข้าใช้งานผ่าน Social Login )

 ความคิดเห็นที่ 1

ตรวจสอบดูว่าเปลี่ยน path ของตำแหน่งรูปภาพในโค้ดให้เป็น ตำแหน่งไฟล์รูปของเราบน server ถูกต้องแล้วหรือไม่ ในโค้ดจะมีอยู่สองจุด
 

 '[เปลี่ยนส่วนนี้เป็น path url ของเรา]/linebot/rich-menu/rich-menu-pattern-'.$imgRichLayout.'.png', // ไม่แสดงรูป มีมี url รูป


วิธีทำก็ไม่ยุ่งยาก ศึกษา บทความล่าสุด http://niik.in/1026
แล้วดู บทความตอนที่ 8 เอาเฉพาะส่วนของ การใช้งาน rich menu มาแทรก 
 

ไฟล์ bot_action.php 

<?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\Event\AccountLinkEvent;
use LINE\LINEBot\Event\MemberJoinEvent; 
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;
use LINE\LINEBot\QuickReplyBuilder;
use LINE\LINEBot\QuickReplyBuilder\QuickReplyMessageBuilder;
use LINE\LINEBot\QuickReplyBuilder\ButtonBuilder\QuickReplyButtonBuilder;
use LINE\LINEBot\TemplateActionBuilder\CameraRollTemplateActionBuilder;
use LINE\LINEBot\TemplateActionBuilder\CameraTemplateActionBuilder;
use LINE\LINEBot\TemplateActionBuilder\LocationTemplateActionBuilder;
use LINE\LINEBot\RichMenuBuilder;
use LINE\LINEBot\RichMenuBuilder\RichMenuSizeBuilder;
use LINE\LINEBot\RichMenuBuilder\RichMenuAreaBuilder;
use LINE\LINEBot\RichMenuBuilder\RichMenuAreaBoundsBuilder;
use LINE\LINEBot\Constant\Flex\ComponentIconSize;
use LINE\LINEBot\Constant\Flex\ComponentImageSize;
use LINE\LINEBot\Constant\Flex\ComponentImageAspectRatio;
use LINE\LINEBot\Constant\Flex\ComponentImageAspectMode;
use LINE\LINEBot\Constant\Flex\ComponentFontSize;
use LINE\LINEBot\Constant\Flex\ComponentFontWeight;
use LINE\LINEBot\Constant\Flex\ComponentMargin;
use LINE\LINEBot\Constant\Flex\ComponentSpacing;
use LINE\LINEBot\Constant\Flex\ComponentButtonStyle;
use LINE\LINEBot\Constant\Flex\ComponentButtonHeight;
use LINE\LINEBot\Constant\Flex\ComponentSpaceSize;
use LINE\LINEBot\Constant\Flex\ComponentGravity;
use LINE\LINEBot\Constant\Flex\BubleContainerSize;
use LINE\LINEBot\MessageBuilder\FlexMessageBuilder;
use LINE\LINEBot\MessageBuilder\Flex\BubbleStylesBuilder;
use LINE\LINEBot\MessageBuilder\Flex\BlockStyleBuilder;
use LINE\LINEBot\MessageBuilder\Flex\ContainerBuilder\BubbleContainerBuilder;
use LINE\LINEBot\MessageBuilder\Flex\ContainerBuilder\CarouselContainerBuilder;
use LINE\LINEBot\MessageBuilder\Flex\ComponentBuilder\BoxComponentBuilder;
use LINE\LINEBot\MessageBuilder\Flex\ComponentBuilder\ButtonComponentBuilder;
use LINE\LINEBot\MessageBuilder\Flex\ComponentBuilder\IconComponentBuilder;
use LINE\LINEBot\MessageBuilder\Flex\ComponentBuilder\ImageComponentBuilder;
use LINE\LINEBot\MessageBuilder\Flex\ComponentBuilder\SpacerComponentBuilder;
use LINE\LINEBot\MessageBuilder\Flex\ComponentBuilder\FillerComponentBuilder;
use LINE\LINEBot\MessageBuilder\Flex\ComponentBuilder\SeparatorComponentBuilder;
use LINE\LINEBot\MessageBuilder\Flex\ComponentBuilder\TextComponentBuilder;
use LINE\LINEBot\MessageBuilder\Flex\ComponentBuilder\SpanComponentBuilder;
 
// ไฟล์ฟังก์ชั่นสำหรับแปลง xml เป็น flex 
require_once("flex_gen.php");
 
// ส่วนของการทำงาน
if(!is_null($events)){
 

    // ถ้าเป็น Postback Event
    if(!is_null($eventPostback)){
        $dataPostback = NULL;
        $paramPostback = NULL;
        // แปลงข้อมูลจาก Postback Data เป็น array
        parse_str($eventObj->getPostbackData(),$dataPostback);
        // ดึงค่า params กรณีมีค่า params
        $paramPostback = $eventObj->getPostbackParams();
         
        $moreResult = "";
        // ส่วนทำงานสำหรับเชื่อม Rich Menu ไปยังผู้ใช้นั้นๆ
        if(isset($dataPostback['action']) && $dataPostback['action']=="more_richmenu"){
            $respRichMenu = $bot->linkRichMenu($userId,$dataPostback['richmenuid']);
            $moreResult = $respRichMenu->getRawBody();
            $result = json_decode($respRichMenu->getRawBody(),TRUE); 
        }       
        // ส่วนทำงานสำหรับยกเลิกการเชื่อมกับ Rich Menu ของ ผู้ใช้
        if(isset($dataPostback['action']) && $dataPostback['action']=="back_richmenu"){
            $respRichMenu = $bot->unlinkRichMenu($userId);
            $moreResult = $respRichMenu->getRawBody();
            $result = json_decode($respRichMenu->getRawBody(),TRUE); 
        }               
        // ส่วนทำงานสำหรับลบ Rich Menu
        if(isset($dataPostback['action']) && $dataPostback['action']=="delete_richmenu"){
            $respRichMenu = $bot->deleteRichMenu($dataPostback['richMenuId']);
            $moreResult = $respRichMenu->getRawBody();
            $result = json_decode($respRichMenu->getRawBody(),TRUE); 
        }
        // ส่วนทำงานสำหรับดูข้อมูลของ Rich Menu นั้นๆ
        if(isset($dataPostback['action']) && $dataPostback['action']=="get_richmenu"){
            $respRichMenu = $bot->getRichMenu($dataPostback['richMenuId']);
            $moreResult = $respRichMenu->getRawBody();
            $result = json_decode($respRichMenu->getRawBody(),TRUE); 
        }
        // ส่วนทำงานสำหรับกำหนดเป็น เมนูหลัก
        if(isset($dataPostback['action']) && $dataPostback['action']=="s_default_richmenu"){
            $respRichMenu = $httpClient->post("https://api.line.me/v2/bot/user/all/richmenu/".$dataPostback['richMenuId'],array());
            $moreResult = $respRichMenu->getRawBody();
            $result = json_decode($respRichMenu->getRawBody(),TRUE); 
        }   
        // ส่วนทำงานสำหรับยกเลิกเมนูหลัก    
        if(isset($dataPostback['action']) && $dataPostback['action']=="c_default_richmenu"){
            $respRichMenu = $httpClient->delete("https://api.line.me/v2/bot/user/all/richmenu");
            $moreResult = $respRichMenu->getRawBody();
            $result = json_decode($respRichMenu->getRawBody(),TRUE); 
        }           
        // ส่วนทำงานดึงข้อมูลเมนูหลัก หรือ Rich Menu ที่เป็นเมนูหลัก ถ้ามี
        if(isset($dataPostback['action']) && $dataPostback['action']=="g_default_richmenu"){
            $respRichMenu = $httpClient->get("https://api.line.me/v2/bot/user/all/richmenu");
            $moreResult = $respRichMenu->getRawBody();
            $result = json_decode($respRichMenu->getRawBody(),TRUE); 
        }       
        // ส่วนทำงานอัพโหลดรูปให้กับ Rich Menu  
        if(isset($dataPostback['action']) && $dataPostback['action']=="upload_richmenu"){
            $arr_richMenuImg = explode("-",$dataPostback['richMenuName']);
            $richMenuImg = str_replace('Rich Menu ','',$arr_richMenuImg[0]);        
            $richMenuImg = sprintf("%02d",$richMenuImg);
            $richMenuImg_full = $richMenuImg."-".$arr_richMenuImg[1];           
            if(file_exists("rich-menu/rich-menu-".$richMenuImg_full.".png")){
                $richMenuImg = $richMenuImg_full;
            }
            $respRichMenu = $bot->uploadRichMenuImage($dataPostback['richMenuId'],"rich-menu/rich-menu-".$richMenuImg.".png","image/png");
            $moreResult = $respRichMenu->getRawBody();
            $result = json_decode($respRichMenu->getRawBody(),TRUE); 
        }                   
          
        // ทดสอบแสดงข้อความที่เกิดจาก Postaback Event
        $textReplyMessage = "ข้อความจาก Postback Event Data : DataPostback = ";        
        $textReplyMessage.= json_encode($dataPostback);
        $textReplyMessage.= " ParamPostback = ".json_encode($paramPostback);
        $textReplyMessage.= " RsponseMore = ".$moreResult;
        $replyData = new TextMessageBuilder($textReplyMessage);    
    }

    // ถ้าเป้น Message Event 
    if(!is_null($eventMessage)){
         
        // สร้างตัวแปรเก็ยค่าประเภทของ Message จากทั้งหมด 7 ประเภท
        $typeMessage = $eventObj->getMessageType();  
        //  text | image | sticker | location | audio | video | file  
        // เก็บค่า id ของข้อความ
        $idMessage = $eventObj->getMessageId();          
        // ถ้าเป็นข้อความ
        if($typeMessage=='text'){
            $userMessage = $eventObj->getText(); // เก็บค่าข้อความที่ผู้ใช้พิมพ์
        }
		
        switch ($typeMessage){ // กำหนดเงื่อนไขการทำงานจาก ประเภทของ message
            case 'text':  // ถ้าเป็นข้อความ
                $userMessage = strtolower($userMessage); // แปลงเป็นตัวเล็ก สำหรับทดสอบ
                switch ($userMessage) {
                    /////////////////// RICH MENU
                        case (preg_match('/^cr-/',$userMessage) ? true : false):
                            $paramRichMenu = explode(">",$userMessage);
                            if(!isset($paramRichMenu) || !is_array($paramRichMenu) || count($paramRichMenu)<3){
                                exit;
                            }
                            $patternSet = $paramRichMenu[0];
                            $numberID = $paramRichMenu[1];
                            $actionSet = $paramRichMenu[2];
                            $actionArr_prepare = array();
                            if(isset($actionSet)){
                                $actionArr_prepare = explode(")",$actionSet);
                                array_pop($actionArr_prepare);
                            }
                            $imgTypePattern = str_replace("cr-","",$patternSet);
                            $areaBound_arr = array(
                                "a"=>array(0,0,833,843),
                                "b"=>array(833,0,833,843),
                                "c"=>array(1666,0,834,843),
                                "d"=>array(0,843,833,843),
                                "e"=>array(833,843,833,843),
                                "f"=>array(1666,843,834,843),
                                "g"=>array(0,0,1250,843),
                                "h"=>array(1250,0,1250,843),
                                "i"=>array(0,843,1250,843),
                                "j"=>array(1250,843,1250,843),
                                "k"=>array(0,0,2500,843),
                                "l"=>array(0,0,1666,1686),
                                "m"=>array(0,843,2500,843),
                                "n"=>array(0,0,1250,1686),
                                "o"=>array(1250,0,1250,1686),
                                "p"=>array(0,0,2500,1686),
                                "q"=>array(0,0,1666,843),
                                "r"=>array(833,0,2500,843)
                            );
                            $imgTypePatternArea_arr = array(
                                "1"=>array("a","b","c","d","e","f"),
                                "2"=>array("g","h","i","j"),
                                "3"=>array("k","d","e","f"),
                                "4"=>array("l","c","f"),
                                "5"=>array("k","m"),
                                "6"=>array("n","o"),
                                "7"=>array("p"),
                                "8"=>array("a","b","c"),
                                "9"=>array("g","h"),
                                "10"=>array("q","c"),
                                "11"=>array("a","r"),
                                "12"=>array("k")
                            );
 
                            function makeFRM($imgType){
                                global $areaBound_arr,$imgTypePatternArea_arr,$actionSet,$actionArr_prepare;
                                $dataArr = array();
                                $Area_arr = $imgTypePatternArea_arr[$imgType];
                                for($i=1;$i<=count($imgTypePatternArea_arr[$imgType]);$i++){                                 
                                    if(preg_match('/^p\(/',$actionArr_prepare[$i-1])){
                                        list($ac,$data) = explode("(",$actionArr_prepare[$i-1]);
                                        $actionVal = new PostbackTemplateActionBuilder('p',$data);
                                    }elseif(preg_match('/^m\(/',$actionArr_prepare[$i-1])){
                                        list($ac,$data) = explode("(",$actionArr_prepare[$i-1]);
                                        $actionVal = new MessageTemplateActionBuilder('m',$data);                                   
                                    }elseif(preg_match('/^u\(/',$actionArr_prepare[$i-1])){
                                        list($ac,$data) = explode("(",$actionArr_prepare[$i-1]);
                                        $actionVal = new UriTemplateActionBuilder('u',$data);   
                                    }elseif(preg_match('/^c\(/',$actionArr_prepare[$i-1])){
                                        list($ac,$data) = explode("(",$actionArr_prepare[$i-1]);
                                        $actionVal = new UriTemplateActionBuilder('u',"line://nv/camera/");     
                                    }elseif(preg_match('/^cs\(/',$actionArr_prepare[$i-1])){
                                        list($ac,$data) = explode("(",$actionArr_prepare[$i-1]);
                                        $actionVal = new UriTemplateActionBuilder('u',"line://nv/cameraRoll/single/");  
                                    }elseif(preg_match('/^cm\(/',$actionArr_prepare[$i-1])){
                                        list($ac,$data) = explode("(",$actionArr_prepare[$i-1]);
                                        $actionVal = new UriTemplateActionBuilder('u',"line://nv/cameraRoll/multi/");                                                       
                                    }elseif(preg_match('/^l\(/',$actionArr_prepare[$i-1])){
                                        list($ac,$data) = explode("(",$actionArr_prepare[$i-1]);
                                        $actionVal = new UriTemplateActionBuilder('u',"line://nv/location");                                            
                                    }elseif(preg_match('/^d\(/',$actionArr_prepare[$i-1])){
                                        list($ac,$data) = explode("(",$actionArr_prepare[$i-1]);
                                        $actionVal = new DatetimePickerTemplateActionBuilder('d',$data,'datetime');
                                    }elseif(preg_match('/^n\(/',$actionArr_prepare[$i-1])){
                                        $actionVal = NULL;
                                        continue;
                                    }else{
                                        $actionVal = NULL;
                                        continue;
                                    }
                                    $patternLetter = $Area_arr[$i-1];
                                    array_push($dataArr,
                                            new RichMenuAreaBuilder(
                                                new RichMenuAreaBoundsBuilder(...$areaBound_arr[$patternLetter]),$actionVal
                                            )                   
                                    );
                                }
                                return $dataArr;                        
                            }
        //                          $arrayRichMenu = makeFRM();
                            // $sizeBuilder, $selected, $name, $chatBarText, $areaBuilders // 1686, 843.  // 2500
                            // ($x, $y, $width, $height)
                            $_RichMenuSize = [1686,2500];
                            if((int)$imgTypePattern>7){
                                $_RichMenuSize = [843,2500];
                            }
                            $_idRichMenu = $imgTypePattern."-".$numberID;
                            $respRichMenu = $bot->createRichMenu(
                                new RichMenuBuilder(
                                    new RichMenuSizeBuilder(...$_RichMenuSize),true,"Rich Menu $_idRichMenu",
                                    "เมนู",
                                    makeFRM($imgTypePattern)
                                )
                            );
                            // ทำอื่นๆ 
                            $textReplyMessage = " การสร้าง Rich Menu ".$respRichMenu->getRawBody()." Res = ".json_encode($dataArr);
                            $replyData = new TextMessageBuilder($textReplyMessage);                                     
                            break;                              
                        case "gr-": // ส่วนจัดการ Rich Menu ส่วนที่ 1
                            /// หา Rich Menu ที่เป็นเมนูหลัก หรือ Default ถ้ามี
                            $respRichMenu = $httpClient->get("https://api.line.me/v2/bot/user/all/richmenu");
                            $result = json_decode($respRichMenu->getRawBody(),TRUE);     
                            $defaultRichMenu = (isset($result['richMenuId']))?$result['richMenuId']:NULL;
 
                            // รายการ Rich Menu ทั้งหมด
                            $respRichMenu = $bot->getRichMenuList();
                            $result = json_decode($respRichMenu->getRawBody(),TRUE);                                 
                            // สร้างตัวแปร สำหรับเก็บ rich menu แต่ละรายการไว้ในแต่ละคอลัมน์
                            $columnTemplate = array();
                            foreach($result['richmenus'] as $itemRichMenu){
                                $_txtShow = ($itemRichMenu['richMenuId']==$defaultRichMenu)?"ยกเลิก":"กำหนดเป็น";
                                $_action = ($itemRichMenu['richMenuId']==$defaultRichMenu)?"c_default_richmenu":"s_default_richmenu";
                                $arr_imgRichLayout = explode("-",$itemRichMenu['name']);
                                $imgRichLayout = str_replace('Rich Menu ','',$arr_imgRichLayout[0]);
                                $imgRichLayout = sprintf("%02d",$imgRichLayout);
                                //$imgRichLayout = str_pad($imgRichLayout,2,"0",STR_PAD_LEFT);          
                                array_push($columnTemplate, 
                                    new CarouselColumnTemplateBuilder(
                                            $itemRichMenu['name'], // ชื่อ rich menu
                                            'เลือกการจัดการ',
                                            '[เปลี่ยนส่วนนี้เป็น path url ของเรา]/linebot/rich-menu/rich-menu-pattern-'.$imgRichLayout.'.png', // ไม่แสดงรูป มีมี url รูป
                                            // ตัวอย่าง 'https://www.mywebsite.com/linebot/rich-menu/rich-menu-pattern-'.$imgRichLayout.'.png', 
                                            array(                                  
                                                new PostbackTemplateActionBuilder(
                                                    $_txtShow.' Default', // ข้อความแสดงในปุ่ม
                                                    http_build_query(array(
                                                        'action'=>$_action,          
                                                        'richMenuName'=>$itemRichMenu['name'],                    
                                                        'richMenuId'=>$itemRichMenu['richMenuId']
                                                    )), // ข้อมูลที่จะส่งไปใน webhook ผ่าน postback event
                                                    'กำหนด Default Rich Menu'  // ข้อความที่จะแสดงฝั่งผู้ใช้ เมื่อคลิกเลือก
                                                ),          
                                                new PostbackTemplateActionBuilder(
                                                    'แสดงที่ Default', // ข้อความแสดงในปุ่ม
                                                    http_build_query(array(
                                                        'action'=>'g_default_richmenu',      
                                                        'richMenuName'=>$itemRichMenu['name'],            
                                                        'richMenuId'=>$itemRichMenu['richMenuId']
                                                    )), // ข้อมูลที่จะส่งไปใน webhook ผ่าน postback event
                                                    'แสดง Default Rich Menu'  // ข้อความที่จะแสดงฝั่งผู้ใช้ เมื่อคลิกเลือก
                                                ),                                                                                          
                                                new PostbackTemplateActionBuilder(
                                                    'อัพโหลดรูป Rich Menu นี้', // ข้อความแสดงในปุ่ม
                                                    http_build_query(array(
                                                        'action'=>'upload_richmenu',         
                                                        'richMenuName'=>$itemRichMenu['name'],                    
                                                        'richMenuId'=>$itemRichMenu['richMenuId']
                                                    )), // ข้อมูลที่จะส่งไปใน webhook ผ่าน postback event
                                                    'อัพโหลดรูป Rich Menu'  // ข้อความที่จะแสดงฝั่งผู้ใช้ เมื่อคลิกเลือก
                                                )                       
                                            )       
                                    )   // end CarouselColumnTemplateBuilder            
                                ); // end array push function
                            }   // end foreach                      
 
                            // ใช้ Carousel Template วนลูปแสดงรายการ rich menu ที่ได้สร้างไว้
                            $replyData = new TemplateMessageBuilder('Carousel',
                                new CarouselTemplateBuilder(
                                    $columnTemplate
                                )
                            );                                          
                            break;      
                        case "gr2-": // ส่วนจัดการ Rich Menu ส่วนที่ 2
                            $respRichMenu = $bot->getRichMenuList();
                            $result = json_decode($respRichMenu->getRawBody(),TRUE); 
 
                            // สร้างตัวแปร สำหรับเก็บ rich menu แต่ละรายการไว้ในแต่ละคอลัมน์
                            $columnTemplate = array();
                            foreach($result['richmenus'] as $itemRichMenu){
                                $arr_imgRichLayout = explode("-",$itemRichMenu['name']);
                                $imgRichLayout = str_replace('Rich Menu ','',$arr_imgRichLayout[0]);
                                $imgRichLayout = sprintf("%02d",$imgRichLayout);
                                //$imgRichLayout = str_pad($imgRichLayout,2,"0",STR_PAD_LEFT);                                  
                                array_push($columnTemplate, 
                                    new CarouselColumnTemplateBuilder(
                                            $itemRichMenu['name'], // ชื่อ rich menu
                                            'เลือกการจัดการ',
                                            '[เปลี่ยนส่วนนี้เป็น path url ของเรา]/linebot/rich-menu/rich-menu-pattern-'.$imgRichLayout.'.png', // ไม่แสดงรูป มีมี url รูป
                                            // ตัวอย่าง 'https://www.mywebsite.com/linebot/rich-menu/rich-menu-pattern-'.$imgRichLayout.'.png', 
                                            array(
                                                new PostbackTemplateActionBuilder(
                                                    'รายละเอียด Rich Menu', // ข้อความแสดงในปุ่ม
                                                    http_build_query(array(
                                                        'action'=>'get_richmenu',        
                                                        'richMenuName'=>$itemRichMenu['name'],                        
                                                        'richMenuId'=>$itemRichMenu['richMenuId']
                                                    )), // ข้อมูลที่จะส่งไปใน webhook ผ่าน postback event
                                                    'ข้อมูล Rich Menu'  // ข้อความที่จะแสดงฝั่งผู้ใช้ เมื่อคลิกเลือก
                                                ),                                                                                                                              
                                                new PostbackTemplateActionBuilder(
                                                    'ลบ Rich Menu นี้', // ข้อความแสดงในปุ่ม
                                                    http_build_query(array(
                                                        'action'=>'delete_richmenu',         
                                                        'richMenuName'=>$itemRichMenu['name'],                    
                                                        'richMenuId'=>$itemRichMenu['richMenuId']
                                                    )), // ข้อมูลที่จะส่งไปใน webhook ผ่าน postback event
                                                    'ลบ Rich Menu'  // ข้อความที่จะแสดงฝั่งผู้ใช้ เมื่อคลิกเลือก
                                                ),              
                                                new PostbackTemplateActionBuilder(
                                                    'อัพโหลดรูป Rich Menu นี้', // ข้อความแสดงในปุ่ม
                                                    http_build_query(array(
                                                        'action'=>'upload_richmenu',         
                                                        'richMenuName'=>$itemRichMenu['name'],                    
                                                        'richMenuId'=>$itemRichMenu['richMenuId']
                                                    )), // ข้อมูลที่จะส่งไปใน webhook ผ่าน postback event
                                                    'อัพโหลดรูป Rich Menu'  // ข้อความที่จะแสดงฝั่งผู้ใช้ เมื่อคลิกเลือก
                                                )                       
                                            )       
                                    )   // end CarouselColumnTemplateBuilder            
                                ); // end array push function
                            }   // end foreach                      
 
                            // ใช้ Carousel Template วนลูปแสดงรายการ rich menu ที่ได้สร้างไว้
                            $replyData = new TemplateMessageBuilder('Carousel',
                                new CarouselTemplateBuilder(
                                    $columnTemplate
                                )
                            );                                          
                            break;   
                    /////////////////// RICH MENU                                                            
                        case "ot":
                            // ทำอื่นๆ 
                            break;
                        case "l": // เงื่อนไขทดสอบถ้ามีใครพิมพ์ L ใน GROUP / ROOM แล้วให้ bot ออกจาก GROUP / ROOM
                                $sourceId = $eventObj->getEventSourceId();
                                if($eventObj->isGroupEvent()){
                                    $bot->leaveGroup($sourceId);
                                }
                                if($eventObj->isRoomEvent()){
                                    $bot->leaveRoom($sourceId);  
                                }                                                                                         
                            break;                          
                        case "qr":
                            $postback = new PostbackTemplateActionBuilder(
                                'Postback', // ข้อความแสดงในปุ่ม
                                http_build_query(array(
                                    'action'=>'buy',
                                    'item'=>100
                                )), // ข้อมูลที่จะส่งไปใน webhook ผ่าน postback event
                                 'Buy'  // ข้อความที่จะแสดงฝั่งผู้ใช้ เมื่อคลิกเลือก
                            );
                            $txtMsg = new MessageTemplateActionBuilder(
                                'ข้อความภาษาไทย',// ข้อความแสดงในปุ่ม
                                'thai' // ข้อความที่จะแสดงฝั่งผู้ใช้ เมื่อคลิกเลือก
                            );
                            $datetimePicker = new DatetimePickerTemplateActionBuilder(
                                'Datetime Picker', // ข้อความแสดงในปุ่ม
                                http_build_query(array(
                                    'action'=>'reservation',
                                    'person'=>5
                                )), // ข้อมูลที่จะส่งไปใน webhook ผ่าน postback event
                                'datetime', // date | time | datetime รูปแบบข้อมูลที่จะส่ง ในที่นี้ใช้ datatime
                                substr_replace(date("Y-m-d H:i"),'T',10,1), // วันที่ เวลา ค่าเริ่มต้นที่ถูกเลือก
                                substr_replace(date("Y-m-d H:i",strtotime("+5 day")),'T',10,1), //วันที่ เวลา มากสุดที่เลือกได้
                                substr_replace(date("Y-m-d H:i"),'T',10,1) //วันที่ เวลา น้อยสุดที่เลือกได้
                            );
                             
                            $quickReply = new QuickReplyMessageBuilder(
                                array(
                                    new QuickReplyButtonBuilder(new LocationTemplateActionBuilder('เลือกตำแหน่ง')),
                                    new QuickReplyButtonBuilder(new CameraTemplateActionBuilder('ถ่ายรูป')),
                                    new QuickReplyButtonBuilder(new CameraRollTemplateActionBuilder('เลือกรูปภาพ')),
                                    new QuickReplyButtonBuilder($postback),
                                    new QuickReplyButtonBuilder($datetimePicker),
                                    new QuickReplyButtonBuilder(
                                        $txtMsg,
                                        "https://www.ninenik.com/images/ninenik_page_logo.png"
                                    ),
                                )
                            );
                            $textReplyMessage = "ส่งพร้อม quick reply ";
                            $replyData = new TextMessageBuilder($textReplyMessage,$quickReply);                             
                            break;                                                                         
                    default:
                        $textReplyMessage = " คุณไม่ได้พิมพ์ ค่า ตามที่กำหนด";
                        $replyData = new TextMessageBuilder($textReplyMessage);         
                        break;                                      
                }
                break;                                                  
            default:
                if(!is_null($replyData)){
                     
                }else{
                    // กรณีทดสอบเงื่อนไขอื่นๆ ผู้ใช้ไม่ได้ส่งเป็นข้อความ
                    $textReplyMessage = 'สวัสดีครับ คุณ '.$typeMessage;         
                    $replyData = new TextMessageBuilder($textReplyMessage);         
                }
                break;  
        }		
		
	}
}
?>



ที่เหลือก็แค่ทำความเข้าใจกับคำสั่ง และรูปแบบการใช้งาน

 



>>>  อัพเดท >>> 01-10-2021
------------------------------------------


บทความแนะนำที่เกี่ยวข้อง
การสร้าง และใช้งาน Rich Menu ผ่าน LINE Messaging API ตอนที่ 8อ่าน 24,952
สรุปใช้ Line bot sdk แบบรวบรัด ด้วยขั้นตอนง่ายๆ อัพเดทปี 2021อ่าน 8,745
ninenik 01-10-2021






เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ