본문 바로가기
카카오 REST API & SDK/카카오톡 채널

[PHP] 카카오톡 채널 추가/차단 콜백 API 만들기

by kakao-TAM 2021. 1. 6.

developers.kakao.com/docs/latest/ko/kakaotalk-channel/rest-api#channel-callback

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

카카오톡 채널에 고객이 추가되거나 차단되었을때 콜백을 받아 고객을 식별할 수 있는 기능입니다.

 

1. Kakao Developers에서 콜백 URL을 등록합니다.

2. callback 받을 페이지를 생성하고, 간단히 파일에 저장하는 로직을 추가해 봅니다.

<?php
class ChannelService extends service {  
    public function callback(){

        //{"event":"added","id":"1111","id_type":"app_user_id","plus_friend_public_id":"_FLX","plus_friend_uuid":"@ad","updated_at":"2020-01-01T00:00:00Z"}'

        // Takes raw data from the request
        $json = file_get_contents('php://input');

        // Converts it into a PHP object
        $data = json_decode($json);        

        $this->hasAccess($data);
        Response::jsonReturn('excute', 'error'); 
    }

    public function hasAccess($data){
        //Write action to txt log
        $log  = "/event: ".$data->event.
                "/id: ".$data->id.
                "/id_type: ".$data->id_type.
                "/plus_friend_public_id: ".$data->plus_friend_public_id.
                "/plus_friend_uuid: ".$data->plus_friend_uuid.
                "/updated_at: ".$data->updated_at.PHP_EOL;
        file_put_contents('./channel_callback_log_'.date("j.n.Y").'.txt', $log, FILE_APPEND);
    }       
}

3. 사이트 배포 후, curl로 작동 여부를 확인합니다.

mcpel@DESKTOP-EPQ0FGP MINGW64 ~ (master)
$ curl -X POST 'https://googsu.com/api/kakao/channel/callback'    -H 'Authorization: KakaoAK test'   -H 'Content-Type: application/json'   -d '{"event":"added","id":"1111","id_type":"app_user_id","plus_friend_public_id":"_FLX","plus_friend_uuid":"@ad","updated_at":"2020-01-01T00:00:00Z"}'
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   185  100    40  100   145    232    843 --:--:-- --:--:-- --:--:--  1081

{"result_code":200,"result":"success"}

4. 서버에 저장된 로그파일을 확인해봅니다.

/event: added/id: 1111/id_type: app_user_id/plus_friend_public_id: _FLX/plus_friend_uuid: @ad/updated_at: 2020-01-01T00:00:00Z

5. 실제 채널 연결 차단과 추가로 최종확인합니다.

/event: blocked/id: 1515035367/id_type: app_user_id/plus_friend_public_id: _GVVxnK/plus_friend_uuid: @국수닷컴/updated_at: 2021-01-14T05:06:37Z
/event: added/id: 1515035367/id_type: app_user_id/plus_friend_public_id: _GVVxnK/plus_friend_uuid: @국수닷컴/updated_at: 2021-01-14T05:06:42Z
/event: blocked/id: 1515035367/id_type: app_user_id/plus_friend_public_id: _GVVxnK/plus_friend_uuid: @국수닷컴/updated_at: 2021-01-14T05:08:48Z
/event: added/id: 1515035367/id_type: open_id/plus_friend_public_id: _GVVxnK/plus_friend_uuid: @국수닷컴/updated_at: 2021-01-14T05:12:02Z

카카오톡앱에서 실행한 경우 id_type: app_user_id 이고 웹사이트에서 카카오 싱크로 가입한 경우 id_type이 open_id 입니다.

댓글