やりたいこと

今回のシナリオは、実際に私が運営する東京のレンタルドレスショップEmpty Dressyで本番運用しているものになります。

LINEのLIFF(LINE Front-end Framework)上でShopifyのアカウント登録ページを開き、アカウント登録を行った場合に、メールアドレスやLINEのIDをAirtableに保存しようと思います。

Shopify上でもテーマを編集する必要がありますが、今回はIntegromatに焦点を当てて説明します。

Shopifyのアカウント登録が起点[1]

ShopifyはさまざまなイベントのWebhookを用意しており、今回は「customers/create」を使います。

ShopifyのWebhookを新しく追加する際にはShopifyとのConnectionの設定も必要ですが、その際に「Show advanced settings」を押し、「Scope」で該当のものをチェックしないとエラーが発生してしまうので、ご注意ください。

Shopifyの決済手段としてAmazon Payを導入しており、Amazonで登録されているメールアドレスとShopifyで登録されているものが異なる場合、ShopifyではAmazonのメールアドレスでも新しくアカウント登録を行ってしまいます。

その重複されたアカウントについてはAirtableで保存する必要はなく、Amazon経由のアカウントは、「last_name」が空白にはならないという特徴があるので、それを条件にフィルターをかけます。

Router[13]

LIFF以外のアカウント登録の導線は消していますが、URLを推測等して、その他のブラウザからアクセス・アカウント登録がされてしまう可能性もあります。

LINEのユーザーIDは、Webhookで送信される「Data」オブジェクトの「note」プロパティの15字目以降に含まれているので、substring()の2つ目の引数を14にすることで、LINEのユーザーIDを抜き出し、LIFF以外からのアカウント登録が行われる場合はそのIDが空になるで、空かどうかでLINE経由かどうかを判定し、分岐の上で後続の処理を変えています。

登録者のUserレコードを検索(LINE)[7]

Empty Dressyでは登録に電話番号が必要なLINEのユーザーIDをユニークなキーとしているものの、メールアドレス自体は一人が複数持つことも、異なるメールアドレスでアカウント登録を試みてしまうことも、珍しくはありません。

LINE経由の登録の場合は、既にそのLINEのユーザーIDがAirtableのUsersテーブルに登録されているかどうかを検索します。

Airtableのモジュールでは「Formula」にAirtableの関数を入れることができます。

「{}」で囲むとAirtable上でのカラムの値にアクセスでき、文字列での一致を条件とする     場合は、「'」で囲む必要がありますが、「'」の中・外ともに、Integromatの関数やキーワードを使うことも可能です。

どのようなAirtableのファンクションが使えるかについては、Airtableの「Formula field reference」をご覧ください。

Userレコードの有無に応じて(LINE)[8]

[7]の検索結果は、対象のレコードの数だけバンドルとして出力されるので、そのバンドルの数に応じて後続の処理を振り分けています。

登録者のUserレコードを更新[10]

[7]で1つ以上のバンドルが出力される場合は、そのバンドルに含まれる「Record ID」をキーに、Userレコードを更新します。

登録者のUserレコードを検索(Email)[17]

[7]で1つもバンドルが出力されない場合は、次にメールアドレスをキーにUsersテーブルを検索します。

リニューアル前のシステムではメールアドレスをキーにユーザー情報を管理していて、そのユーザー情報はAirtableにもLINEのユーザーIDがない状態で移行されています。

そこで、以前のサービス利用者がリニューアル後のシステムで再度登録していただいた場合にもユーザー情報を一元管理するために検索します。

Userレコードの有無に応じて(Email)[18]

検索結果は、対象のレコードの数だけバンドルとして出力されるので、そのバンドルの数に応じて後続の処理を振り分けています。

登録者のUserレコードを追加[2]

[17]で1つもバンドルが出力されない場合は、新しくUserレコードを追加します。

登録者のUserレコードを更新[19]

[17]で1つ以上のバンドルが出力される場合は、そのバンドルに含まれる「Record ID」をキーに、Userレコードを更新します。

アカウントを削除[16]

LINE経由ではないアカウント登録については、Shopify上でアカウント情報を削除し、ユーザーにメールを送るようにしています。

まず、[1]で出力される「id」がShopifyの「Customer ID」に当たるので、そのIDのアカウント情報を削除します。

Userにメールを送信[15]

ユーザーにLINE経由の登録ではないためにアカウント情報を削除し、利用する場合はLINE経由で登録してほしい旨を伝えます。

送信先のメールアドレスには、Shopifyで登録されたものを使用します。

#alertにSlackを送信[14]

何かしらイレギュラーな事象が発生した際にはSlackの#alertチャンネルに情報を送信する運用にしているため、今回も通知をするようにしています。

以上、ShopifyとLINEを連携し、アカウント情報をAirtableに登録する方法についての説明でした。