SlackをShopify Flowに連携させる方法
Slackは、スラッシュコマンド、対話型メッセージ、Events APIによる配信など、アプリに送信するすべてのリクエストに、アプリの署名用シークレットを使用して署名を行います。Workflow Webhooksは、その呼び出しをShopify Flowのトリガーに変換するため、ストア側でそれに応じて処理を行うことができます。お客様へのタグ付け、注文メモの追加、社内メールの送信、メタフィールドの更新など、Shopify Flowで可能なあらゆる操作を実行できます。
このガイドでは、Slackが送信し、Workflow Webhooksが受信・検証し、Shopify Flowが処理を行うという一連の流れをすべて設定します。すべてのリクエストにおいてSlackのHMAC署名が検証されるため、Slack以外からはワークフローを開始することはできません。
どのようなものを作れるか
- 管理者のアクセス権を誰にも付与することなく、チームメンバーがSlackのスラッシュコマンドを使ってShopify Flowのワークフローを実行できるようにしましょう。
- Slackで何かを承認すると、Shopify Flowがその承認された注文やお客様にタグを付けます。
- Slackのショートカットをストアのアクションに変換しましょう。タグの追加、メールの送信、メタフィールドの更新などが可能です。
送信される代表的なイベントとしては、/restock のようなスラッシュコマンド、対話型メッセージでのボタン押下、Events API イベントなどがあります。
始める前に
- Workflow Webhooks Shopifyストアにインストールされています。
- Shopify Flow インストール済みです。これは、ShopifyのApp Storeから無料で入手できます。
- Webhookを作成する権限を持つSlackのアカウントです。
ステップ 1 - Workflow Webhooks で Webhook を作成します
- Workflow Webhooks を開き**、[Webhook] → [Create Webhook]** の順に選択し、Shopify Flow で識別しやすい名前(例:
Slack events)を付けてください。 - **「認証」**で、「**HMAC」**を選択してください。
- 「署名プロバイダー」で「Slack」を選択してください。アプリがヘッダー、アルゴリズム、署名付きペイロード、リプレイウィンドウを自動的に入力してくれます。これ以外の設定は一切必要ありません。
- 「シークレット」の欄はひとまず空のままにして、「保存」をクリックしてください。ページに表示されているWebhookURLをコピーしてください。
その他の認証モードについては、認証 を、Shopify Flow に送信するフィールドの選択については、ペイロードのマッピングとShopify Flow変数 をご参照ください。
ステップ 2 - Slack にエンドポイントを追加する
Slackアプリの設定で、スラッシュコマンド、インタラクティブ機能、またはEvents APIの「リクエストURL」としてこのURLを追加し、**「基本情報」→「アプリ認証情報」**から「署名用シークレット」をコピーしてください。
Slackの署名用シークレットを確認する方法
Slackアプリの署名用シークレット(基本情報 → アプリの認証情報)。
Webhookの署名に関するSlackの公式ドキュメント()には、お客様のアカウントに適用される正確な記述とスクリーンショットが掲載されています。
そのシークレットを、Workflow Webhooks の Webhook の**「Secret」**フィールドに貼り付けて、保存してください。それ以降、Slack からのすべての配信は、Shopify Flow に届く前に検証されるようになります。
これが何をチェックするのか
| 何 | 値 |
|---|---|
| 署名ヘッダー | X-Slack-Signature |
| 署名の位置 | プレフィックス「v0=」の後のヘッダー値 |
| 何が署名されたのでしょうか | v0:{timestamp}:{body} |
| 署名 | HMAC-SHA256、16進数エンコード |
| タイムスタンプ | X-Slack-Request-Timestampヘッダー(Unix秒として) |
| リプレイ防止機能 | 署名付きタイムスタンプが現在時刻から5分以上離れたリクエストは拒否されます |
| その秘密 | プレーンテキストとして使用します。送信者が表示しているとおりに、そのまま貼り付けてください。 |
署名付きペイロードにおいて、{body} はバイト単位でリクエスト本体をそのまま表しており、{timestamp} は上記のタイムスタンプです。
これらのいずれかの条件を満たさないリクエストは、401 のエラーで拒否され、沿革とトラブルシューティング に記録され、ワークフローは開始されません。
ステップ3 - 「Shopify Flow」ワークフローを作成する
- Shopify Flow でワークフローを作成し、「Workflow Webhooks」トリガーを選択してください。
- **「イベントの記録」**をクリックし、Slackからテストイベントを送信してください(または、Workflow Webhooksの「テストを送信」機能をご利用ください)。これにより、Shopify Flowがデータの形式を学習します。
- 所有しているすべてのWebhookは同じShopify Flowトリガーを起動するため、このワークフローをSlackのみに限定するには、Webhook IDを最初の条件として追加してください。IDはWebhookページに表示されています。
- アクションを追加してください ― お客様にタグを付けたり、メモを追加したり、社内メールを送信したり、メタフィールドを更新したりできます。



ステップ4 - エンドツーエンドでテストする
Slackで実際のイベントをトリガーします。「**Workflow Webhooks」→「History」**に、ステータスが「**Success」**の呼び出しが表示されます。署名が正しくない場合は、その理由が記載された失敗のエントリが表示されます。また、署名付きWebhookの検証 には、どのステップで失敗したかを正確に示す署名テスターの説明が記載されています。

署名が一致しません▾
順に、シークレット(最も一般的な原因:余分なスペース、または間違った環境のキー)、送信者が別のエンドポイントのシークレットを使用しているかどうか、そしてSlackとアプリの間でボディが書き換えられているかどうかです。署名は生のバイト列を対象としているため、JSONのフォーマットを変更するプロキシによって署名が破損してしまいます。 Webhookページの署名テスターには、署名された正確なテキストが表示されます。
どのリクエストでも401エラーが表示されます▾
Webhookの認証が**「HMAC」**に設定され、Slackプロバイダーが選択されていること、シークレットが入力されていること、そしてSlackがアプリに表示されているURL(末尾のコードを含む)に正確に投稿していることをご確認ください。
「履歴」には何も表示されません▾
リクエストは届きませんでした。Slack内のURLを再度確認し、Slack自体の配信ログで受け取った応答を確認してください。「404」というエラーは、Webhookの設定が間違っているか削除されていることを意味します。「429」というエラーは、プランの呼び出し制限を超えていることを意味します。詳細は プランと利用方法 をご覧ください。
ワークフローが誤ったイベントに対して実行されています▾
ストア内のすべてのWebhookは、同じShopify Flowトリガーを起動します。ワークフローの最初のステップとして、Webhook IDに基づく条件を追加するか、Slackから送信するイベントを絞り込んでください。
リクエストが「タイムスタンプが許容範囲外です」というエラーで失敗します▾
Slackはタイムスタンプに署名を行いますが、アプリは5分以上経過したものはすべて拒否します。これは通常、送信側の時計の問題か、Slackが元のタイムスタンプのままかなり遅れて再送信したケースです。同じ元のリクエストからの再送信は通過できませんので、Slackに新しいイベントを送信するよう依頼してください。
関連情報
- 署名付きWebhookの検証 - 当社が審査済みのすべてのプロバイダーについて、および審査対象外のプロバイダーをどのように記載するかについて。
- ペイロードのマッピングとShopify Flow変数 - ペイロードから適切なフィールドを抽出し、Shopify Flowに取り込むこと。
- 重複配送防止 - Slackが配信を再試行すると、どうなるのでしょうか。
- 沿革とトラブルシューティング - すべてのリクエストのログ(再生機能付き)。

