Slack ワークフロービルダーで条件分岐を使う方法

Slackワークフロービルダーはとても便利だが、条件分岐が使えず痒い所に手が届かない。
せめて回答内容のカテゴリー別にメンション先を分けるとかやりたいなーと思っていたら、非エンジニアでも出来るスプシを使って比較的シンプルな実現方法が見つかったので書いておく。

【追記】
2023/05/19以降、メンションについてはSlack側の仕様変更によって出来なくなっています。条件分岐はこの方法で実現可能なので記事は残しておきます。

【追記2】
2023/08以降、レガシーワークフロー以外はスプシの行を取得する際にRow Indexしか取れなくなっています。これにより、条件分岐は出来なくなりました。レガシーワークフローではまだ出来るので一旦記事は残しておきます。

---

今回は、好きなお昼ご飯のジャンルを入力するとジャンルに応じて予約担当を決めるフォームを作ってみる

### 完成形

<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210771/c2df290c-7ac5-c39d-95fc-b397e633e319.png">
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210771/812931d1-7edc-cab1-735a-6d457d4bb7bb.png">

## 作り方

下記のようにワークフローを作る

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210771/05e9fc36-31bb-f964-909f-7c8e34186537.png)

#### ステップ説明

##### 1. ショートカットで開始する

* 下記のように設定 
    <img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210771/9dd06c7e-ecac-f9bb-9fff-cdaac53d5203.png">


##### 2. **フォームを開く**
* 下記のように設定 
  <img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210771/97470249-180e-bbac-3427-4061b6ba77f4.png">

##### 3. Add a spreadsheet row
* Google Spread Sheetに「回答内容」シート追加
    A1に「回答」、B1に「WF開始日時」と入力する
   <img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210771/48cd1e50-8ee0-9827-9ed5-8f7c6cb341d0.png">
* Slackは下記のように設定
   <img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210771/7a025a28-93bb-f78b-c1c9-fd6ef4c7bd9f.png">
   ↑**ワークフローが開始した時刻**をスプシに残しておくのがポイント！ これでこの後のステップで行が引き当てられる。
（2023/03/23 追記）
「ワークフローが開始した時刻」は最新だと変数の一覧から除外されている。
`{{スレッドID==current_timestamp}}`のように手書きすればとりあえず入力可能（非公式なのでいつか利用できなくなる可能性はあり）。

##### 4. ワークフローを開始したチャンネルにメッセージを送信する

* 下記のように入力する （省略してもOK）
  <img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210771/946d2943-f8ce-7ddf-b3a6-c11aad1fa626.png">

##### 5. Select a spreadsheet row

* Google Spread Sheetに「【マスタ】ジャンルx担当者」シート追加
  A1に「カテゴリー」、B1に「担当者」と入力。2行目以降には適当に各カテゴリーと担当者を指定する。
  <img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210771/ce226792-ade3-8feb-c615-d54693ffec29.png">
* Google Spread Sheetに「【マスタ】担当者」シート追加
  A1に「担当者」、B1に「メンバーID」と入力。2行目以降に担当者名とSlackのメンバーIDを`<@メンバーID>`のフォーマットで入力
  <img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210771/3ee08f51-3c83-b4cd-ef48-78819cc7aab3.png">
    ↑メンバーIDはSlackのプロフィールから取得可能
      <img width="200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210771/052719c0-9908-dd0c-f016-0844e7695fe5.png">
    ↑~~実は、`<@メンバーID>` と指定することで **メンションとしてSlackが扱ってくれる!!!**~~　→この方法は仕様変更により使えなくなりました。
* Google Spread Sheetに「回答内容x担当者」シート追加
   * A1に、`=INDEX('回答内容'!A:B)` を入れる
     <img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210771/7aa2b6cf-6281-b4c3-28e4-69da35d01878.png">
   * C1に「担当者」と入力。
   * C2に`=IFERROR(vlookup(A2,'【マスタ】ジャンルx担当者'!A:B,2,false)&vlookup(vlookup(A2,'【マスタ】ジャンルx担当者'!A:B,2,false),'【マスタ】担当者'!A:B,2,false),"")`を入力。やっていることはジャンルをキーに担当者名とメンバーIDを引き当てている形。「山田<@メンバーID>」みたいに出力される。
     <img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210771/69696d0b-a0d4-452e-2d29-0330362e4cf6.png">
    ↑A列、B列が回答内容のシートの情報+Cが回答から**引き当てた担当者名**。
   * C2のセルをC列最下部までコピー。
* Slackは下記のように設定
  <img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210771/8b1f8c02-759a-fff7-320b-05e7c10af05b.png">
  ↑対象は、「**回答内容x担当者**」シート（担当者を引き当て済のシート）であるため注意（手順2で追加したシートじゃない）

##### 6. スレッドにメッセージを送信する

* 下記のように設定
  <img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210771/f254a685-bf01-d5ae-ae3f-5a26f34c943f.png">
  ↑手順5（Selected a Spreadsheetで取得したRowの「担当者」）

#### ↓カテゴリーに応じた担当者にメンションがいく設定が完成！

<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210771/c2df290c-7ac5-c39d-95fc-b397e633e319.png">
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210771/812931d1-7edc-cab1-735a-6d457d4bb7bb.png">

### おわりに

いかがだったろうか？ この方法ならSlackワークフロービルダーにスプシの関数を利用することができるので、プログラムにそこまで明るくなくてもフォームの回答結果を割と簡単に分類分けが出来て汎用性が高いんじゃないかなと個人的には思っている。社内申請とかでうまく使えば、申請分類から申請に対応する部署や人を切り替えたりすることもできるかもしれない。単にユーザ名ではなく、メンションになる点がミソだと思っている。~~`<@メンバーID>`がメンションになることを発見したのはラッキーだった（ただし、この仕様は非公式なので今後使えなくなる可能性はあり）。~~ →案の定、仕様変更により使えなくなりました。
この記事が誰かに役立ったら嬉しい限り。