また1からこつこつと

最高はひとつじゃないと信じてまたがんばります。

SlackのSlash commandを使って CoderDojo Kashiwa の参加者名簿を表示する

CoderDojo Kashiwa ではPHP+MySQLで作ってる参加フォームを使って参加者登録をしている。
参加者が新しく登録するとSlackに通知を飛ばすWebHookは前から使っていたけど、せっかくデータベースにいろいろな情報が溜まっているので過去の参加者履歴とかをサクッと見られるコマンドを作ってみた。

Slack にコマンドを登録する

もともと使っていたappにslasu commandを追加した。
f:id:mjk0513:20180402110918p:plain

それぞれのコマンドを実行したときに叩くURLを登録しておく。

SlackからAPI叩くときは基本的にPOSTで送られる。(GETでもできる)
レスポンスはJSON形式で送る。

f:id:mjk0513:20180402111709p:plainf:id:mjk0513:20180402111715p:plain

コマンドを実行してAPIを叩く

コマンドを実行するとPOSTリクエストが送られる。
リクエストのパラメータに `text` があって、ここにコマンド以下に入力されたテキストが入ってくる。
今回扱いたいのは数字なので、数字以外が入っていたらエラーを返している。

$times = $_POST['text'];

//人数を取得する
$data = $memberManager->getMemberList($times);

if(ctype_digit($times)){
    $members = "";
    for ($i=0; $i < count($data); $i++) {
        $num = $i + 1; 
        $members = $members.$num.". ".$data[$i]["childName"]."\n";
    }
    $returnObject = array(
        "text" => "【第{$times}回の参加者リストを表示します】\n{$members}"
    );
    
}else{
    $returnObject = array(
        "text" => "エラー!数字を入力してください。"
    );
}


header('Content-Type: application/json');
echo json_encode($returnObject);

ソースコードはそのままだけどこんな感じ。
JSONデータに変換して表示してあげればOK。

Slackに結果が表示される

JSONデータのパラメータ `text` に表示したい文字列を追加してあげればOKっぽい。
今回は縦に一列表示させたかったのでfor文でループさせて1つの文字列に変換している。

こちらの画像は `/remaining [times]` を実行した結果。
f:id:mjk0513:20180402112026p:plain


これでまた1つ楽になった...!