注文時の住所の文字数がオーバーしたときにShopifyFlowで通知メールを送りたい

Topic summary

ユーザーがヤマト運輸B2システムの住所文字数制限(都道府県4文字+市区郡町村12文字+町・番地16文字)に対応するため、Shopify Flowで文字数オーバー時の通知メールを送りたいと相談。

現状の課題:

  • Basicプランのため、カート内での文字数制限設定が困難
  • 文字数オーバーのCSVを取り込むとエラーが発生し、発送作業に支障

提案された解決策:
Qcoltd氏がShopify Flowを使った実装方法を提示:

  1. 注文メタフィールド「custom.is_more_than_17_chars」を準備
  2. Create Orderをトリガーに設定
  3. Update order metafieldsで都道府県名を英語から日本語に変換し、合計文字数が16文字超の場合にTrue/Falseを設定
  4. 条件分岐で通知メール送信

現在の状況:

  • 実装を試したが、文字数制限内でもエラー通知が届く問題が発生
  • 項目別(都道府県、市区町村など)での検証を検討中
  • メール本文に各項目の文字数を表示する方法についても質問中

※Checkout Logicアプリでの解決も言及されたが、無料版では利用不可

Summarized with AI on November 10. AI used: claude-sonnet-4-5-20250929.

テーマは「Dawn」を使用しています。

ShopifyのプランはBasicです。

配送は「ヤマト運輸」を利用しており、伝票発行はヤマトのB2システムを使っています。

(ShopifyからCSVを取得→ヤマトB2にCSVを読み込ませて伝票発行→発送しています)

ただ、ヤマトには以下の通り住所に文字数制限があります。

(文字数がオーバーしたままCSVを取り込むとエラーになり発送作業に支障が出ています)

都道府県(4文字以内)+市区郡町村(12文字以内)+町・番地(16文字以内)

本当は、カート内で文字数制限を設けたかったのですが、以下の記事ではプラン的に厳しそうでした。

https://community.shopify.com/post/1344842

そこで、せめて事前に文字数オーバーをスタッフ側で検知して、発送前に配送住所を修正できればと思っています。

具体的には、ShopifyFlowを使って、注文時の配送先住所の文字数をチェック→文字数オーバーした時にスタッフに通知(メール)を送るといったことは可能でしょうか。

可能な場合、具体的なShopifyFlowの設定内容も教えていただけると助かります。

※その他、もっと良い方法やアプリがあればご教示いただきたいです。

丸投げな質問で申し訳ないのですが、どなたか教えていただけますでしょうか。

よろしくお願いいたします。

@n_ogawa3

Shopify Flowでは下記のようになるかと思います。

Run codeを使った方がスマートなフローになりそうですが、まだ早期アクセスの機能であるため、昔ながらのアプローチで組んでみました。

https://help.shopify.com/ja/manual/shopify-flow/reference/actions/run-code

  1. 注文情報にメタフィールド「custom.is_more_than_17_cahrs」を真偽値で、準備します。

  2. Create Orderdをトリガーにします。

  3. Update order metafieldsで「custom.is_more_than_17_cahrs」を更新します。

Valueには下記を設定します。

