【サーバー・PHPを使って】SlackのBotを作る(2020年対応)

前回のブログで完成させることができなかったので,ちゃんと丁寧に調べた結果をここに記します.自分のメモ用というところでもありますかね.

今回はサーバーを使ってSlackで動くbotを作っていきます.そのためさくらサーバーとかXサーバーとか,phpを動かせる環境があるのが前提です.

1.SlackでBotを作る


まず,Slack APIのサイトにアクセスし,「Create an App」というボタンをクリックします.

App Name -> 好きなアプリ名

Development Slack Workspace → アプリをいれるワークスペースを選択

で「Create App」

そうすると下のような画面になるはず.

そしたらこの赤い「Permissions」をクリック.

Scopeの設定

Bot Token Scopesの「Add an OAuth Scope」をクリック.

選択するスコープは「chat:write」

slack公式サイトの説明

日本語翻訳されていますが,メッセージを投稿するにはこの権限が必要です.

その他のスコープはスラック公式サイトで確認してください.

App Home

続いて左のらんの「App Home」をクリック.

App Home

Editを押して,ボットの表示名(Display name)とボットユーザー名(Default name)を設定して,「Add」をクリック.

続いて,その下にある「Always Show My Bot as Online」をOnにする.

2.サーバーとの連携


さて,ここからはサーバーを使用していきます.

一旦slackAPIサイトは置いておいて,,,

PHPファイルを作成します!

phpファイルの作成

作るものはこちら.(コピペでオッケー!)

<?php $data = json_decode(file_get_contents("php://input"),true); if($data["type"] == "url_verification"){ header('Content-Type: text/plain'); echo $data["challenge"]; exit; } ?>
Code language: HTML, XML (xml)

これを適当な名前で保存して,自分のレンタルサーバーにアップロードしてください.そのURL(http(s)://~)を控えておいてください.

Event Subscriptions

さて,先ほどまで使っていたSlack APIのページに戻ります.

左の「Event Subscriptions」をクリック.

Enable EventsをOnに.さすれば下のようなURLを入れる欄が出てくると思います.

こんな感じで出てくる

さて,このURLにはさっきのやつ!を入れます.

続いてその下にある「Subscribe to bot event」から「Add Bot User Event」をクリックして,

  • 「app_mention」
  • 「message.im

を追加する.

OAuth & Permissions

ここまできたらあと少し.

左の「OAuth & Permissions」をクリック.

ページに現れる「Install App to Workspace」をクリック.

これでワークスペースにインストールできました.

PHPファイルの編集

先ほど作ったPHPファイルにコードを追加していきます.コードを追加するために2つの文字列をメモします.

Basic Information

左の「Basic Information」をクリックして,少しスクロールすると,下のようなものが現れます.

①Signing Secret

これが1つ目です.signing Secretの値(写真の下のやつ)をコピーします.

OAuth & Permissions

左の「OAuth & Permissions」をクリックして,少しスクロールすると,下のようなものが現れます.

②Bot User OAuth Access Token

「Bot User OAuth Access Token」の値が2つ目です.これをコピーします.


これらの値を使って,少し前にアップロードしたphpファイルを編集します.

今回作るボットはこんな感じ.

そういえば昨日スタバに行った

phpのコードはこんな感じ.

<?php //参考:https://www.seeds-std.co.jp/blog/creators/2019-09-24-100127/ //参考:https://tech.pepabo.com/2019/10/10/make-slack-app-by-rental-server/ //秘密情報 define("SLACK_SIGNING_SECRET" ,"[①をコピペ]"); define("SLACK_BOT_ACCESS_TOKEN","[②をコピペ]"); //イベント発生時にHTTPPOSTリクエストを受信する $data = json_decode(file_get_contents("php://input"),true); //URLの確認であればexit if($data["type"] == "url_verification"){ header('Content-Type: text/plain'); echo $data["challenge"]; exit; } //event_callbackの場合に自動応答する if($data["type"] == "event_callback"){ if(isset($data["event"]["subtype"]) && $data["event"]["subtype"] == "bot_message"){ exit; // 自分自身(bot)のメッセージは処理しない } // 自動応答メッセージの送信 $message=$data["event"]["text"]; // 送信メッセージは関数にしている. send_slack_message($message,$data["event"]["channel"],$data["event"]["user"]); } function send_slack_message($message,$channel,$user) { //返答する文章の作成(attachmentsの中身) $attachments[] = [ 'fallback' => 'daily', "callback_id" => "daily", "color" => "#F0E68C", "attachment_type" => "default", "text" => $message,//メッセージをそのまま返す ]; $curl = curl_init(); curl_setopt_array($curl, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_URL => 'https://slack.com/api/chat.postMessage', CURLOPT_HTTPHEADER => [ 'Content-Type: application/json; charset=utf-8', 'Authorization: Bearer ' . '[②をコピペ]' ], CURLOPT_POSTFIELDS => json_encode([ 'channel' => $channel,//文字でチャンネルを指定することもできる. 'text' => "<@".$user.">\nおはよう!",//ユーザーをメンションする.アタッチメントに含まれないテキスト "username" => "bot",//ユーザー名 'attachments' => $attachments ]) ]); $response = curl_exec($curl); $response = json_decode($response, true) ?? null; if ( !$response ) { return false; } return $response; } ?>
Code language: HTML, XML (xml)

お疲れ様でした.

3.参考記事

レンタルサーバーを使って自動応答するSlack bot(Slack app)を作ってみた - Pepabo Tech Portal
はじめまして、そうせいじと申します。普段は内部監査室のセキュリティ監査チームに所属しており、コードを書く最前線は15年前に引退してるの身ですが、2019年度も9月に実施されたお産合宿に参加してちょっとだけコードを書いてきました。 そ...

コメント

タイトルとURLをコピーしました