ShopifyのFlowを利用して外部のRest APIを呼び出す

アソビューでバックエンドエンジニアをしている上中です。

皆さんShopify利用してらっしゃいますでしょうか。弊社ではアソビュー!ギフトというECサイトを、Shopifyを利用して運営しています。

ShopifyにはFlow(※注)という便利な機能がありますので、今回はそちらを利用して弊社システム内に作成したRest APIを呼び出してみたいと思います。

※注: Shopify FlowはShopify Plusプランに加入している場合のみ利用可能です。

なぜShopify Flowを使うのか?

アソビュー!ギフトでは、ギフト商品を購入いただくと「ギフトコード」というコードが購入者に送られ、そちらを指定のサイトで入力いただくことで体験したいプランが選べるという仕組みになっています。このギフトコードの提供方法として、今回メールでの送信を検討しました。

メールは、顧客が商品を注文すると同時に送りたいわけですが、ギフトコードは弊社独自のシステムにより生成されるため、Shopify だけで機能を完結することはできません。”注文”をトリガーにして、Shopifyから弊社システムのAPIをフックし、ギフトコードの発行と独自フォーマットによるメールの送信を弊社システムによって行う必要があります。

そこでShopify Flowを使ってみることにしました。

フローを作ってみよう

ちょうどこの記事を書いているタイミングでUIが変わっていたので、新UIを探りながら作っていきます。

大まかな流れとしては、トリガー選択 -> 条件を追加 -> アクションを定義の順番で作成を進めます。

  1. まずはワークフローの画面を開き、「ワークフローの作成」を選択します。
メニューからワークフローを選択
「ワークフローを作成」を選択

ワークフロー作成時は下図のように様々なシチュエーションに応じてあらかじめ用意されたテンプレートをベースに作成することもできますが、今回はあえて一から作成していくのでテンプレートではなくトリガーを選びます。

様々なテンプレートがあらかじめ用意されている

2. フローを動作させたいタイミング「トリガー」を選択します。

今回は「注文に対する支払いが完了したとき」にAPIを実行したいので、「Order paid」を探して選択します。説明にある通り、支払いが発生した時にworkflowを起動するトリガーです。

Order paidを選択
選択後の状態

3. 次に、このままアクションを追加すると全ての支払いでアクションを実行してしまうため、条件を追加します。今回は、特定の文字列を含んだSKUの商品が注文に含まれる場合のみ実行することにします。

条件を選択
Condition->「すべての条件を満たした場合」を選択し、「基準を追加する」
Order -> Lineitems -> skuを選択

「Lineitems」は注文に含まれる商品の明細を示しています。

「注文に含まれる全ての商品のSkuに「test」が含まれている」条件を追加

「他の比較を追加する」からAND条件を作成することも可能。

条件追加完了

3. 複数の条件を連結することでAndやOR条件にすることも可能です。もう一つ条件を追加して見ます。

SKUだけではなく、支払いの状態が「PAID(完済)」になっていることを条件に加えます。Shopifyでは分割で支払いすることも想定されているため、支払いのたびにAPIを実行するのではなく、すべての支払いが完了して初めてAPIを実行します。

支払いがPAID

Display financial statusで支払いの状態をチェックします。

4. 最後に、すべての条件にマッチした際に実行したいアクションを追加します。今回は外部システムのRest APIを実行します。

「アクション」を選択する
「Send HTTP Request」を見つけて選択
MethodやURL、必要なヘッダを任意で設定

Bodyは「変数の追加」から、Shopifyが保持している注文に関する情報をパラメータとして取り扱うことができます。ここでは注文のIDをAPIのBodyパラメータに付与します。

注文IDを探す
注文ID選択後

最後にJSON形式に整形します。以下のようにすることでValueに埋め込むことができます。

JSON形式に修正

5. これで一つフローができました。あとは右上のスイッチをONにすれば、その後の注文に対してこのフローが適用されます。

「アクティビティ」から過去の実行結果を見ることも可能です。

ということで今回はShopifyのFlow機能の簡単な使い方でした。直感的で、初めてでもそれほど迷わず作成できます。

今回のAPI実行以外にも、特定の条件にマッチする注文にタグをつけるという用途でよく使います。

他にも様々なトリガーや条件、アクションを選択可能ですので、色々試してみようと思います。

さいごに

今回のような目的での使い方はあまり多くはないかもしれませんが、少しでも参考になれば幸いです。

アソビューではエンジニアを募集しています!ご興味ある方はぜひ応募ください!

 

www.wantedly.com