LoginSignup
19
3

More than 5 years have passed since last update.

PHPからSlackにメッセージを投稿するクラスを作ってみた

Last updated at Posted at 2018-12-06

はじめに

YYPHP Advent Calendar 2018 7日目担当の@nobuhiro-kobayashiです!!
ここ1年くらいでやたらとSlackを使う機会が増えたのですが、プログラムから利用したことがなかったので、メッセージを投稿するPHPクラスを作ってみます。
いろんな人が実装してますが、練習も兼ねてやってみます。

Slackの設定

ワークスペースにログイン

ワークスペースにログインする。
※作成から行いたい方はこちらからどうぞ。
スクリーンショット 2018-12-03 20.35.21.png

ログインしたらSlack Appディレクトリにアクセスします。
右上にワークスペース名が出ていることを確認してください。
スクリーンショット 2018-12-03 23.26.32.png

Incoming WebHookを追加する

これで外部のサービスからslackにメッセージを送れるようになります。
検索窓に「Incoming WebHook」と入力して検索して、サジェストされたらクリックして下さい。
3.png

投稿先のチャンネルを指定する

4.png

セレクトボックスに先ほど設定したワークスペースに登録済のチャンネルが表示されますので、お好きなものを選んで下さい。
選択後、すぐ下の「Incoming Webhook インテグレーションの追加」をクリックします。
5.png

Webhook URLを取得

下の方にスクロールしていくと「インテグレーションの設定」という見出しがあります。
Slackに投稿する際に必要なWebhook URLが記載されていますので保存しておいてください。

6.png

設定ができたら指定チャンネルにメッセージが表示されます。
7.png

以上でslack側の設定は完了です!!

PHP

今回はユーザー名、アイコン、メッセージの3つを投稿してみます。
いろいろ設定ができるようなのでまた今度追加してみよう。

Incoming WebHooks リファレンス

<?php
// メッセージ送信用
class SlackSender
{
    /**
     * @var string
     */
    private $webHookUrl;
    /**
     * @var []
     */
    private $data;

    public function __construct(string $webHookUrl)
    {
        $this->webHookUrl = $webHookUrl;
    }
    public function userName(string $userName)
    {
        $this->data['username'] = $userName;

        return $this;
    }
    public function text(string $text)
    {
        $this->data['text'] = $text;

        return $this;
    }
    public function iconEmoji(string $emoji)
    {
        $this->data['icon_emoji'] = $emoji;

        return $this;
    }
    public function post()
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $this->webHookUrl);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, 'payload=' . urlencode(json_encode($this->data)));
        curl_exec($ch);
        curl_close($ch);
    }
}

// 呼び出し
$url = "https://hooks.slack.com/services/XXXX/"; // 各自設定してください
$slackClient = new SlackSender($url);
$slackClient->userName('ビードル')
            ->iconEmoji(':bug:')
            ->text('PHPから投稿したよ')
            ->post();

実行結果

8.png

まとめ

今回は人生初のアドベントカレンダーに参加してみました。
簡単な内容でも意外と記事にするとなると大変でした。。
日々記事を執筆されている皆様本当にありがとうございます。

明日8日目の YYPHP Advent Calendar 2018@clown0082さんの投稿です!!

19
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
3