Amazon Web Services ブログ

Amazon Lex を使用して小売注文管理の会話型顧客体験ボットを構築する

この投稿は、”Build conversational experiences for retail order management using Amazon Lex” を翻訳したものです。

小売業者は、顧客がデジタルチャネルと実店舗の間で購買するとき、シームレスに顧客とのエンゲージメントを維持したいと考えています。さまざまな小売のタッチポイントでパーソナライズされた一貫した顧客体験を提供することで、小売業者はブランドロイヤルティを高めることができます。顧客は、注文状況の確認、配送の変更、ポイントの使用、返金の手続き、実店舗の検索などの理由で小売業者のカスタマーサポートに連絡します。これらのやり取りの中で、商品のレコメンデーションは、オペレーションの最適化と売り上げの増加に重要です。状況に応じたカスタマイズされた会話は、顧客との関係を構築し、リピート購買を増やし、解約を減らし、顧客の生涯価値を高めるのに役立ちます。

この投稿では、Amazon Lex の構築済みのソリューションを使用して、注文ステータスの取得、荷物の追跡、注文のキャンセルまたは変更など、注文管理のための豊富な顧客サービス体験を提供する方法について説明します。

ソリューション概要

Amazon Lex は、音声をテキストに変換する自動音声認識 (ASR) と、テキストの意図を認識する自然言語理解 (NLU) の高度な深層学習機能を提供し、非常に魅力的な顧客体験とリアルな会話型アプリケーションを構築できます。Amazon Lex for Retail は、構築済みのソリューションを提供することで、オムニチャネルのカスタマージャーニーのブランドロイヤルティを高めることに役立ちます。構築済みのボットは、小売注文管理のユースケース向けにインテント、サンプル発話、スロットタイプで構成され、Amazon Connect 問い合わせフローと統合されています。

構築済みの注文ステータス関連のソリューションにあるさまざまなコンポーネントを取り上げながら、いくつかのサンプル会話を見てみましょう。

次のサンプル会話では、顧客は注文ステータスを確認したいと考えています。エージェントは注文番号を入力してもらい、検証します。この情報を使用して注文状況を検索し、顧客に結果を返します。
(提供しているソリューションは英語のみです。この投稿にある会話は日本語に翻訳したときのイメージです。)

エージェント:Acme にお電話いただきありがとうございます。ご用件をお伺いします。

顧客:注文ステータスを確認したい。

エージェント:わかりました。13 桁の注文番号をご入力ください。

顧客:1234 56789 1234

エージェント:注文番号は 1234 56789 1234 でよろしいでしょうか?

顧客:はい

エージェント:少々お待ちください。ご注文は出荷されています。配送の状況を確認しますか?

顧客:はい

エージェント:少々お待ちください。荷物は最終配送施設に到着しました。2021 年 11 月 20 日に配送される予定です。

顧客:ありがとうございます。

次のサンプル会話では、顧客は注文の配送日を変更したいというシナリオです。エージェントは注文番号を取得し、注文のステータスを確認してから、配送日の変更は可能かを判断します。その次は、エージェントは要求された日付に配送日を変更します。

エージェント:Acme にお電話いただきありがとうございます。ご用件をお伺いします。

顧客:配送日を変更したい

エージェント:わかりました。13 桁の注文番号をご入力ください。

顧客:1234 56789 1234

エージェント:注文番号は 1234 56789 1234 でよろしいでしょうか?

顧客:はい

エージェント:わかりました。ご注文はまだ処理中ですので、配送日の変更は可能です。新しい配達日を教えていただけませんか。

顧客:11 月 20 日

エージェント: 2021 年 11 月 20 日ですね。確認のため、請求先住所の郵便番号をご入力ください。

顧客:12345

エージェント:ありがとうございます。配送日を変更しました。ご注文は 2021 年 11 月 20 日に配送される予定です。他に何かご用件ありますでしょうか?

顧客:ありがとう

RetailOrderManagementBot には、注文ステータスの取得、荷物の追跡、注文のキャンセルまたは変更、商品の返品、配送日の変更など、一般的な注文管理作業のインテントが含まれています。具体的には、次のインテントが含まれます。

  • GetOrderStatus – 注文番号と注文の現在のステータスを取得する。
  • TrackPackage – 注文番号を取得して、配送ステータスを返す。
  • CancelOrder – 注文番号を取得して、注文をキャンセルする。
  • ReturnItem – 注文番号を取得して、注文番号を確認後、返品処理を開始する。
  • RescheduleDelivery – 注文番号を取得して、配送日を変更する。
  • EndConversation – 「ありがとう、以上」などのユーザー入力に基づいて会話を終了する。
  • Fallback – 入力が設定されたインテントのいずれにも一致しない場合に呼び出される。

ボットの定義には、会話を管理するためのプロンプトとともに、完全な会話も含まれています。各ボットは、ビジネスロジックをシミュレートするコードを含む AWS Lambda 関数とも統合されています。Amazon Kendraとの統合により、会話中に自然言語の質問に答えることができます。

