search
LoginSignup
66

More than 3 years have passed since last update.

posted at

updated at

Outgoing WebHooksの代わりをSlack APPで実装する

OutgoingWebHooks と GoogleCloudFunction でSlackチャンネル内の発言に応じた情報の抽出をおこなっていたが
公式は以下のように発表した
スクリーンショット 2019-04-03 17.20.47.png

これは、従来のカスタム統合に関する情報(チームがSlackと統合するための古い方法)に関する情報を探しているためです。これらの統合はより新しい機能を欠いており、将来廃止される可能性があり、おそらく削除されるでしょう。私達はそれらの使用をお勧めしません。

めっちゃ便利だったのに。。。
親愛なる友を亡くした悲しみは大きいが落ち込んでいる場合じゃない

代替えのアプリを作らなければ!!

スクリーンショット 2019-04-03 17.27.21.png

代わりに、私たちはあなたがそれらの置き換えについて読むことを勧めます - Slackアプリ。スラックのアプリケーションを構築することができるだけで、独自のワークスペースのかのApp Directoryを介して配布され、彼らは最新かつ最高のAPIとUI機能を使用することができます。

公式も自分で作れと言っているようだ
まあ確かに自由度が増したほうが拡張性があるから開発者としては嬉しいかも

とりあえず実装してみる

Slack APPの作成

https://api.slack.com/appsにアクセスして、App NameとWorkspaceを入力して Create App で新しいアプリを作成
スクリーンショット 2019-04-03 17.37.44.png

Bot Usersの作成

作成後、基本情報ページに遷移するので、必要な機能を追加していく
今回はOutgoing WebHooksの代わりなので、Botの設定はいらないが、自動返信なども設定したいのでBotの基本設定も行う
スクリーンショット 2019-04-03 17.44.21.png
まずはワークスペースを監視するBotの追加をおこなう
スクリーンショット 2019-04-03 17.47.41.png
スクリーンショット 2019-04-03 17.48.37.png
必要な情報を記入してBot Userを作成
スクリーンショット 2019-04-03 17.49.35.png

Event Subscriptionsの有効化

ワークスペース内で起きたイベントに応じて指定したURLにアクセスするように設定する
Request URLに希望のURLを記入
スクリーンショット 2019-04-03 17.57.51.png
ここで普通にGCFやGASのURLを書き込んでも怒られる
Event Subscriptions の受け取り先になるには、そのサーバーを所有していることを証明する必要があるため、既存のファイルに以下の処理をコピペ。

何をやっているかというと、URLを記入欄に入力してきた瞬間にchallengeっていう値が投げられてくるからchallengeっていう値を投げ返すだけ

index.js
if (payload.type === 'url_verification') {
  return res.status(200).json({ 'challenge': payload.challenge });
}
res.status(200).send('OK');

処理を実行するイベントを選択
スクリーンショット 2019-04-03 18.06.26.png
ご丁寧に説明までつけてくれている
今回はチャンネルにメッセージが投稿されたのをトリガーに処理を実行するので message.channels を選択

スクリーンショット 2019-04-03 18.07.36.png

Bot Eventsも同様に message.channels を選択

スクリーンショット 2019-04-03 18.10.11.png
SaveChangeで設定を保存

ワークスペースへのインストール

設定の OAuth & PermissionsScopes で、bot を追加します。
スクリーンショット 2019-04-03 18.27.16.png

あとは スクリーンショット 2019-04-03 18.30.37.png を押してSlackワークスペースへのインストールが完了

情報の取得

message.channels event を用いて情報を取得すると以下のように飛んでくるので好きに料理する
スクリーンショット 2019-04-03 18.40.57.png

index.js
if (payload.event && payload.event.type === 'message'){
  console.log(payload.event); // payload.eventの中に上記画像の情報が含まれる
}

文献が英語ばっかりなので拒否反応が出るのはわかるけど
使ってみたらかなり自由度が高くて使いやすいからオススメ

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
66