Slack ワークフロービルダーの新しいトリガー（日時/Webhook）を使ってみよう！

##はじめに
ワークフロービルダーの新機能が2020/02/12に**[リリース](https://slack.com/help/articles/360041352714?locale=en-US)**されました:smile:
追加機能の概要と、簡単な使い方をまとめておきます！
前回投稿したワークフロービルダーの基本的な解説は**[こちら](https://qiita.com/kazushi_iizuka/items/5cd9c3bb0bde9803cac0)**

##追加機能（3点）
新しいトリガーが2点と、追加機能が1点リリースされました。

**新しいトリガー（スケジュールされた日付と時間）**
　特定の日または定期的なワークフローをスケジュール起動する機能

**新しいトリガー（Webhook）**
　外部システムまたはツールからSlackのワークフローを起動する機能

**新しい機能（フォームデータをCSVとしてダウンロード）**
　ワークフロービルダーのフォームから収集した回答をCSV形式でダウンロードできる

**:warning: 注意事項:warning:**
Webhookトリガーや、フォームデータをCSVとしてダウンロードするためには
事前にワークスペース管理者が[権限設定](https://my.slack.com/admin/settings#permissions)を行う必要があります。

##新しいトリガー（スケジュールされた日付と時間）
もう1つ追加された新しいトリガーです。こちらは解説するまでもなく直観的に使える機能だと思います。
/remind などで繰り返しメッセージを設定するのもひとつですが、定期的なフォーム入力の催促などを
ワークフローとして実現したい場合には活用できそうな気がします。

今回フォーム入力データがCSVダウンロードできるようになったので相性もいいですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283501/8bdb319d-ab07-7c8b-3667-c0fecb63cf7a.png)

##新しいトリガー（Webhook）
サンプルとして、新しいトリガー（Webhook）を、GoogleAppsScriptから利用する場合の手順を書いていきます。
なお、今回追加されたWebhookは、従来から提供されている**Incoming Webhook**に相当する機能です。
Incoming Webhookの仕様はあわせて**[公式リファレンス](https://api.slack.com/messaging/webhooks)**をご確認ください。

**(1)** 適当な名前で新しいワークフローを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283501/36de7b16-0295-29b6-0bee-dae9fd99925e.png)

**(2)** トリガー設定に、今回追加されている機能が表示されています。`Webhook`を選択してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283501/c96e4b15-9750-8208-7e74-f18cd0f8c236.png)

**(3)** Incoming Webhookで受け取る変数を追加します。`変数を追加する`を選択してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283501/bde09d87-a220-5e3a-b8be-66a33b1c4f13.png)

**(4)** 変数を追加します。今回はサンプルで`text`を追加します。データタイプは`テキスト`を選択してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283501/fea0f4bc-c28d-8780-ad98-8eff33c327f2.png)

`データタイプ`にはテキスト以外にも、以下の中から選ぶことが可能です。
-テキスト
-Slackユーザーのメールアドレス
-SlackユーザーID

**(5)** Webhookが登録された状態です。この時点ではWebhookURLが発行されていません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283501/d59f3864-b8aa-2410-ca35-a6925fdf6391.png)

**(6)** ステップを追加し`メッセージを送信`を選択してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283501/f8f54864-f691-49d3-703e-f1ca3c14874c.png)

**(7)** メッセージの送信先を選択し、メッセージのテキストには**変数を挿入する**をクリックし、**(4)** で作成した変数`text`を指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283501/e33cd236-0376-ccde-3047-34cf28d8b775.png)

**(8)** ワークフロービルダーの準備はこれで完了です。右上の`公開する`をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283501/246a1bb6-234b-70de-66fd-513d0023d682.png)

**(9)** Webhook用のURLが新規発行されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283501/c6f4322f-d477-7543-963d-252e8c818da2.png)

**(10)** GoogleAppsScriptで新規スクリプトを作成します。
サンプルコードの`payload`の部分に、**(4)**で設定したワークフロービルダーの変数の値を設定します。

```sample.js
function sample(){

  //ワークフロービルダーで作成したWebhookURLを設定
  webhookurl = 'https://hooks.slack.com/workflows/XXXXXXXXX/XXXXXXXXX/000000000000000000/XXXXXXXXXXXXXXXXXXXXXXXX';

  //ワークフロービルダーで設定した変数の値を設定
  var payload = {
    'text' : 'Hello World!',
  };

  //HTTPリクエストを送信
  var params = {
    'method' : 'post',
    'payload' : JSON.stringify(payload)
  };
  var response = UrlFetchApp.fetch(webhookurl, params);

  var content = response.getContentText("UTF-8");
  
}
```

**(11)** サンプルコードを実行してメッセージが表示されれば完成です！🎉
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283501/17ada783-774c-472f-083d-5963f8d48e3c.png)

##新しい機能（フォームデータをCSVとしてダウンロード）
ワークフロービルダーの編集画面右上にある「...」から、フォーム形式で回答をダウンロードするを押すだけです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283501/ec70cd30-20c6-17dc-25b9-ba1b78242fff.png)

ファイルダウンロード準備が整うと、SlackBotからユーザー宛にダウンロードURLが通知されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283501/512b5190-2145-3aae-4cd6-9edcf40a2aeb.png)

##さいごに
今回Incoming Webhookに対応されたことで、GSuiteや他SaaSサービスとの連携がやりやすくなりました。
Slackを呼び出す側は、JSON形式で値を渡す必要があるため、多少プログラミングスキルは求められますが
ユーザーのSlackを活用したアイデアを形にしやすくなったと思いますし、非常に良いアップデートだと思います。
これからもワークフロービルダーには追加機能の実装が期待されるところですね。

以上