[slack/push] 슬랙으로 웹서비스 푸쉬 구현하기. 프로그래밍

지금 블로그 관리하면서 느낀점...

블로그에 댓글이 달렸는데... 내가 모르고있다가 일주일넘어서 알았을때....

무언가 필요하다고 느꼈다. 

물론 직접 gcm을 이용해서 push를 구현해도 되지만... 

app이 필요한작업이고 공수,시간이 많이 필요하기에 

간단하게 push 서비스를 구현하고싶었다.

그러다가 문득 스쳐갔던 추억... 

2016년도쯤 프로젝트중이었는데 프로젝트관리도구로 slack을 사용중이었다.

그때 출석체크프로그램을 만들어서 slack으로 출근을 찍으면 자동으로 

대표한테 push가 가게끔 구현한적이 있다....

바로 블로그에 적용시켰다.

 

1. slack 홈페이지가서 프로젝트 생성하기.

https://slack.com/

workspaces 가 생성되면 생성된 workspaces로 접속하기.

접속하면 해당창 dasktop가 나온다.

 

2. slack dasktop 에서 channel 생성하기

push내용을 저장할 채널을 생성하자. 

위의 스크린샷에 channels 옆에 + 버튼으로 생성하면된다.

나는 채널이름을 comment로 생성했다.

slack_dasktop.jpg

 

 

3. slack token 발급받고 도큐먼트 보기.

도큐먼트 문서 - https://api.slack.com/docs/messages 

우리는 chat.postMessage 를 이용할 예정이다.

method 문서 - https://api.slack.com/methods/chat.postMessage

위 사이트에 보면 tester 탭이 있다. 

들어가면 token 부근에 Generate tokens to test with here 라는 문구가 있다.

here을 클릭하면 토큰을 발행할수있다.

토큰을 발급받았다면 Documentation 을 보고 구현하자.

 

4. 구현부

나는 comment insert 나 update가 일어날때 중간에 트리거 형식으로 작성하였다.

curl을 이용하자.

        /**
         * slack push 를 보냄( 추후 trigger로 처리)
         * @param $strMessageText  메세지 내용
         * @param $strUserName     메세지 nick_name
         * @param $strChannel      보낼 slack 채널
         * @return bool            의미없음!
         */
        function _slackPostMessage( $strMessageText='push메세지', $strUserName='bot이름' ,$strChannel='#comment' ) {

            //--------------------------------------------
            // slack push START (추후 trigger로 개발)
            //--------------------------------------------
            $strSlackHost   = 'https://slack.com/api/chat.postMessage';
            $strSlackToken  = '발급받은 token';
            $params    = array('token' => $strSlackToken, 'text' => $strMessageText, 'channel' => $strChannel, 'username' => $strUserName );
            $ch = curl_init();
            curl_setopt( $ch, CURLOPT_URL, $strSlackHost );
            curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
            curl_setopt( $ch, CURLOPT_SSLVERSION, 1 );
            curl_setopt( $ch, CURLOPT_POST, 1 );
            curl_setopt( $ch, CURLOPT_POSTFIELDS, $params );
            curl_setopt( $ch, CURLOPT_TIMEOUT, 300 );
            curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
            curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1 );
            $result[0] = curl_exec( $ch );
            $result[1] = curl_errno( $ch );
            $result[2] = curl_error( $ch );
            $result[3] = curl_getinfo( $ch, CURLINFO_HTTP_CODE );
            curl_close( $ch );
            //print_r($result);
            //--------------------------------------------
            // slack push END
            //--------------------------------------------

            return true;
        }

        // 실행부
        $this->_slackPostMessage( 'comment 생성 - '.$oDocument->getTitleText().' :: '.$obj->content, $obj->nick_name, '#comment' );

        

파라미터로 보낼값은 토큰, 텍스트, 채널, bot이름. 

총 4가지이다. 이외 더 많은 옵션이 있으므로 도큐먼트 문서를 참고하자.

 

5. 휴대폰에 slack app 설치후 test 하기.

curl 로 메세지를 던지면 slack app 에서 push가 오는걸 확인할수있다.

slack app 설정에 들어가면 push 주기 시간 setting이 가능하다.

slack_comment_channel.jpg

 

 

 

Tag :

Leave Comments