IT Study/슬랙연동하기

PHP 슬랙 연동 – 웹훅 !

ComputerScientist 2020. 11. 3. 11:19

“PHP 슬랙 연동” 하기!

PHP 슬랙 연동 , So called- 웹 훅!

프레임워크를 사용하지 않아서, PHP 어디에서든 사용이 가능합니다

웹서비스를 사용하다 보면 노티를 받아야 할 일이 의외로 많다. 어떤 서비스를 하느냐에 따라 천차만별이긴 하겠지만,
크게 세 가지 경우 정도 있을 것으로 생각된다.

  • 서비스가 정상적으로 작동하는지 확인할 때 (서버다운, exception 발생 등)
  • QNA 등, 실시간으로 사용자에게 응대해야 할 때
  • 백그라운드 프로세스가 잘 동작하고 있는지 모니터링

물론 나보다 경험이 많은 사람들은 이 이외에도 노티피케이션 받아야 할 경우가 더 많이 있다는 걸 알 것이다.
근데 지금까지 경험해본 바로는 저 3개 정도가 되는 것 같다.

그렇다면, 어떻게 PHP 코드로 슬랙 웹 훅을 연동할까?






출처 : //api.slack.com/





Prerequisite 

서비스에 들어가기 전에, 슬랙 웹 훅 서비스를 활성화시켜야 한다. 어떻게 하는지 모르신다면 위의 글을 클릭.

꼭!!!!!!!!!!!!!!



PHP 슬랙 연동 코드 작성하기

슬랙 자동 알림 기본 설정 방법 (웹 훅)를 잘 따라 했다면, URL 하나를 받았을 것이다.
(예 : hooks.slack.com/services/AAAAAAAAA/BBBBBBBBBBB/CCCCCCCCCCCCCCCCCCCC)



1. 받은 URL을 $request_url 변수로 지정

$request_url = "hooks.slack.com/services/AAAAAAAAA/BBBBBBBBBBB/CCCCCCCCCCCCCCCCCCCC"




2. 메시지 데이터 생성 및 설정

$data = array("text" => "Server has been stopped");
$json_data = json_encode($data);



3. CURL-ing

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $request_url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1000);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    "Content-Type:application/json",
));

$response = curl_exec($ch);

curl_close($ch);




여기까지만 하면 슬랙 연동이 되는 것을 확인할 수 있다.





전체 코드 및 함수화 + 클래스화 ( 가져다 쓰세요! )

함수화

public function send_message($msg){
    $request_url = "THE GIVEN URL COMES HERE";
    $data = array("text" => $msg);
    $json_data = json_encode($data);

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $request_url);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1000);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        "Content-Type:application/json",
    ));

    $response = curl_exec($ch);
    curl_close($ch);
}

클래스화

// [Slack.php]
<?php 
namespace Utils;  // optional
class Slack {
    const REQUEST_URL = "THE GIVEN URL COMES HERE";    
    // 컨스트럭트는 필요 없습니다 !

    public function send_message($msg){
        $data = array("text" => $msg);
        $json_data = json_encode($data);

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, self::REQUEST_URL);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1000);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array(
            "Content-Type:application/json",
        ));

        $response = curl_exec($ch);
        curl_close($ch);
    }
}
// [Others.php]
<?php
require_once('Slack.php');

Utils\Slack::send_message("Hello world");
?>

 

클래스화에 나와있는 namespace는 옵션이다. 당연, namespace를 사용하지 않아도 된다.
근데 Slack이라는 이름의 클래스가 웬만하면 하나씩은 있을 거기 때문에 임의로 Utils라는 이름으로 namespace 넣어두었다.
Namespace를 사용하지 않고 함수 콜을 하는 방법은,

[Others.php]
<?php
require_once('Slack.php');

Slack::send_message("Hello world"); // 앞에 Utils 만 빼주면 된다.
?>