この投稿は、”Automate the customer service experience for flight reservations using Amazon Lex” を翻訳したものです。
世界中の多くの地域で空の旅が普及すると共に、航空業界のデジタル化は変革し続けています。航空会社は、空港でのタッチポイントを減らすように取り組んでいます。従業員と旅行者の間の物理的なやり取りの数を最小限に抑えるために、ベストプラクティスが導入されています。その結果、航空会社がスムーズ、且つシームレスなエクスペリエンスを提供するよう努めるにつれて、カスタマーサービスの変革が加速しています。顧客が航空会社のカスタマーサービスに連絡する理由は、予約、運航情報の照会、手荷物の追跡、頻繁に飛行機を利用する顧客のメンバーシップの管理などです。航空会社は、高い顧客満足度を確保するために、顧客がエンゲージメントの方法を選択できるように顧客中心のエクスペリエンスを提供したいと考えています。
この投稿では、Amazon Lex で構築済みのソリューションを使用して、航空券を予約する航空会社のカスタマーサービスを自動化し、より迅速な、より顧客と繋がったオムニチャネルのエクスペリエンスを提供する方法について説明します。
Amazon Lex は、音声をテキストに変換するための自動音声認識 (ASR) と、テキストの意図を認識する自然言語理解 (NLU) の高度な深層学習機能を提供します。これにより、非常に魅力的な顧客体験と、リアルな会話型インタラクションを備えたアプリケーションを構築できます。Amazon Lex for Travel は、構築済みのソリューションを提供しているため、顧客との会話型の体験をすばやく実現し、顧客満足度を高めることができます。構築済みのボットは、航空サービスのユースケース向けのインテント、サンプル発話、スロットタイプで構成され、Amazon Connect の問い合わせフローと統合されています。
構築済みのソリューションにあるさまざまなコンポーネントを取り上げながら、航空券の予約に関する会話の例を見てみましょう。 (提供しているソリューションは英語のみです。この投稿にある会話は日本語に翻訳したときのイメージです。)
このサンプル会話では、顧客は航空券を予約したいと考えています。エージェントは、出発都市、目的地の都市、同行者数、希望する出発時間など、旅行に関する詳細情報を収集します。その後、エージェントは利用可能な飛行機を探し、最適なオプションを提示し、航空券を予約します。
AirlinesServicesBot
には、航空券の予約、運航情報の確認、予約詳細の取得、予約した航空券の変更、キャンセルなど、一般的なカスタマーサービスアクティビティのインテントが含まれています。具体的には以下のインテントが含まれています。
ボットの定義には、会話を管理するためのプロンプトとともに、完全な会話も含まれています。各ボットは、ビジネスロジックをシミュレートするコードを含む AWS Lambda 関数とも統合されています。 Amazon Kendra との統合により、会話中に自然言語の質問に答えることができます。
ソリューションの全体的なアーキテクチャを確認しましょう(次の図を参照)。
この投稿には、AWS リソースと、必要な AWS Identity and Access Management (IAM) ロールを含む AWS CloudFormation スタックを作成するテンプレートが含まれています。これらのリソースを利用することで、Amazon Connect チャネルで構築済みのソリューションを使用できます。
ソリューションをデプロイする前に、次の前提条件が必要です。
次の手順でソリューションをデプロイします。
サンプルデータ を使用してボットをテストできます。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).daysif 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_wordsprompt = prompts.get('PreferredDepartureTime')return dialog.elicit_slot('PreferredDepartureTime', active_contexts, session_attributes, intent,[{'contentType': 'PlainText', 'content': prompt}])
Amazon Connect 問い合わせフローの一部として、事前に構築されたソリューションをデプロイできます。顧客がコンタクトセンターに電話をかけた場合、処理する問い合わせフローは、その顧客がコールした電話番号に割り当てられた問い合わせフローになります。問い合わせフローでは、顧客の入力を取得するブロックを使用して Amazon Lex ボットを呼び出します。次の図は、問い合わせフローを示しています。
今後料金が発生しないように、作成したリソースをすべて削除してください。
Amazon Lex for Travel は、顧客と繋がったシームレスなエクスペリエンスの提供を促進し、顧客のリクエストを迅速に対応するための構築済みのソリューションを提供します。この記事では、航空会社のお客様が航空券の予約、運航情報の取得、予約の更新などのタスクを自動化するためのソリューションについて確認しました。構築済みのソリューションは、Amazon Connect ですぐにデプロイできるコンタクトセンターの設定も提供します。ビジネスのニーズに合わせた会話フローを追加することで、ソリューションを簡単に拡張できます。AWS 上に構築することで、大手旅行会社はコストを抑えつつ、変化する顧客ニーズを迅速に対応できます。ぜひ Amazon Lex で構築済みの航空サービスソリューションをお試しください!
Jaya Prakash Kommu は Smartbots.ai チームのテクノロジーリーダーです。次世代の会話型 AI インターフェースを構築する AI エンジニアとしてチームを管理しています。ボットを設計していないとき、サッカーを楽しんでいます。
Sandeep Srinivasan は Amazon Lex チームのプロダクトマネージャーです。人間の行動に熱心な観察者として、彼は顧客体験に情熱を注いでいます。彼は起きている時間を、人、テクノロジー、そして未来の交差点で過ごしています。
翻訳は Solution Architect の Ming Yang が担当しました。原文はこちらです。