{%- assign prefecture = order.shippingAddress.province | replace: 'Aichi', '愛知県' | replace: 'Akita', '秋田 県' | replace: 'Aomori', '青森県' | replace: 'Chiba', '千葉県' | replace: 'Ehime', '愛 媛県' | replace: 'Fukui', '福井県' | replace: 'Fukuoka', '福岡県' | replace: 'Fukushima', '福島県' | replace: 'Gifu', '岐阜県' | replace: 'Gunma', '群馬県' | replace: 'Hiroshima', '広島県' | replace: 'Hokkaidō', '北海道' | replace: 'Hyōgo', '兵庫県' | replace: 'Ibaraki', '茨城県' | replace: 'Ishikawa', '石川県' | replace: 'Iwate', '岩手県' | replace: 'Kagawa', '香川県' | replace: 'Yamanashi', '山梨県' | replace: 'Yamaguchi', '山口県' | replace: 'Kōchi', '高知県' | replace: 'Kumamoto', '熊本県' | replace: 'Kyōto', '京都府' | replace: 'Mie', '三重県' | replace: 'Yamagata', '山形県' | replace: 'Miyazaki', '宮崎県' | replace: 'Nagano', '長野県' | replace: 'Nagasaki', '長崎県' | replace: 'Nara', '奈良県' | replace: 'Niigata', '新潟県' | replace: 'Ōita', '大分県' | replace: 'Okayama', '岡山県' | replace: 'Okinawa', '沖縄県' | replace: 'Ōsaka', '大阪府' | replace: 'Saga', '佐賀 県' | replace: 'Saitama', '埼玉県' | replace: 'Shiga', '滋賀県' | replace: 'Shimane', '島根県' | replace: 'Shizuoka', '静岡県' | replace: 'Tochigi', '栃木県' | replace: 'Tokushima', '徳島県' | replace: 'Tottori', '鳥取県' | replace: 'Toyama', '富山県' | replace: 'Tōkyō', '東京都' | replace: 'Miyagi', '宮城県' | replace: 'Wakayama', '和 歌山県' | replace: 'Kanagawa', '神奈川県' | replace: 'Kagoshima', '鹿児島県' -%}
{%- assign prefecture_num = prefecture | size -%}
{%- assign city_num = order.shippingAddress.city | size -%}
{%- assign address1_num = order.shippingAddress.address1 | size -%}
{%- assign count = 0  | plus: prefecture_num | plus: city_num | plus: address1_num -%}
{%- if count > 16 -%}
true
{%- else -%}
false
{%- endif -%}

これで、都道府県、市区町村、住所の文字数の合計が17文字以上の時に、custom.is_more_than_17_cahrsがTrueに、そうでなければFalseに設定されます。

  1. メタフィールドの更新に時間がかかることがあるため、Waitで1分待機します。

  2. custom.is_more_than_17_cahrsがTrueかどうか判定します。

このような設定になります。

  1. custom.is_more_than_17_cahrsがTrueであれば、Send internal emailでメールを送信します。

以上となります。

もっと簡単に設定できるアプリもあるかもしれませんが、

取り急ぎ、Shopify Flowでの実装方法をご紹介いたしました。

※十分に検証していないので、なにか不具合があるかもしれません。

ご参考まで。

(キュー田辺)

お返事が遅くなりまして申し訳ございません。

迅速なお返事ありがとうございました。

試しているのですが、文字数制限内でもエラー通知メールが届いてしまいます…。

一旦合計数ではなく、都道府県などの項目別で設定して検証してみたいと思います!

ちなみに、通知メール(Send internal email)で、都道府県、市区町村、住所のそれぞれの文字数を本文に反映することは可能でしょうか?

※以下の「(●文字)」の部分に文字数を反映させたいです。


<メールイメージ>

配送先住所が長すぎる注文があります。
至急ご確認ください。

■注文番号:*****
■支払方法:shopify_payments

■氏名(16文字以内):〇〇 〇〇(●文字)
■会社名(25文字以内):〇〇会社(●文字)

■都道府県(4文字以内):〇〇県(●文字)
■市区郡町村(12文字以内):〇〇市(●文字)
■町・番地(16文字以内):(●文字)
■建物名等(16文字以内):
(●文字)

※都道府県+市区郡町村+町・番地+アパートマンション名合計32文字まで

■タグ:*****
■備考:*****

※こちらのメールはShopifyに連携しているアプリ「Shopify Flow」を使って送信されています。


配送先住所が長すぎる注文があります。

至急ご確認ください。

----------------------------------

■注文番号:{{order.name}}

■支払方法:{% for paymentGatewayNames_item in order.paymentGatewayNames %}{{paymentGatewayNames_item}}{% endfor %}

■氏名(16文字以内):{{order.shippingAddress.lastName}} {{order.shippingAddress.firstName}}

■会社名(25文字以内):{{order.shippingAddress.company}}

