Skip to content

応答があるまでフローを止める ​

フローによっては、続行する前に外部からの返答が必要です。上司がリクエストを承認する、決済サービスが支払いを確認する、別のシステムが処理を終える、といった場面です。Webhook待機 アクションは、専用の URL が呼び出されるまで実行を一時停止し、送られてきた内容を使って処理を再開します。

このガイドでは承認フローを作ります。フローがリクエストを Slack に投稿し、待機し、回答に応じて処理を続けます。

仕組み ​

実行ごとに、Webhook待機ステップごとの コールバック URL が発行されます。フローは待機ステップに着く 前に、回答する人へこの URL を送ります。相手が URL を呼び出すと実行が再開し、送られたデータが待機ステップの出力になります。

メッセージ作成 ─▶ Slack に送信 ─▶ Webhook待機 ─▶ パス
 (URL を含む)                      ⏸ 一時停止
                                      ▲
          承認者 ── POST {"approved": true}

1. 待機ステップを追加する ​

  1. フローを止めたい位置で ステップを追加 をクリックし、組み込み を開いて 待機 を選び、Webhook待機 を選びます。
  2. HTTPメソッド を POST にします。
  3. ステップの名前を「承認待ち」に変更します。$ の一覧で URL を見つけやすくなります。

2. URL を含むメッセージを作る ​

コールバック URL は 項目全体 が参照のときだけ置き換わるため、Slack のメッセージの途中に直接入れることはできません。先にコードのステップでメッセージを組み立てます。

  1. 待機ステップの前に 組み込み › コード › JavaScript実行 を追加し、名前を「承認メッセージを作成」に変更します。

  2. 入力パラメータ にキー callbackUrl を追加します。値には $ を入力し、実行 を開いて コールバックURL用 承認待ち を選びます。値にはほかに何も書かないでください。

  3. コード に次のように書きます。

    js
    return `経費申請の承認をお願いします。こちらから承認または却下してください: ${callbackUrl}`;

3. 送信する ​

コードのステップと待機ステップの間に アプリ › Slack › メッセージ送信 を追加します。Slack の認証情報と チャンネルID を選び、メッセージ本文 にコードのステップの出力 承認メッセージを作成.results を設定します。

4. リクエストに回答する ​

承認する側は、JSON の本文を付けて URL に POST します。たとえば承認ツール、スクリプト、または別のフローの HTTP ステップ から送ります。

bash
curl -X POST "<コールバック URL>" \
  -H "Content-Type: application/json" \
  -d '{"approved": true, "comment": "問題ありません"}'

実行はすぐに再開します。

5. 回答に応じて処理を続ける ​

URL に送られた本文は、待機ステップの出力 data に入ります。待機ステップの後に パス を追加します。

  • フィールド: 承認待ち.data を選び、続けて .approved を入力します。参照全体は $.<待機ステップID>.output.data.approved です。
  • 演算子: 真偽値: 真

承認時のステップをこの分岐に、却下時のステップを フォールバック の分岐に置きます。コメントは data.comment にあります。

知っておきたいこと ​

  • URL はパスワードのように扱ってください。 URL を知っている人は誰でも実行を再開できるため、回答すべき人やシステムにだけ送ってください。
  • URL は実行ごとに異なります。 以前の実行の URL では新しい実行は再開しません。
  • ブラウザで URL を開く と、本文のない GET リクエストが送られます。承認者にリンクをクリックしてもらうだけにしたい場合は、HTTPメソッド を GET にしてください。クリックで実行は再開しますが、承認か却下かは伝えられません。
  • いつまでも待つわけではありません。 URL が 30 日以内に呼び出されないと、実行はステータス タイムアウト で止まります。実行履歴 で確認できます。制限 を参照してください。

関連ページ ​