January 11, 2018 thumb Membuat Web Hook untuk Slack Part 3

tulisan ini adalah sambungan dari tulisan ( Membuat Web Hook untuk Slack Part 2 ), dalam tulisan kali ini saya akan buat sebuah class yang mana class tersebut akan dipakai untuk membangun sebuah slack message agar lebih mudah untuk dibuat sesuai dengan structure format message dari slack. berikut ini adalah class yang sudah saya buat sedemikian rupa sehingga bisa langsung dipakai cukup meng-include-kan saja dibagian header. saya buat sebuah file php bernama Slack.php, dan berisikan.

<?php 
/**
 * this class handling for make slack command
 * so the system can do and report any problem
 * through slack
 * 
 * @author      : Nurul Huda
 * @since       : 11 Jan 2017
 * @copyright   : goblooge@gmail.com
 * @license     : LGPLv3
 * @version     : 1.0.0
 * */
 
class Slack {
    private $slack_message;
    private $current_message;
    
    public function __construct(){
        $this->slack_message                = array();
        $this->slack_message['attachments'] = array();
        $this->current_message              = 0;
    }
    
    public function setSlackMessage($message){
        $this->slack_message=$message;
        return $this;
    }
    
    public function getSlackMessage(){
        return $this->slack_message;
    }
    
    public function createNewAttachMent($number=-1){
        if($number==-1){
            $this->current_message=count($this->slack_message['attachments']);
        }else{
            $this->current_message=number;
        }
        $this->slack_message['attachments'][$this->current_message]=array();
        return $this;
    }
    
    public function setCurrentMessage($number){
        $this->current_message=$number;
        return $this;
    }
    
    public function setFallBack($string){
        $this->slack_message['attachments'][$this->current_message]["fallback"]=$string;
        return $this;
    }
    
    public function setColor($string){
        $this->slack_message['attachments'][$this->current_message]["color"]=$string;
        return $this;
    }
    
    public function setPreText($string){
        $this->slack_message['attachments'][$this->current_message]["pretext"]=$string;
        return $this;
    }
    
    public function setAuthorName($string){
        $this->slack_message['attachments'][$this->current_message]["author_name"]=$string;
        return $this;
    }
    
    public function setAuthorLink($string){
        $this->slack_message['attachments'][$this->current_message]["author_link"]=$string;
        return $this;
    }
    
    public function setAuthorIcon($string){
        $this->slack_message['attachments'][$this->current_message]["author_icon"]=$string;
        return $this;
    }
    
    public function setTitle($string){
        $this->slack_message['attachments'][$this->current_message]["title"]=$string;
        return $this;
    }
    
    public function setTitleLink($string){
        $this->slack_message['attachments'][$this->current_message]["title_link"]=$string;
        return $this;
    }
    
    public function setText($string){
        $this->slack_message['attachments'][$this->current_message]["text"]=$string;
        return $this;
    }
    
    public function setImageUrl($string){
        $this->slack_message['attachments'][$this->current_message]["image_url"]=$string;
        return $this;
    }
    
    public function setThumbUrl($string){
        $this->slack_message['attachments'][$this->current_message]["thumb_url"]=$string;
        return $this;
    }
    
    public function setFooter($string){
        $this->slack_message['attachments'][$this->current_message]["footer"]=$string;
        return $this;
    }
    
    public function setFooterIcon($string){
        $this->slack_message['attachments'][$this->current_message]["footer_icon"]=$string;
        return $this;
    }
    
    public function setTimeSecond($ts=null){
        if($ts==null){
            $ts=time();
        }
        $this->slack_message['attachments'][$this->current_message]["ts"]=$ts;
    }
    
    public function addField($title,$value,$short=false){
        if(!isset($this->slack_message['attachments'][$this->current_message]["fields"])){
            $this->slack_message['attachments'][$this->current_message]["fields"]=array();
        }
        $onefield=array();
        $onefield['title']=$title;
        $onefield['value']=$value;
        $onefield['short']=$short;
        $this->slack_message['attachments'][$this->current_message]["fields"][]=$onefield;
        return $this;
    }
    
