Amazon Web Services ブログ

Amazon Lex を使用して航空券予約のカスタマーサービスを自動化する

この投稿は、”Automate the customer service experience for flight reservations using Amazon Lex” を翻訳したものです。

世界中の多くの地域で空の旅が普及すると共に、航空業界のデジタル化は変革し続けています。航空会社は、空港でのタッチポイントを減らすように取り組んでいます。従業員と旅行者の間の物理的なやり取りの数を最小限に抑えるために、ベストプラクティスが導入されています。その結果、航空会社がスムーズ、且つシームレスなエクスペリエンスを提供するよう努めるにつれて、カスタマーサービスの変革が加速しています。顧客が航空会社のカスタマーサービスに連絡する理由は、予約、運航情報の照会、手荷物の追跡、頻繁に飛行機を利用する顧客のメンバーシップの管理などです。航空会社は、高い顧客満足度を確保するために、顧客がエンゲージメントの方法を選択できるように顧客中心のエクスペリエンスを提供したいと考えています。

この投稿では、Amazon Lex で構築済みのソリューションを使用して、航空券を予約する航空会社のカスタマーサービスを自動化し、より迅速な、より顧客と繋がったオムニチャネルのエクスペリエンスを提供する方法について説明します。

ソリューション概要

Amazon Lex は、音声をテキストに変換するための自動音声認識 (ASR) と、テキストの意図を認識する自然言語理解 (NLU) の高度な深層学習機能を提供します。これにより、非常に魅力的な顧客体験と、リアルな会話型インタラクションを備えたアプリケーションを構築できます。Amazon Lex for Travel は、構築済みのソリューションを提供しているため、顧客との会話型の体験をすばやく実現し、顧客満足度を高めることができます。構築済みのボットは、航空サービスのユースケース向けのインテント、サンプル発話、スロットタイプで構成され、Amazon Connect の問い合わせフローと統合されています。

構築済みのソリューションにあるさまざまなコンポーネントを取り上げながら、航空券の予約に関する会話の例を見てみましょう。
(提供しているソリューションは英語のみです。この投稿にある会話は日本語に翻訳したときのイメージです。)

エージェント:予約システムをご利用いただき、誠にありがとうございます。ご用件をお伺いします。

顧客:航空券を予約したい

エージェント:マイレージ会員のお客様番号をご入力ください。

顧客:12345

エージェント:ありがとうございます。ご登録いただいているクレジットカード番号の下4桁をご入力ください。

顧客:1234

エージェント:今回のご予約は片道ですか、往復ですか。

顧客:片道

エージェント:出発都市はどこですか。

顧客:ダラス

エージェント:目的地はどこですか。

顧客:ニューヨーク

エージェント:搭乗日はいつですか。

顧客:12 月 1 日

エージェント:ご希望の出発時刻は何時ですか。

顧客:午後 5 時

エージェント:200 ドルで午後 5 時 30 分に出発する A123 便がございます。この便を予約しますか。

顧客:はい

エージェント:ご登録いただいているクレジットカード番号の下 4 桁は 1234 のカードで予約しますか。

顧客:はい

エージェント:12 月 1 日午後 5 時 30 分、ダラス発ニューヨーク行きの A123 便を予約しました。確認コードは 123 です。

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

このサンプル会話では、顧客は航空券を予約したいと考えています。エージェントは、出発都市、目的地の都市、同行者数、希望する出発時間など、旅行に関する詳細情報を収集します。その後、エージェントは利用可能な飛行機を探し、最適なオプションを提示し、航空券を予約します。

AirlinesServicesBot には、航空券の予約、運航情報の確認、予約詳細の取得、予約した航空券の変更、キャンセルなど、一般的なカスタマーサービスアクティビティのインテントが含まれています。具体的には以下のインテントが含まれています。

  • BookAFlight – 旅行と乗客の情報を取得し、航空券を予約する。
  • GetFlightStatus – 運行情報を取得し、現在のステータスを提供する。
  • CheckReservationDetails – 旅行と乗客の情報を取得し、予約した航空券の詳細を提供する。
  • RescheduleTrip – 旅行と乗客の情報を取得し、予約した航空券を変更する。
  • CancelFlightReservation– 旅行と乗客の情報を取得し、予約した航空券をキャンセルする。
  • GetFlightReservationReceipt– 旅行と乗客の情報を取得し、予約した航空券のレシートを取得する。
  • EndConversation – 「ありがとう、以上」などのユーザー入力に基づいて会話を終了する。
  • Fallback – 入力が設定されたインテントのいずれにも一致しない場合に呼び出される。

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

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

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

  • Amazon Lex ボットを使用して、顧客の認証、トランザクションの実行(例えば、予約した航空券のキャンセル)、または顧客に要求された情報の提供(例えば、運航情報の確認)を行います。
  • AWS Lambda を使用して、バックエンドシステムへのアクセスをシミュレートし、トランザクションを完了するために必要なビジネスロジックを実行します。この投稿では、使用されるデータは Amazon 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. スタックの名前 に、スタックの名前を入力します。この投稿では、次のスクリーンショットに示すように、airline-bot-solution という名前を使用します。
  3. 次に、パラメータセクションで、Amazon Lex ボット、DynamoDB テーブルの名前、および Amazon Connect インスタンスのARNを入力します。
  4. IAM リソースの作成を承認し、スタックの作成 をクリックします。数分後、スタックの作成は完了するはずです。作成されるコアリソースは以下のようになります。
    • Amazon Lex ボットAirlinesBot
    • Lambda ファンクションAirlinesBusinessLogic
    • DynamoDB テーブルairlines_table
    • Amazon Connect 問い合わせフローAirlinesContactFlow
    • IAM ロールLexRole, LexImportRole, LambdaRoleConnectRole
  5. スタックの作成中に ConnectのARN を指定した場合、Amazon Connect ダッシュボードに移動し、ナビゲーションペインの ルーティング メニューで 電話番号 を選択します。
  6. 電話番号を航空サービスの問い合わせフローに関連付けます。

    電話番号が関連付けられると、ソリューションをテストする準備が整います。

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

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

