AIに断られたあとの迷い読了 約6分

AIチャットの機能設計とナビゲーション再設計(Shopify App)

2025.1 – 2025.10UI/UXデザイン / 業務委託 / チーム7名
課題
キャンセル可能な条件を満たしていても、チャット上では手続きが完結しない。購入者は店舗へ個別に連絡し、店舗は一件ずつ人手で対応する——同じ一件の負担が両側に発生していた。
役割と体制
UI/UXデザイン / 業務委託 / チーム7名(PO・eng・デザイナー)。要件定義から実装仕様まで担当。
到達点
要件定義から実装仕様まで担当。同プロダクトの複数機能を継続受注中。
ABSTRACT

ECサイトの注文キャンセルをチャットで自動化する機能と、その管理画面ナビの再設計です。取り消せない処理なので適用範囲を絞り、成立は1ケース・残りは全て断りという構造から「できないときの返し方」を設計。あわせて、AIの実装用語が並んで運営者を迷わせていたナビを、運営者の言葉と作業の順序でまとめ直しました。

1CHAPTER

注文キャンセルの自動処理

01SCOPE

取り消せない処理だから、範囲を絞る

ECサイト購入者がチャット上でキャンセルを申請し、条件を満たせばAIが自動で処理を完了させる機能です。キャンセル可能な条件を満たしていても、これまではチャット上で手続きが完結せず、購入者は店舗へ個別に連絡し、店舗はその一件ずつに人手で対応していました。同じ一件の負担が両側に発生する構造です。さらにキャンセルの可否条件は店舗ごとに異なり、条件分岐を店舗側が自分で設定できる仕組みが必要でした。

判断

初期リリースは、自動でキャンセルしても問題が起きない状態だけに限定する。

自動キャンセルは取り消しのきかない処理だから。範囲を広げる前に、安全な範囲で確実に動かす。

絞った点理由
「未発送」かつ「未払い」の注文のみ返金処理も出荷の巻き戻しも発生しない
1注文ずつのみ確認ステップを一件ごとに挟み、誤操作を防ぐ
注文全体のみ(部分キャンセル不可)初期リリースのスコープとして除外

02DECLINE

体験を決めるのは、「断り方」だった

キャンセルが成立するケースは1つだけ。残りはすべて断るケースになります。つまりこの機能の体験を決めるのは、成功時のフローではなく失敗時の返し方でした。

#状況挙動
1未発送・未払いの注文AIが自動で処理を実行
2それ以外のステータスの注文定型メッセージ+サポート導線を返信
3店舗が設定した受付期限を超過定型メッセージ+サポート導線を返信
4店舗がキャンセル不可に指定した商品を含む定型メッセージ+サポート導線を返信

2〜4の返信は、文面もボタンのラベルもリンク先も、店舗側が管理画面から設定できるようにしました。

判断

断り方の固定文を、こちらから押し付けない。

問い合わせ先を文中に書くか、ボタンで置くか、どんな言い方にするかは店舗ごとのブランドイメージで変わるから。

もうひとつ、一覧に該当が見つからない場合の出口も用意しました。並べた中に探しているものがないと、そこで会話が止まります。一覧の下に「この中にキャンセルしたい注文がない」を常設し、押せば問い合わせ導線に切り替わる。AIが解決できないことを、ユーザー側から申告できる形です。

キャンセル可能な注文の一覧/対象がない場合の誘導/一覧に該当がない場合の誘導(エンドユーザーの画面)
資料 03-1左から、キャンセル可能な注文の一覧 / 対象がない場合の誘導 / 一覧に該当がない場合の誘導

03DECIDE

捨てた初期案を含む、主要な判断

判断1

デフォルトはオフ(オプトイン方式)にする。

初期値がオンだと、店舗が確認しないままキャンセルが走る。取り消せない処理なので、明示的に選んだときだけ動かす。

オンにして初めて、受付期間・除外商品・断り文の設定項目が開きます。あわせて、断り文が未入力のうちは保存できないようにし、「オンだが返信文が空」という状態を防いでいます。

設定の初期状態(オフ)
「キャンセルを使う」にした場合に開く設定項目
資料 03-2設定の初期状態と、「キャンセルを使う」に切り替えたときに開く設定項目
判断2

完了通知の宛先を、購入者から事業者へ変える。

実装条件を確認する中で、購入者にはShopify側から標準のキャンセル通知が届くと分かった。このままでは同じ内容が二重に届く。

宛先を事業者のログインアドレスに変更し、内容も「お客様へのお知らせ」から業務報告に書き換えました。注文番号・処理日・対象商品を並べ、返金や在庫連携の確認を促す構成です。同じ機能でも、誰に何を知らせるべきかは実装条件を確認しないと確定しません。自分の初期案を捨てた判断として残しておきます。

