LINE의 빠른 응답 기능을 사용해 보았습니다.

2018년 7월 말에 발표된 LINE Messaging API의 신기능 「퀵 리플라이」에 대해 최근에 알고, 신경이 쓰였으므로 간단한 모의를 만들어 보았습니다.

빠른 응답의 이점


  • 옵션을 최대 13개까지 표시할 수 있습니다(버튼 템플릿에서는 4개까지만 표시할 수 있음)
  • 카메라/카메라 롤 시작 및 위치 정보 전송을 버튼으로 설정할 수 있습니다 (메뉴에서 사용자가 조작 할 필요 없음)

  • 개인적으로 이 두 가지 장점이 상당히 크다고 생각합니다.

    시도해 보았습니다.



    실제로 모의를 만들어 보았으므로 동작을 확인하고 싶습니다.

    표시 정보



    빠른 응답의 표시는 다음과 같습니다. 모의에서는 리치 메뉴의 좌하의 버튼을 눌러 퀵 리플라이를 출현시키도록 하고 있습니다. 선택 영역은 옆으로 스크롤할 수 있습니다.



    메시지 전송



    버튼을 눌러 메시지를 보낼 수 있습니다. 챗봇 측에서 어떤 메시지가 전송되었는지 처리할 수 있습니다. 아래에서는 "Message Send"라는 버튼을 눌러 메시지 송수신을 시도하고 있지만 포스트백 액션을 받을 수도 있습니다.



    날짜 및 시간 전송



    날짜와 시간을 보낼 수 있습니다. 모의에서는 「Datetime Send」라고 하는 버튼을 눌러 날짜와 시간 모두 지정시키고 있습니다만, 날짜만, 시간만을 지정하게 하는 것도 가능합니다. 예약 관리용의 챗봇등에서는 편리할 것 같은 기능이군요.



    카메라 시작



    퀵 리플라이로 밖에 실현할 수 없는 기능 그 1입니다. "Camera Start"버튼을 누르면 카메라가 시작되고 촬영한 이미지를 그대로 전송할 수 있습니다. 또 카메라 롤로부터도 사진 선택・화상 송신시키는 것도 가능합니다.

    ※아마 화상의 업로드 상한에 걸려 있어 화상 업할 수 없었습니다・・・시간을 두고 갱신 예정입니다.

    위치 정보 전송



    퀵 리플라이로 밖에 실현할 수 없는 기능 그 2입니다. "Location Send"라는 버튼을 누르면 현재 위치를 전송할 수 있습니다.



    소스 코드



    빠른 응답 메시지 본문을 만드는 부분은 거의 JSON 베타입니다. 요소를 가변으로 할 수 있도록 브러쉬 업하고 싶네요. 또 모의 전체로부터 요점 부분만 빼내서 쓰고 있으므로, 이대로 코피페로 움직일지는 모릅니다・・・(아마 괜찮아···?)

    Line.php
    <?php
    
    class LineFunctions {
    
        private function replyMessage($message, $channel_access_token) {
            $header = array(
                "Content-Type: application/json",
                'Authorization: Bearer ' . $channel_access_token,
            );
            $context = stream_context_create(array(
                "http" => array(
                    "method" => "POST",
                    "header" => implode("\r\n", $header),
                    "content" => json_encode($message),
                    "ignore_errors" => true,
                ),
            ));
            $response = file_get_contents('https://api.line.me/v2/bot/message/reply', false, $context);
            if (strpos($http_response_header[0], '200') === false) {
                http_response_code(500);
            }
    
            return $response;
        }
    
    
        function replyMessageText($reply_token, $send_messages, $channel_access_token){
            $reply_message = array(
                'replyToken' => $reply_token,
                'messages' => $send_messages
            );
    
            return $this->replyMessage($reply_message, $channel_access_token);
        }
    
    
        function createQuickReplyBodyProto(){
            $send_messages = array(
                'type' => 'text',
                'text' => '選択してください。',
                'quickReply' => array(
                    'items' => array(
                        array(
                            'type' => 'action',
                            'action' => array(
                                'type' => 'postback',
                                'label' => 'Data Send',
                                'data' => 'PostBackData',
                                'displayText' => 'ポストバックデータを送ります。',
                            )
                        ),
                        array(
                            'type' => 'action',
                            'action' => array(
                                'type' => 'message',
                                'label' => 'Message Send',
                                'text' => 'テキストを送信します。',
                            )
                        ),
                        array(
                            'type' => 'action',
                            'action' => array(
                                'type' => 'datetimepicker',
                                'label' => 'Datetime Send',
                                'data' => 'DateTimeData',
                                'mode' => 'datetime',
                                'initial' => '2018-12-19t00:00',
                                'max' => '2020-12-31t23:59',
                                'min' => '2015-01-01t00:00',
                            )
                        ),
                        array(
                            'type' => 'action',
                            'action' => array(
                                'type' => 'camera',
                                'label' => 'Camera Start',
                            )
                        ),
                        array(
                            'type' => 'action',
                            'action' => array(
                                'type' => 'cameraRoll',
                                'label' => 'CameraRoll Start',
                            )
                        ),
                        array(
                            'type' => 'action',
                            'action' => array(
                                'type' => 'location',
                                'label' => 'Location Send',
                            )
                        ),
                    )
                )
            );
    
            return $send_messages;
        }
    
    }
    

    index.php
    $line = new LineFunctions();
    
    //クイックリプライのメッセージボディ作成
    $send_messages = $line->createQuickReplyBodyProto();
    //メッセージ送信
    $send_response = $line->replyMessageText('[reply_tokenを指定してください]', $send_messages, QUICKREPLY_CHANNEL_ACCESS_TOKEN);
    
    

    요약



    퀵 리플라이는 채팅봇의 경험이 보다 직관적으로 되는 기능으로, 보다 유저 퍼스트가 되어 있는 것 같다. 빨리 잘 다루어 채팅봇 개발에 도입하고 싶네요.

    좋은 웹페이지 즐겨찾기