今の運用ではChatworkにAPIでメッセージを送信していたのだけれど、Chatworkの無料制限の変更によってslackに変わることになりました。

同じような運用をさせるためには、slackへのAPIメッセージ送信が必要になったので、その構築方法を記録しておきます。

スポンサーリンク

Slackの事前準備

Chatworkにメッセージ送信をするときには、Tokenだけわかればよかったのですが、slackへメッセージを送信するためには、あらかじめSlack APIに事前設定をしなければいけません。

Slack APIとは

Slack APIとは、slackと関連したアプリケーションを開発するときに必要となるAPIの集合です。
APIを使えば、Slackとメッセージのやりとりや、イベントの受信、リアルタイムメッセージなどの開発に役に立つでしょう。

今回は、Slackにメッセージを送信するだけなので、HTTP通信のPOSTを使って開発していきます。

Slack API Icoming Webhook API の作成

Slack APIにアクセスします。

Create an Appボタンをクリックします。

Slack API

From scrach をクリックします。

Slack API 02

App Name は作成するアプリ名を入力(あとで変更可能です)。 Pick a workspace to develop your app in: からメッセージを送信するワークスペースを選択します。 入力が完了したら、Create App をクリックします。

Slack API 03

Incoming Webhooks をクリックします。

Slack API 04

Activate Incoming Webhooks をON に設定します。

Slack API 05

Add New Webhook to Workspace をクリックします。

Slack API 06

アクセスしたいチャンネルを選択し、許可する をクリックします。

Slack API 07

メッセージ送信用のURLが作成されるので、これを使ったメッセージを送ります。
※別のチャネルが必要になったときには、同様にしてURLを作成しましょう。

Slack API 08

メッセージの送信

windowsのcurlでテストをしてみましょう。

POSTでWebHookのURLにテキストを送信してみます。

curl -X POST -H "Content-type: application/json" --data "{\"text\":\"Hello World!\"}" <WebHookURL>

ちゃんとSlackにメッセージが表示されました。

Slack メッセージ表示

Laravelでの適用

テストができたらLaravelのCurlで実行します。

Controllerで以下のコードを実行すると、Slackにメッセージが表示されました。

    /**
     * CONST
     * SLACK_REQUEST_URL:SlackのURL
     */
    private const SLACK_REQUEST_URL = '<WebHookURL>';
    
    /**
     * slackNotification
     * @param Request $request
     */
    public function slackNotification(Request $request)
    {
        // 送信パラメータ
        $params = array(
            'text' => ">>>*新規申込*\nテスト"
        );
        $data_json = json_encode($params);

        // オプション設定
        $options = array(
            CURLOPT_URL => self::SLACK_REQUEST_URL,   // URL
            CURLOPT_HTTPHEADER => array('Content-type: application/json'), // JSON
            CURLOPT_RETURNTRANSFER => true,     // 文字列で返す
            CURLOPT_POST => true,   // POST設定
            CURLOPT_POSTFIELDS => $data_json,
        );

        $ch = curl_init();
        curl_setopt_array($ch, $options);
        $response = curl_exec($ch);
        curl_close($ch);

        return view('users/index');
    }