ソリューションアーキテクチャ

ソリューションの全体的なアーキテクチャを確認しましょう(次の図を参照)。

  • Amazon Lex ボットを使用して、顧客の認証、トランザクションの実行(「再配送の依頼」など)、または顧客に要求された情報の提供(「注文ステータスの取得」など)を行います。
  • AWS Lambda を使用して、バックエンドシステムへのアクセスをシミュレートし、トランザクションを完了するために必要なビジネスロジックを実行します。この投稿では、使用されるデータは DynamoDB テーブルに保存されます。
  • 顧客の質問に答えるために、ボットが情報を検索して応答できるように Amazon Kendra の検索インデックスを設定しています。
    構築済みのソリューションをAmazon Connect インスタンスにデプロイするか、ウェブサイトと統合することができます。

この投稿には、AWS リソースと、必要な AWS Identity and Access Management (IAM) ロールを含む AWS CloudFormation スタックを作成するテンプレートが含まれています。これらのリソースを利用することで、 Amazon Connect チャネルで小売注文管理用の構築済みのソリューションを使用できます。

前提条件

ソリューションをデプロイする前に、次の前提条件が必要です。

  • AWSアカウント
  • 次のAWSサービスへのアクセス権限:
    • Amazon Lex:ボットを作成
    • Lambda:ビジネスロジック
    • DynamoDB:テーブルを作成
    • IAM: ポリシーとロールを作成する権限
    • AWS CloudFormation:スタックを実行
  • オプションとして、Amazon Connectインスタンス(Amazon Connectにデプロイする場合)

構築済みのソリューションをデプロイする

次の手順でソリューションをデプロイします。

  1. Launch Stack をクリックして、選択したリージョンで AWS CloudFormation スタックの作成を起動します。
  2. スタックの名前 に、スタックの名前を入力します。この投稿では、次のスクリーンショットに示すように、retail-order-stack という名前を使用します。
  3. 次に、パラメータ セクションで、Amazon Lex ボット、DynamoDB テーブルの名前、および Amazon Connect インスタンスのARNを入力します。
  4. IAM リソースの作成を承認し、スタックの作成 をクリックします。数分後、スタックの作成は完了するはずです。作成されるコアリソースは以下のようになります。
    • Amazon Lex ボット – RetailOrderManagementBot
    • Lambda ファンクション – RetailOrderManagementBusinessLogic
    • DynamoDB テーブル – retail_order_table
    • Amazon Connect 問い合わせフロー – RetailOrderManagementContactFlow
    • IAM ロール – LexRoleLexImportRoleLambdaRoleConnectRole
  5. スタックの作成中に Connect の ARN を指定した場合、Amazon Connect ダッシュボードに移動し、ナビゲーションペインの ルーティング メニューで 電話番号 を選択します。
  6. 次に、電話番号を小売注文管理の問い合わせフローに関連付けます。電話番号が関連付けられると、ソリューションをテストする準備が整います。

ソリューションをテストする

サンプルデータを使用してボットをテストできます。Amazon Connect インスタンスにデプロイした場合、Amazon Connect の電話番号に電話をかけることで、ボットとやり取りすることができます。音声またはテキストを使用して、Amazon Lex V2 コンソールでソリューションを直接テストすることもできます。ボットとやり取りすると、会話に基づいて DynamoDB テーブルが更新されます。事前に構築された会話フローを試した後は、ボットをカスタマイズし、必要に応じてインテントを追加し、他のバックエンドシステムと統合できます。

小売注文管理:主な機能

顧客にシームレスな顧客体験を提供するために、事前に構築されたソリューションが提供されるいくつの機能を見ていきましょう。

リクエストをまたいで情報を保持する

カスタマーサービスコールの開始時に収集された情報は、後で会話の中で再び利用する場合があります。例えば、顧客が注文の状況を最初に確認したものの、その後に配送日の前倒しをリクエストすることがあります。事前に構築されたボットは、セッション属性を使用して注文番号を保持するため、会話の中で注文番号を再利用して配送日を変更できます。その後、担当者は変更する前に、注文番号を確認できます(「注文番号は 1234567891234 です。この注文番号の配送日を変更しますか。」)。

次のコードは、セッション属性を永続化するためのものです。

previous_intent = dialog.get_session_attribute(intent_request, 'previous_intent')

