user icon

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でリアクションをしてみて、ファイルが出来ていれば成功です。 Facebooktwitterlinkedintumblrmail

タグ:

名前
E-mail
URL
コメント

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)