航空サービス:主な機能

不完全な日付情報の処理、フレーズから数値の解釈、コンタクトセンターのフローなど、構築済みのソリューションが提供されるいくつの機能を見ていきましょう。

不完全な日付情報の処理

「予約をキャンセルしたのはいつですか?」など、日付に関する質問を答える時、顧客は年を省略する場合があります。たとえば、「6 月 25 日」または曜日(「月曜日」)を回答します。Amazon Lex のデフォルトの挙動では、ボットはレスポンスを将来の日付として解釈します。同様に、2番目の例の回答は翌週の日付と解釈されます。構築済みのソリューションでは、トランザクションのビジネスロジックに基づいて、予約日などの場合、このような不完全な (または曖昧な) 日付を過去の日付として解決します。また、解釈された日付を顧客に知らせることで、暗黙的な確認も行っています。次のコードは、不完全な日付がどのように解釈されるかを示しています。

def resolve_underspecified_date(flight_booking_date):
    flight_booking_date = datetime.strptime(
        flight_booking_date, '%Y-%m-%d').date()
    today = date.today()
    if flight_booking_date <= today:
        return flight_booking_date
    else:
        number_of_days_in_future = (flight_booking_date - today).days
        if number_of_days_in_future > 7:
            return flight_booking_date.replace(year=flight_booking_date.year-1)
        else:
            return flight_booking_date-timedelta(days=7)

フレーズから数値の解釈

数値を収集しようとする質問(「同行者は何人ですか?」など)に対して、期待している明示的な数値の回答(「2」)の代わりに、説明するフレーズ(「妻と私」など)が回答される場合があります。構築済みのボットは、スロット値をキャプチャするために 2 段階のアプローチを取ることにより、このような記述的な回答を処理するようします。

設定には 2 つのスロットが含まれています。1 つはフレーズを理解するためのカスタムスロットタイプと、数字をキャプチャするための組み込みスロットタイプ AMAZON.Number のオプションのスロットです。最初のステップでは、ボットは各数字の類義語を含むフレーズを使用して解決を試みます (たとえば、「妻と私」は「2」にマップされます)。入力がフレーズで解釈されない場合、ボットはガイド付きプロンプトを再度表示します (「同行者は何人いますか?たとえば、3 人の同行者と回答できます」)。

次のスクリーンショットは、NumberofTravellers カスタムスロットタイプの値を示しています。

次のスクリーンショットは、1 つの数値をキャプチャするための 2 つのスロットを示しています。

次の Lambda 関数コードは、会話のフレーズから数字を解釈します。

number_of_travellers_in_words = dialog.get_slot(
    'NumberOfTravellersInWords', intent, preference='interpretedValue')
number_of_travellers = dialog.get_slot(
    'NumberOfTravellers', intent, preference='interpretedValue')

if departure_date and not number_of_travellers_in_words:
    previous_slot_to_elicit = dialog.get_previous_slot_to_elicit(
        intent_request)
    if previous_slot_to_elicit == 'NumberOfTravellersInWords':
        prompt = prompts.get('NumberOfTravellers')
        return dialog.elicit_slot(
            'NumberOfTravellers', active_contexts, 
            session_attributes, intent,
            [{'contentType': 'PlainText', 'content': prompt}])
    else:
        prompt = prompts.get('NumberOfTravellersInWords')
        return dialog.elicit_slot(
                'NumberOfTravellersInWords', active_contexts, 
                session_attributes, intent,
                [{'contentType': 'PlainText', 'content': prompt}])
                
                
if number_of_travellers or number_of_travellers_in_words \
        and not preferred_departure_time:
    if not number_of_travellers:
        number_of_travellers = number_of_travellers_in_words
        prompt = prompts.get(
            'PreferredDepartureTime')
        return dialog.elicit_slot(
            'PreferredDepartureTime', active_contexts, 
            session_attributes, intent,
            [{'contentType': 'PlainText', 'content': prompt}])

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

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

クリーンアップ

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

  • Amazon Lex ボット
  • Lambda 関数
  • DynamoDB テーブル
  • Amazon Connect の問い合わせフロー
  • IAMロール

結論

Amazon Lex for Travel は、顧客と繋がったシームレスなエクスペリエンスの提供を促進し、顧客のリクエストを迅速に対応するための構築済みのソリューションを提供します。この記事では、航空会社のお客様が航空券の予約、運航情報の取得、予約の更新などのタスクを自動化するためのソリューションについて確認しました。構築済みのソリューションは、Amazon Connect ですぐにデプロイできるコンタクトセンターの設定も提供します。ビジネスのニーズに合わせた会話フローを追加することで、ソリューションを簡単に拡張できます。AWS 上に構築することで、大手旅行会社はコストを抑えつつ、変化する顧客ニーズを迅速に対応できます。ぜひ Amazon Lex で構築済みの航空サービスソリューションをお試しください!


著者について


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


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

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