見出し画像

Slack Appの Event Subscriptionsを使ってみよう【Laravel】

Event Subscriptionsとは?

Slackの様々なイベントをトリガーに処理できる機能です。

例えば、「Slack AppのHome画面を開いたとき」や「チャンネルを新規作成したとき」「リアクション(絵文字)をしたとき」など様々なイベントが用意されています。

今回は、「Slack AppのHome画面を開いたときにメッセージを送信する」方法を紹介したいと思います!

使用技術

・Laravel
・AWS EC2 (デプロイできれば何でもOK。Herokuがお手軽だと思います。)

Slack Appの用意

Slack Appのセットアップがまだの場合は下記リンクより「Create New App」してください。

LaravelでPost処理を作成

 

   public function events(Request $request) {
       $response = [];
       $type = $request->input('type');
       // 認証
       if($type == "url_verification") {
           $response['challenge'] = $request->input('challenge');
           return new JsonResponse($response);
       }
       $event = $request->input('event');
       if($type == "event_callback") {
           $eventType = $event['type'];
           if($eventType == 'app_home_opened') {
               $mySlackId = "WMGECKETX"; // わたしのid
               // $slackId = $event['user']; eventを発火させたユーザーid
               $token = env('SLACK_TOKEN');
               $text = <<<EOF
コジコジだよ
コジコジは生まれた時からずーっと
将来もコジコジはコジコジだよ。
EOF;
               $baseUrl = "https://slack.com/api";
               $url = "${baseUrl}/chat.postMessage";
               $params["token"] = $token;
               $params["channel"] = $mySlackId;
               $params["text"] = $text;
               $body = http_build_query($params);
               $headers = [
                   "Content-Type: application/x-www-form-urlencoded,application/json"
               ];
               self::postRequest($url, $body, $headers);
           }
       }
    }

responseのchallenge(文字列)を一度返すことで認証を実現させています。詳細は下記をご確認ください。

つぎにevent typeが「app_home_opened」かチェックすることで、Slack AppのHome画面を開いた時のみ処理を実行させることができます。

tokenは、OAuth & PermissionsよりBot Tokenの文字列を指定してください。

スクリーンショット 2020-06-22 0.08.08

AppのHome画面を開いた時にメッセージを送るようにするので、Scopesには「chat:write」を有効にしてください。

スクリーンショット 2020-06-22 0.09.03

自分のslack idを固定指定して、自分にメッセージを送っています($mySlackId)が、eventを発火させたユーザーへメッセージを送りたい場合は、slackIdに「$event['user']」を指定してください。

実際にPOSTしているLaravelのコードはこちらです。

    private static function postRequest($url, $body, $headers = null) {
       $curl = curl_init($url);
       curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
       curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
       curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
       if(!empty($headers)){
           curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
       }
       if (!empty($body)) {
           curl_setopt($curl, CURLOPT_POSTFIELDS, $body);
       }
       $responseJsonText = curl_exec($curl);
       $body = json_decode($responseJsonText , true);
       $httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
       curl_close($curl);
       $resultObj = [];
       $resultObj['status_code'] = $httpCode;
       $resultObj['body'] = $body;
       return $resultObj;
   }

ここまで処理が書けたらデプロイします。🤖

セットアップ

Event Subscriptionsを有効にして、Request URLにデプロイしたエンドポイントを指定しましょう。

スクリーンショット 2020-06-22 0.12.54

そしてapp_home_openedイベントを有効にします。

スクリーンショット 2020-06-22 1.17.17

Home 画面をひらいてみると・・

イベントがトリガーされ、無事にメッセージが届きました🎉 かわいい。

スクリーンショット 2020-06-22 0.14.59

つづき

おわり



この記事が気に入ったら、サポートをしてみませんか?
気軽にクリエイターの支援と、記事のオススメができます!
note.user.nickname || note.user.urlname

息抜きのコーヒー代にさせて頂きます!!♡

ありがとうございます〜!
8
2年くらいWebエンジニアしてます。勉強したことをつらるページ₍ ᐢ. ̫ .ᐢ ₎ たまにもくもく会やったり→https://prog-9.connpass.com/ 趣味はお笑いラジオと西洋音楽と西洋美術👩‍🎨

こちらでもピックアップされています

アウトプット
アウトプット
  • 644本

ゆめみの【勉強し放題制度】を活用したアウトプット、その他に、メンバーが自分自身で学んだことをまとめています。 ゆめみの独自制度である「勉強し放題制度」は、あらゆる学習費用を100%会社が負担します。書籍、社外セミナー、実験機材、認定資格の受験など、成長のためのコストは会社が全て負担。また、業務時間の10%は自由な活動に使うことができます。

コメントを投稿するには、 ログイン または 会員登録 をする必要があります。