Blog

Slack Bolt, AWS Lambdaで条件分岐するワークフローを作ってみた

この記事は、リレーブログ企画「24卒リレーブログ」の記事です。

はじめに

はじめまして。
新卒1年目の後藤です。

業務の問い合わせ対応にSlackのワークフローを利用していますが、 問い合わせ内容ごとにワークフローを作成しているため、数が多くなっています。
そこで、複数のワークフローを1つにまとめるため、Slack Bolt, AWS Lambdaで条件分岐するワークフローを作ってみました。

Slackのワークフローで条件分岐があったらいいなと思いました。
公式では以下のように記載されています。

ワークフローに条件つきロジックを作成できますか? 現時点では、ワークフロービルダーで条件つきロジックは作成できません。より複雑なロジックを実行するには、カスタムファンクションを使って Slack アプリを作成する必要があります。

引用:https://slack.com/intl/ja-jp/help/articles/26800170438419


つまり、デフォルトの機能では存在していないということになります。

そこで、Slack Boltを利用しようと考えました。

Slack Boltとは、Slack アプリ開発のための公式フレームワークです。
JavaScript (Node.js), Python, Java で利用することができます。
Bolt 入門ガイドに、詳しくたくさん載っています。

以上のSlack Boltを用いることで、条件分岐ワークフローを実現できるSlackアプリを作成することが可能になります。
早速作っていきます!

Slack APIの設定 Part1

まず、最初に取り掛かるのはSlack APIの作成です。

Slack APIとは、独自のアプリケーションをSlackに導入するために作るアプリです。

Slack APIのYour Appsページ右上のCreate New Appをクリックします。

上のFrom a manifestを選択し、アプリをインストールするワークスペースを指定します。

Nextを二回選択し、Createをクリックします。

Basic Informationの下部へ行き、App nameにアプリの名前、Short descriptionにアプリの説明、Background colorで背景色を選択します。
その後、右下のSave Changesをクリックします。

以下の画像のように、左側のOAuth & Permissions内にあるScopesAdd an OAuth Scopeからchat:writecommandsを追加します。

左側のメニューでIncoming Webhooksを選択し、Onにします。

OAuth & Permissions上部のOAuth TokensRequest to Installをクリックし、コメントを記入し、Submit Requestで送信します。

承認を待ちます。

承知後、OAuth & Permissions内にあるInstall to ~を選択し、使用するワークスペースを選択します。

その後、Bot User OAuth Token(xbxo-hogehoge)が必要になるのでメモしてください。


また、左側のメニューで一番上のBasic Informationに遷移し、Signing Secretも必要になるのでShowを押してメモしてください。


メモした2つはAWS Lambdaの設定で必要になります。

一旦ここでSlack APIの設定はストップです。

Slack Bolt

ここからはSlack Boltについて説明していきます。
まずは任意のディレクトリにpipコマンドを利用してSlack Bolt をインストールし、packageフォルダを作成します。
そのフォルダをvscodeなどで開きます。
今回はPythonを使用するのでlambda_function.pyという名前でファイルを作成します。
このファイルにLambdaのコードを書いていきます。

コードは以下をコピペして貼り付けましょう。
コードの@app.command(“/sport_start”)部分にある通り、Slackのスラッシュコマンド(/sport_start)で起動するようになっています。

Lambdaのコードを作成したら、エクスプローラーなどで、作成したものをzipファイルに固めます。

ここまででSlack Boltはおしまいです。

コードの変更はAWS Lambdaでもできるので変更したい場合はあとでも大丈夫です。

AWS Lambda

AWS Lambdaのページに行き、関数を作成します。
以下画像のように設定を行い、右下の関数の作成を押すと関数が作成されます。
※hogehogeは関数名なので各自適した名前にしてください。

作成した関数を選択し、以下画像の右下の黄色の部分の.zipファイルをクリックし、先ほどzip化したものをアップロードし保存をクリックします。
すると、コードが展開されます。

次にコードではなく設定関数URLを開きます。
関数URLを作成をクリックします。
NONEを選択して保存しましょう。
NONEは誰からでもアクセス可能なため、サービス運用には向いていません。
サービス運用する場合は認証された呼び出し元のみがアクセス可能なAWS_IAMを選択しましょう。
※NONEとAWS_IAMについてはLambda 関数 URL へのアクセスの制御で詳しく説明されているのでそちらを参考にしてください。
作成した関数URLをメモしておきましょう。

「環境変数」を選択し、「編集」をクリックします。
環境変数の追加を選択すると増やすことが出来るので2つ追加します。
コードの中にSLACK_SIGNING_SECRETとSLACK_BOT_TOKENがあるので、それらの設定をします。
キーと値は以下のものを記載します。

キー
SLACK_SIGNING_SECRETSlack APIの設定でメモしたBasic InformationSigning Secret
SLACK_BOT_TOKENSlack APIの設定でメモしたOAuth & PermissionsBot User OAuth Token


これでAWS Lambdaの設定は終わりです!

Slack APIの設定 Part2

左側のメニューでInteractivity & Shortcutsを選択し、OffOnにします。
Request URLに先ほどメモした関数URLを記入します。
その後、右下のSave Changesをクリックします。

左側のメニューでSlash Commandsを選択してCreate New Commandをクリックします。
以下の画像ように入力します。
Command(/sport_start)です。
Request URLは先ほどAWS Lambdaでメモした関数URLです。
Short Descriptionには説明を書いておきましょう。
右下のsaveで保存します。

Slack

最後にSlackを開いてこのアプリを追加したチャンネルに行きます。
追加したチャンネルのインテグレーションに追加したAppがあるか確認してください。

無い場合は、Slack画面左側の…(その他)の自動化を選択し、Appで作成したアプリ名を検索します。
作成したアプリを選択し、画面上部のアプリ名をクリックするとチャンネルにこのアプリを追加するがあるのでこちらでチャンネルにアプリを追加してください。


作成したSlackのスラッシュコマンド(/sport_start)をSlackのチャットに入力すると以下のようになります。

送信を押すとメッセージが送信されました!

応用編

以下のコードのように選択肢をどんどん追加することができます。
主な追加箇所は以下です。
SPORTSにポジションをそれぞれ追加
if selected_playerを追加
@app.action(“player_select”)を追加

また、スラッシュコマンドも(/sport_start)ではなく、目的に応じたものに変更すると使いやすくなると思います。
質問と選択肢も自分が必要としているものに変更しましょう!

おわりに

今回、Slackに条件分岐ワークフローを実装しました。
調べてみても出てこなかったので一から作ってみました。

Slack BoltとAWS Lambdaはほとんど触ったことがなかったので、大変でした。
今回、触ったことにより少しは詳しくなれたと思います。

メッセージを送信するだけではなく、スプレッドシートに記載する機能やフォームを変更するなどの他の機能を追加できると便利になるので引き続き勉強していこうと思います。

ありがとうございました。

次回は、佐藤さんです。
どんな記事になるのかワクワクですね♪

ニフティでは、
さまざまなプロダクトへ挑戦する
エンジニアを絶賛募集中です!
ご興味のある方は以下の採用サイトより
お気軽にご連絡ください!

ニフティに興味をお持ちの方は
キャリア登録をぜひお願いいたします!

connpassでニフティグループに
参加いただくと
イベントの
お知らせが届きます!