aikawa

Slackのリアクションを通知

SlackのAPIを使って、リアクションが有ったら通知してみます。
今回は、通知をテキストで保存するだけ。






まずはAPIのURLへアクセス。
https://api.slack.com/apps




Create New Appを選択して、
App Nameに適当にReactionとか入れて、
Development Slack Workspace は、対象のワークスペースを選択し、Create Appを押します。






作成されたAppのページが表示されるので、Add features and functionality を表示させ、Event Subscriptionsを選びます。






Enable EventsをOnにして、Request URLを記載します。
Request URLはSlack側からアクセス可能である必要があるので、適当にサーバを用意します。
このURLにchallenge値を返すプログラムを設置して、成功するとVerifiedになります。






PHPだとこんな感じです。



<?php
$str = file_get_contents('php://input');
$json = json_decode($str, true);
if(isset($json["challenge"])){
echo <<<DATA
HTTP 200 OK
Content-type: text/plain
{$json[challenge]}
DATA;
}


次にSubscribe to bot eventsの下にあるSubscribe to events on behalf of usersをクリックして、
Add Workspace Eventをクリック、
reaction_addedを追加します。



bot eventの方だとリアクションしても通知が来ません。





右下のSave Changesをクリックして保存します。

左側のアプリ一覧から操作中のAppを選ぶ等でAppの画面へ戻って、
Install your app to your workspaceをクリックで表示させ、
Install App to Workspaceをクリックします。






Appがアクセスする権限をリクエストしていますと出るので、許可するをクリック。






戻るとInstall your app to your workspaceにチェックマークがついています。






これでリアクションをしたらRequest URLで記載したところに通知が行くようになるので、とりあえず先ほどのPHPでlogs/以下にテキストで保存するように追加してみます。

<?php
$str = file_get_contents('php://input');
$json = json_decode($str, true);
// save
if($json){
        $dir = __DIR__."/logs";
        if(!is_dir($dir)){mkdir($dir);}
        $path = $dir."/".date("Ymd-His").".log";
        $save = json_encode($json, JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT);
        file_put_contents($path, $save);
}
// check
if(isset($json["challenge"])){
        // output
        echo <<<DATA
HTTP 200 OK
Content-type: text/plain
{$json[challenge]}
DATA;
}

Workspaceでリアクションをしてみて、ファイルが出来ていれば成功です。