if previous_intent == 'GetOrderStatus':
  if order_number:
      dialog.set_session_attribute(intent_request, 'order_number', order_number)
      session_attributes = dialog.get_session_attributes(intent_request)

  order_number_from_session = dialog.get_session_attribute(
      intent_request, 'order_number')

  if order_number_from_session: 
      dialog.set_slot('OrderNumber', order_number_from_session, intent)
      order_number = order_number_from_session
          
  if order_number and not order_number_confirmation:
      previous_slot_to_elicit = dialog.get_previous_slot_to_elicit(
          intent_request)
      if previous_slot_to_elicit == 'OrderNumberConfirmation':
          if intent['confirmationState'] == 'Confirmed':
              dialog.set_slot('OrderNumberConfirmation', 'yes', intent)
              order_number_confirmation = 'yes'
          elif intent['confirmationState'] == 'Denied':
              dialog.set_slot('OrderNumberConfirmation', None, intent)
              prompt = prompts.get('OrderNumber1')
              return dialog.elicit_slot(
                  'OrderNumber', active_contexts, 
                  session_attributes, intent,
                  [{'contentType': 'PlainText', 'content': prompt}])
          elif intent['confirmationState'] == 'None':
              prompt = prompts.get(
                  'OrderNumberConfirmation1', order_number=order_number)
              return dialog.confirm_intent(
                  active_contexts, session_attributes, intent, 
                  [{'contentType': 'SSML', 'content': prompt}],
                  previous_dialog_action_type='ElicitSlot',
                  previous_slot_to_elicit='OrderNumberConfirmation')
      else:
          prompt = prompts.get(
              'OrderNumberConfirmation', order_number=order_number)
          return dialog.confirm_intent(
              active_contexts, session_attributes, intent, 
              [{'contentType': 'SSML', 'content': prompt}],
              previous_dialog_action_type='ElicitSlot',
              previous_slot_to_elicit='OrderNumberConfirmation')

フレーズを解析する

自由回答形式の質問への回答として、顧客はフレーズを使用して回答を提供できます。たとえば、払い戻しを申請する場合、ビジネスロジックを実行する前に、顧客がさまざまな理由 (「商品の破損」、「誤って注文した」、「サイズが間違った」など) を提供することがあります。さまざまな理由が考えられるため、正確な返品の理由を把握するのが難しい場合があります。事前構築されたソリューションでは、同義語を使用して、入力される内容を考えられる理由のリストにマップします。対話の戦略としては、ボットは最初に基本的な質問 (「返品の理由を教えてください」) を出します。その後、より規範的な質問を表示します (「すみませんが、より具体的な返品の理由を教えていただけませんか。例えば「不要」、「誤って注文した」、「商品が破損している」などと記述することができます」)。

次のスクリーンショットは、スロット定義と関連する対話の戦略を示しています。

if not order_return_reason and previous_slot_to_elicit == 'OrderReturnReason':
  prompt = prompts.get('re_elicit_order_return_reason')
  return dialog.elicit_slot(
    'OrderReturnReason', active_context, session_attributes, intent,
    [{'contentType': 'PlainText', 'content': prompt}]
  )

会話を終了する

事前に構築されたソリューションは、会話を終了するインテントを提供します。問い合わせを解決後、顧客は「ありがとう」、「以上」、「さようなら」などと言って会話を終了したいと考えられます。インテントはこれらのフレーズを認識し、終了メッセージ「ありがとうございました。」を出して会話を終了します。

コンタクトセンターの流れ

Amazon Connect 問い合わせフローの一部として、事前に構築されたソリューションをデプロイできます。顧客がコンタクトセンターに電話をかけた場合、処理する問い合わせフローは、その顧客がコールした電話番号に割り当てられた問い合わせフローになります。問い合わせフローでは、顧客の入力を取得するブロックを使用して Amazon Lex ボットを呼び出します。次の図は、問い合わせフローを示しています。

クリーンアップ

今後料金が発生しないように、作成したリソースをすべて削除してください。

  1. Amazon Lexボット
  2. Lambda関数
  3. DynamoDBテーブル
  4. Amazon Connectの問い合わせフロー
  5. IAMロール

結論

この投稿では、注文ステータスの取得、注文の追跡、商品の返品、配送日の変更など、小売注文管理のソリューションに一般的なカスタマーサポート作業の内容を確認しました。 構築済みのソリューションは、Amazon Connectを使用してすぐに導入できるコンタクトセンターの構成を提供しました。組織のニーズに合わせて会話フローを追加することで、ソリューションを簡単に拡張できます。 Amazon Lex for Retailは、一貫したブランド体験を提供し、顧客の行動に影響を与え、収益を増やすために使用できる構築済みのソリューションを提供します。ぜひ Amazon Lexで構築済みの小売ソリューションをお試しください!


著者について


Jaya Prakash Kommu
Smartbots.ai チームのテクノロジーリーダーです。次世代の会話型 AI インターフェースを構築する AI エンジニアとしてチームを管理しています。ボットを設計していないとき、サッカーを楽しんでいます。


Sandeep Srinivasan
は Amazon Lex チームのプロダクトマネージャーです。人間の行動に熱心な観察者として、彼は顧客体験に情熱を注いでいます。彼は起きている時間を、人、テクノロジー、そして未来の交差点で過ごしています。

翻訳は Solution Architect の Ming Yang が担当しました。原文はこちらです。