04STATES

うまくいく場合以外を、全部書く

実装に渡す前に、うまくいく場合以外の挙動をすべて洗い出して仕様に落としました。

チャット側

  • 入力エラー:メールアドレス未入力・形式不正でエラー表示、再入力を始めた時点でエラー文言と赤枠を解除
  • 認証失敗:3秒で自動的に消え、再入力できる状態に戻る
  • ローディング:認証に時間がかかる場合の待機表示
  • 選択後の状態:選んだ注文と他の注文で、無効化の見え方を変える
  • 情報量の可変:商品は1点のみ表示し、2点以上は「他n点」で展開。枠を超える場合は枠内スクロール
  • スマートフォン:キーボード表示時にチャット枠を最大化、注文カードは横スクロールに変更

管理画面側

  • 保存ボタンは変更がなければ無効。ホバー時にツールチップで理由を出す
  • 未保存のままページを離れようとした場合は確認モーダル
  • 文字数超過時は保存不可
  • 「使う」→「使わない」に切り替えても、設定内容は保持する。再び「使う」にしたとき、以前の入力が戻る

最後の一点は、一度オフにしても、再びオンにしたときに前回の設定が残っているほうがよいと考えたためです。機能を使わないことと、設定を捨てることは別だと整理しました。

メール認証の流れ
資料 03-3メール認証の流れ。入力エラー・認証失敗・ローディングまで状態を定義した

2CHAPTER

管理画面ナビゲーションの再設計

05RENAME

システム都合の名前を、運営者の言葉に

注文キャンセルのような機能を追加していくと、管理画面の項目数が増えていきます。新機能を足すこと自体が、別の問題を作るという状況でした。ページタイトルから何ができる場所かイメージしにくく専門用語に感じる、項目数が増えて判断しづらい、ナビの幅があり情報量の多い画面で見づらい——という課題です。

参照データ回答データ管理
システムプロンプトチャットボットの話し方
クイックプロンプト定型質問ボタン
問い合わせメッセージ答えられない時の対応
判断

システム都合の名前を、店舗運営者が使う言葉に置き換える。

このプロダクトの目的は、AIに詳しくない運営者でも自分の店にチャットボットを出せること。にもかかわらず、ナビにはAIの実装用語が並び、目的と入口が噛み合っていなかった。

名前がそのまま機能の説明になっている状態を目指しました。

06REORDER

作業の順序でまとめ直す

項目を並べ替えるのではなく、利用者の目的でまとめ直しました。チャットセッティング / チャットの公開 / チャットの確認。

判断

設定する → 公開する → 確認する、という運営者が実際に進めていく順序で並べる。

機能の分類ではなく、運営者の作業の流れに沿うほうが迷いにくいから。

実施のタイミングも設計に含めています。ユーザーが操作に慣れる前に直すと決めました。慣れた後の変更は、学習し直すコストを利用者に払わせることになるからです。

目的によるグルーピング
旧ナビゲーション
新ナビゲーション
資料 03-4目的でまとめ直したナビゲーションと、旧nav / 新nav の比較

07SYSTEM

同プロダクトで担当した他の機能

同プロダクトでは、チャットUI/定型質問設定/トークルームカスタマイズ/トーク履歴/お届け先変更/配送状況確認など、複数の機能を継続して担当しています。

チャットUI
定型質問設定(クイックプロンプト)
トークルームカスタマイズ
資料 03-5同プロダクトで担当した他の機能(チャットUI/定型質問設定/トークルームカスタマイズ)

REFLECTION

本機能はリリース前の段階で、導入後の効果はまだ確認できていません。断り方や出口の設計が、実際に「断られたお客様」の離脱をどれだけ減らすかは、公開後の問い合わせ数や離脱率で確かめる必要があります。取り消せない処理という制約から範囲を絞った判断が正しかったかも、運用が始まってから見えてくる部分です。

MAYOI RECORD

種類
AIに断られたあとの迷い。成立するのは1ケースで、残りはすべて「できない」。断られた人は、次にどこへ行けばいいか分からず止まる。
発見
体験を決めるのは成功時のフローではなく、断り方と、断られた後の出口。出口がないと、会話はそこで止まる。管理画面側でも、実装用語という「システムの都合」がそのまま運営者の迷いになる。
示唆
「できないときの返し方」を先に設計する。固定文を押し付けず店舗ごとに言い方を委ね、ユーザー側から「解決できない」を申告できる出口を常設する。入口の名前は、機能の分類ではなく利用者の言葉と作業の順序で決める。

この案件について聞く →