[PHP] Slack 채널로 메세지 전송

Slack은 지금 회사에 이직하면서 접했고 지금은 업무 처리에 많은 부분을 담당하고 있다. 최근의 서비스들이 그렇듯 Slack 역시 다양한 API를 제공하고 있는데 chat.postMessage 를 이용해 특정 채널로 메세지를 전송해보자. 아래 class를 사용하기 위해서는 Slack API에 사용될 Legacy token을 발급받아야 한다. Token은 https://api.slack.com/custom-integrations/legacy-tokens 페이지를 방문해 발급받을 수 있다.

<?php
/*
https://api.slack.com/methods/chat.postMessage

Token 생성 : https://api.slack.com/custom-integrations/legacy-tokens
*/

class SLACK
{
    private $token;
    private $channel;
    private $username;
    private $message;

    public function __construct($token, $username='Slack Bot') {
        $this->token    = $token;
        $this->username = $username;
    }

    public function setChannel($channel) {
        $this->channel = $channel;
    }

    public function setUsetName($username) {
        $this->username = $username;
    }

    public function setMessage($message) {
        $this->message = $message;
    }

    public function send() {
        $postData = array(
            'token'    => $this->token,
            'channel'  => $this->channel,
            'username' => $this->username,
            'text'     => $this->message
        );

        $ch = curl_init("https://slack.com/api/chat.postMessage");
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST,  'POST');
        curl_setopt($ch, CURLOPT_POSTFIELDS,     $postData);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        $result = curl_exec($ch);
        curl_close($ch);

        return $result;
    }
}

위 class를 이용해 메세지를 발송하는 코드는 아래와 같다.

<?php
require_once './slack/slack.class.php';

$token = 'your token';

$slack = new SLACK($token);

$slack->setChannel('#general');
$slack->setMessage('Hi, chicpro '.date('Y-m-d H:i:s'));

$result = $slack->send();

print_r($result);
?>

#general 은 실제 채널로 변경해야 한다.

자료

  1. https://api.slack.com/methods/chat.postMessage
  2. https://api.slack.com/custom-integrations/legacy-tokens

편리

PHP와 MariaDB, jQuery 등을 사용해 게시판, 쇼핑몰 솔루션을 개발합니다. 그누보드5와 영카트5 개발에 참여 했습니다. Linux와 Nginx는 물론 WordPress, Git 등에도 관심이 많습니다. 자전거 타기 및 사진 촬영을 취미로 하고 있습니다.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.