Slack Workflow Builderで依頼を効率的にしよう

# なにこれ
社内slackで発生する、所謂 **依頼** のような運用フローをある程度自動化し、依頼を投げる側も受ける側も楽にしようというものです。
**※プログラミングそのものの記事ではないです。**

例えば、以下のような仕組みになっていることを仮定します。

* 商談が成立した時にマスターデータを更新する必要がある
* マスターデータの更新は内部管理画面のようなもので管理している
* 内部管理画面にアクセス出来るのはエンジニアチーム、あるいは運用チームのみ
* マスターデータ更新は営業、あるいはディレクターからの依頼が起点

図にするとこんな感じ（[いらすとや](https://www.irasutoya.com/p/nature.html)さん。いつもお世話になってます）

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/50484aaf-c4f9-ffdc-d8af-ee64c24c62c4.png" width=500px>


このような場合、更新依頼のフォーマットが人によってバラバラになりがちで困ります。

* 前置きが長くてどこが要点か不明
* 文章！しかも本文が長すぎて何が設定項目かわかりにくい！
* そもそも必須項目がない。どこを更新しろと・・・。

そういった事態を避けるため、設定項目を過不足ないように制限し自動でメンションが届くように出来たら便利ですよね。

それ、Slackで出来ますよ。

# Workflowを設定する
今回は次のような依頼フローを自動化します。

**樹脂粘土を使ったお手製マグネットの作成を依頼する**
・・・え、営業とかの話は？って感じですが、ビジネス的なものを題材にしてると飽きちゃうので適当な題材にしました。

以下のようなフローを仮定します。

1. 新しいお手製マグネットが欲しい人が依頼を投げる
2. 趣味で粘土細工をやっている人で対応できる人が対応する
3. 依頼内容は穴埋め的に指定できれば十分
4. 対応開始のタイミングと完了のタイミングを共有する

## Workflow BuilderでActionを設定
Slackメニューで `Workflow Builder` を選択します。
<img width="996" alt="スクリーンショット 2019-12-05 13.37.49.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/ee840369-64e1-fc41-63b6-79946640db18.png">

新しいウィンドウが開いてworkflowの追加画面が出てくるので`Create`ボタンをクリック
<img width="1136" alt="スクリーンショット 2019-12-05 13.39.38.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/0c0dce90-d0e9-5a0f-4269-400abe7d04b9.png">

適当に名前を付けます。今回は`新規マグネット作成依頼`とします
<img width="894" alt="スクリーンショット 2019-12-05 13.46.52.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/de78476d-7cd6-50c6-be6d-05fbee4a37d7.png">

ワークフローの起点を設定できます。
今回は`Action menu`に設定します。
こうするとslack画面右上に稲妻マークが追加され、任意のタイミングで実行できるようになります。
<img width="596" alt="スクリーンショット 2019-12-05 13.59.03.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/0a5a26e0-870e-2a0f-42b9-eb3b7d215db1.png">

`Which channel`は必須項目です。
ここで指定したチャンネルのみアクションが実行できます。
アクションを実行するにあたり、どんな機能があるのかをパッと見でわかるようにしたいので、アクションの詳細を追加します。
プレビューが大変便利。
<img width="1136" alt="スクリーンショット 2019-12-05 14.22.02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/fba703da-0a4a-a999-b68b-76815cd0ae2b.png">

しれっと変わっていますがアイコンが標準だと可愛くないので適当に変えます。
`Settings`メニューから変更できます。
<img width="1136" alt="スクリーンショット 2019-12-05 14.20.38.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/328393ae-5a42-8e86-ada8-0567d2d4e329.png">

一旦ここまででこんな状態になっていると思います。
アクションは見れるけれど、実行する処理は何もないという状態ですね。
<img width="1136" alt="スクリーンショット 2019-12-05 14.21.15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/527a33db-b869-bbcc-e187-4f5e3e7e12a4.png">

## Stepを追加する
アクションができたら実際のステップを作っていきます。
今回は「マグネットが欲しい人」がポチポチ項目を埋めるだけで依頼が出せるようにしたいので、フォームの作成をしていきます。

`Create a form`を押すと
<img width="676" alt="スクリーンショット 2019-12-05 14.07.47.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/7cc446b2-652d-d8e5-5668-0295d87add7e.png">

なんか出てきます。
<img width="1065" alt="スクリーンショット 2019-12-05 14.32.37.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/2ff6db39-4dcc-7170-84c5-fa13db52ed03.png">
ここのQuestionsを追加することで設定項目を増やしていくことができます。

### formの設定項目
設定できるquestionの項目には種類があり、`Choose a question type`で細かく制御できます。
例えば`依頼者が誰か`という場合は`Select a person`で指定すれば@メンションつきで処理してくれます。
また、この項目が必須かどうかも指定できます。
<img width="1082" alt="スクリーンショット 2019-12-05 14.34.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/65fb992c-2d26-41dd-a30f-ee5bba66742b.png">

依頼の概要や簡単な説明は`Short answer`で指定できます。
<img width="1098" alt="スクリーンショット 2019-12-05 14.36.41.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/382895a2-392c-0224-5272-86fb23e6071e.png">

下にある `Long answer` との違いは入力可能な文字数なので、詳細情報や備考などを利用したい時に入れてあげればいいかと思います。
<img width="1062" alt="スクリーンショット 2019-12-05 14.37.23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/66e6b68e-ee0a-21eb-c97b-c6173412beef.png">

select boxで選択的に項目を指定したい場合は`Select from a list`を指定します。
<img width="1100" alt="スクリーンショット 2019-12-05 14.38.28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/43138933-5546-4377-81e7-fb4c5e2cd62f.png">

`List items`を追加することで項目をどんどん増やしていけます。
今回は金額を入れていますが、管理項目として固定の値があればそれを指定してあげれば良いのかなと思います。
<img width="1067" alt="スクリーンショット 2019-12-05 14.39.24.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/25b3ca42-8fce-1d50-5bd0-6f8aa0dcd93c.png">

最終的にこんな感じになりました。
今回は邪魔なので外していますが、チェックボックスを入れると、action実行時にDMが飛んでくるように設定可能です。
<img width="1063" alt="スクリーンショット 2019-12-05 14.41.43.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/47185ce1-4513-2ebe-fe21-af28c08a980b.png">

設定項目ごとにアイコンが変わるので、どんな設定になっているのかがパッと見てわかるのがとても良いですね。

### messageの設定
フォームができたら、フォームの記入を起点にメッセージが飛ぶようにします。
`Add Step`を押して`Send a message`を設定します。
<img width="1079" alt="スクリーンショット 2019-12-05 14.42.49.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/3f0a41bf-8945-b6e9-38f3-69b9aba00e21.png">

フォームを実行したらどこに飛ぶかを指定します。
画面では隠れていますが、`Specific people and channels`以下にchannelが並んでいるので、そこで送りたいチャンネルを指定します。
<img width="1136" alt="スクリーンショット 2019-12-05 14.43.13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/94cfecf3-19d6-207d-d6b5-4e0fa86fd528.png">

送り先を指定したらメッセージの内容を入れていきます。
`Message text`の右下に`Insert variable`というのがあるのでそこをクリックしてあげると、先のformで指定した変数の内容を取得することができます。
また、いつ対応開始したかがわかるようにしたいので、`これから対応します`というボタンも用意しておきます。
実際に送られる内容なんかはpreviewを見ながら確認していきます。
<img width="2032" alt="スクリーンショット 2019-12-05 14.50.28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/8f16268a-b5be-2104-91c3-126dda86176e.png">

対応作業をしていることを他のメンバーに伝えたいので、同じ要領で`対応中です`というメッセージをことなるチャンネルに投げるようにしました。
<img width="2032" alt="スクリーンショット 2019-12-05 14.52.11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/52c8e83e-7d73-8c56-7422-30d49a88c8fa.png">

いったんこれでStepは完成です。
**※実在のチャンネル名を出したくないので個人向けのメンションにしていますが、それぞれでメッセージを送るチャンネルの指定が可能です**
<img width="1724" alt="スクリーンショット 2019-12-05 14.51.54.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/0f2805c7-bb60-c1c3-6985-eebc7564a6ec.png">

ここまで行くと次のような処理が走ることになります
1. 稲妻マークを押して`マグネット作成依頼`を実行
2. 依頼者がフォームをポチポチ → フォームの内容が担当者のいるチャンネルに飛ぶ
3. `これから対応します` → 対応中のメッセージが担当者チームのチャンネルに飛ぶ

Publishして実行できるようにします。
<img width="763" alt="スクリーンショット 2019-12-05 14.52.44.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/54ba12a7-626d-dac6-5569-d0cfafdb82c0.png">

Publishした段階でこんなメッセージが該当のチャンネルに飛んできます。
<img width="670" alt="スクリーンショット 2019-12-05 14.53.07.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/1aeb2a0f-c299-065e-99cf-fbf0d341ddbb.png">

では、実際動かしてみましょう！

# Workflowを動かす
稲妻マークを押してアクションを選択
<img width="414" alt="スクリーンショット 2019-12-05 14.53.23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/6d449bc2-19d0-2843-0dde-a586593adb9c.png">

作成したフォームが出てくる
<img width="536" alt="スクリーンショット 2019-12-05 14.53.46.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/27a3e694-8bc3-5593-deaa-5f3fbb4c586e.png">

良い感じに埋める
<img width="556" alt="スクリーンショット 2019-12-05 14.55.06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/628b245c-fbc1-c02f-b0ac-fe2670ca66ed.png">

`Submit`を実行するとメンションが飛ぶ。
<img width="761" alt="スクリーンショット 2019-12-05 14.55.25.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/d814c6d9-ee5f-daa2-e4f2-b51921e11248.png">

`これから対応します`を押すと、作業チームのチャンネルにメッセージが飛ぶ
<img width="757" alt="スクリーンショット 2019-12-05 14.55.42.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/b4022913-3470-58ba-733d-278ba2b79ff2.png">

ボタンは一回しか押せないので、完了済みかどうかは一目瞭然。
<img width="701" alt="スクリーンショット 2019-12-05 14.55.55.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/f4f39c39-ab5e-801f-6ce0-689d1cda1541.png">

# 依頼した結果
可愛いマグネットができました！
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/98274211-6089-6c63-1860-3e59fe079a4d.jpeg"/>
~~これが本当の自作自演~~


# まとめ
今回はしょうもない依頼フローを主題に取り扱いましたが、現実的には運用⇆エンジニアのやりとりをスムーズにする上でとても便利に使えます。
何よりも既定のフォーマットになるというのが美味しすぎるので、どんどん自動化を進めていきましょう！