    public function getMessage(){
        return $this->slack_message;
    }
    
    
    public function send($url=null){
        if($url==null){
            $url                   = "URL HERE";
        }
        if($url==""){
            return false;
        }        
        $options                   = array();
        $options['http']           = array();
        $options['http']['header'] = "Content-type: application/x-www-form-urlencoded\r\n";
        $options['http']['method'] = "POST";
        $options['http']['content']= json_encode($this->slack_message);        
        $context                   = stream_context_create($options);
        $result                    = file_get_contents($url, false, $context);
        if ($result === false) { 
            return false;
        }else{
            return true;
        }
    }
}

?> 

untuk lebih mudahnya bisa download langsung file yang sudah jadi bisa dilihat nanti dibagian akhir dari tulisan ini, di supaya tidak perlu repot – repot menuliskanya. berikutnya adalah kita akan buat sebuah file lagi yang bernama slack_test.php, tentu file ini nantinya akan berguna untuk melakukan testing, sengaja saya pisahkan agar nantinya file Slack.php dapat di copy paste-kan di project real yang diinginkan. yang akan kita lakukan adalah menguji file tersebut supaya menghasilkan message seperti dalam tulisan ( Membuat Web Hook untuk Slack Part 2 ). berikut ini adalah cara pemakaianya. buat sebuah file bernama slack_test.php dan ketikan source code berikut ini.

<?php 

/**
 * php file to test class Slack
 * @author      : Nurul Huda
 * @since       : 11 Jan 2017
 * @copyright   : goblooge@gmail.com
 * @license     : LGPLv3
 * @version     : 1.0.0
 * */ 

require_once "Slack.php";
$slack=new Slack();
$slack->setFallBack("ini adalah text kecil untuk attachment");
$slack->setColor("#36a64f");
$slack->setPreText("optional text agar muncul dibagian atas");
$slack->setAuthorName("Goblooge");
$slack->setAuthorLink("http://goblooge.com/");
$slack->setAuthorIcon("http://2.gravatar.com/avatar/e97fc2a3ba05c8638b471995fcce6767?s=40&amp;r=g");
$slack->setTitle("Data Attachment");
$slack->setTitleLink("https://goblooge.com/");
$slack->setText("ini adalah text yang akan muncul sebagai data utama");
$slack->addField("Data 1","Tinggi",true);
$slack->addField("Data 2","Tinggi",true);
$slack->addField("Data 3","Rendah",false);
$slack->setImageUrl("http://2.gravatar.com/avatar/e97fc2a3ba05c8638b471995fcce6767?s=40&amp;r=g");
$slack->setThumbUrl("http://2.gravatar.com/avatar/e97fc2a3ba05c8638b471995fcce6767?s=40&amp;r=g");
$slack->setFooter("Kiriman Data Goblooge");
$slack->setFooterIcon("http://2.gravatar.com/avatar/e97fc2a3ba05c8638b471995fcce6767?s=40&amp;r=g");
$slack->setTimeSecond();

$message=$slack->getSlackMessage();


echo json_encode($message,JSON_PRETTY_PRINT);


?> 

hasil running dari source code slack_test.php adalah sebagai seperti screenshot dibawah ini, kita membandingkan dengan contoh file message yang ada di tulisan  Membuat Web Hook untuk Slack Part 2 , silakan di cek apakah sama ataukah tidak. tidak perlu khawatir dengan munculnya \ atau /, karena ini wajar untuk formatting html.

Contoh Message Slack yang di generate dengan mengguankan class Slack pada file Slack.php

Contoh Message Slack yang di generate dengan mengguankan class Slack pada file Slack.php

oke demikian yang bisa saya share, untuk source code lengkapnya bisa di download di google drive atau dropbox. pada tulisan berikutnya saya akan bahas bagaimana caranya mengirimkan langsung ke server slack, bukan di echo seperti itu. tunggu tulisan berikutnya. Salam Goblooge.

Comments

total comments