■都道府県(4文字以内):{{order.shippingAddress.province | replace: 'Aichi', '愛知県' | replace: 'Akita', '秋田 県' | replace: 'Aomori', '青森県' | replace: 'Chiba', '千葉県' | replace: 'Ehime', '愛 媛県' | replace: 'Fukui', '福井県' | replace: 'Fukuoka', '福岡県' | replace: 'Fukushima', '福島県' | replace: 'Gifu', '岐阜県' | replace: 'Gunma', '群馬県' | replace: 'Hiroshima', '広島県' | replace: 'Hokkaidō', '北海道' | replace: 'Hyōgo', '兵庫県' | replace: 'Ibaraki', '茨城県' | replace: 'Ishikawa', '石川県' | replace: 'Iwate', '岩手県' | replace: 'Kagawa', '香川県' | replace: 'Yamanashi', '山梨県' | replace: 'Yamaguchi', '山口県' | replace: 'Kōchi', '高知県' | replace: 'Kumamoto', '熊本県' | replace: 'Kyōto', '京都府' | replace: 'Mie', '三重県' | replace: 'Yamagata', '山形県' | replace: 'Miyazaki', '宮崎県' | replace: 'Nagano', '長野県' | replace: 'Nagasaki', '長崎県' | replace: 'Nara', '奈良県' | replace: 'Niigata', '新潟県' | replace: 'Ōita', '大分県' | replace: 'Okayama', '岡山県' | replace: 'Okinawa', '沖縄県' | replace: 'Ōsaka', '大阪府' | replace: 'Saga', '佐賀 県' | replace: 'Saitama', '埼玉県' | replace: 'Shiga', '滋賀県' | replace: 'Shimane', '島根県' | replace: 'Shizuoka', '静岡県' | replace: 'Tochigi', '栃木県' | replace: 'Tokushima', '徳島県' | replace: 'Tottori', '鳥取県' | replace: 'Toyama', '富山県' | replace: 'Tōkyō', '東京都' | replace: 'Miyagi', '宮城県' | replace: 'Wakayama', '和 歌山県' | replace: 'Kanagawa', '神奈川県' | replace: 'Kagoshima', '鹿児島県' }}

■市区郡町村(12文字以内):{{order.shippingAddress.city}}

■町・番地(16文字以内):{{order.shippingAddress.address1}}

■建物名等(16文字以内):{{order.shippingAddress.address2}}

※都道府県+市区郡町村+町・番地+アパートマンション名合計32文字まで

■タグ:{% for tags_item in order.tags %}{{tags_item}}、{% endfor %}

■備考:{{order.note}}

----------------------------------

※こちらのメールはShopifyに連携しているアプリ「Shopify Flow」を使って送信されています。

なお、チェックアウト画面での文字数制限は「Checkout Logic」というアプリで解決できました!

※無料版で使いたいので不格好ですが以下のように設定すると文字数オーバーの場合はエラーが出て注文ができなくなりました!

よろしくお願いいたします。

@n_ogawa3

試しているのですが、文字数制限内でもエラー通知メールが届いてしまいます…。

一旦合計数ではなく、都道府県などの項目別で設定して検証してみたいと思います!

左様でしたか。検証が不十分で恐縮です。

ちなみに、通知メール(Send internal email)で、都道府県、市区町村、住所のそれぞれの文字数を本文に反映することは可能でしょうか?

※以下の「(●文字)」の部分に文字数を反映させたいです。

一例の紹介になってしまうのですが、

氏名であれば、

{% assign fullname = order.shippingAddress.lastName | append: " " | append: order.shippingAddress.firstName %}
■氏名(16文字以内):{{ fullname }} ({{ fullname | size }}文字)

となるかと思います。

なお、チェックアウト画面での文字数制限は「Checkout Logic」というアプリで解決できました!

※無料版で使いたいので不格好ですが以下のように設定すると文字数オーバーの場合はエラーが出て注文ができなくなりました!

なるほどです。

Shopify Functionsに、チェックアウトのバリデーションを行う機能もあるので、おそらくそれを利用したアプリが公開されていたのですね。

勉強になりました。