Amazon Web Services ブログ

Amazon Lex を使用して自動車保険の会話体験を構築する

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

自動車保険会社は、顧客のニーズを満たすためにデジタルイノベーションに焦点を当てています。 デジタルファーストのエンゲージメントは、カスタマイズされたカバレッジ、透明のある情報、およびシームレスなエクスペリエンスを提供します。 パンデミックのため、顧客サービスがが仮想チャネルにシフトしたことで、多くの顧客にとって従来のチャネルに戻る可能性は低いでしょう。 その変化は、オンラインでビジネスとやり取りしたい、テクノロジーに精通した顧客の増加により加速し続けています。 ライフサイクル全体を通じて、顧客は、特約の評価(購入前)、保険料の支払い(購入)、または保険金の請求(購入後)などを行う際に、迅速な対応を期待しています。 より迅速、且つパーソナライズされたサービスにより、契約者の満足度が向上し、保険代理店はより深い関係の構築に集中できます。

この投稿では、Amazon Lex で構築済みのソリューションを使用して、豊富でカスタマイズされた対話を構築し、保険会社が払込の処理、請求書の処理、契約の更新、および見積もりをより迅速に処理できるようにする方法について説明します。

ソリューション概要

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

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

エージェント:ABC 保険へようこそ。ご用件をお伺いします。

顧客:保険の見積もりを取りたい

エージェント:案内させていただきます。保険の種類を確認させてください。自動車保険ですか、火災保険ですか。

顧客:自動車保険

エージェント:見積もりを作成するために、いくつの情報を確認させてください。生年月日をご入力ください。

顧客:2001 年 1 月 1 日

エージェント:フルネームをご入力ください。

顧客:保険 太郎

エージェント:電話番号をご入力ください。

顧客:1234567890

エージェント:被保険者の住所の郵便番号をご入力ください。

顧客:12345

エージェント:お車のメーカーをご入力ください。

顧客:フォード

エージェント:お車のモデルをご入力ください。

顧客:Focus

エージェント:お車の年式をご入力ください。

顧客:2020

エージェント:予想年間走行距離をご入力ください。

顧客:10000 マイル

エージェント:見積もりを作成します。少々お待ちください。

エージェント:お伺いした内容に基づいて提案します。見積結果は 125 ドル/月、または 1200 ドル/年 になります。

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

上記のサンプル会話では、エージェントは最初に基本情報(保険の種類、生年月日、名前、電話番号)を収集します。次の会話は、追加情報(郵便番号と、メーカー、モデル、年式、走行距離などの車両の詳細)を収集することにより、顧客のリクエスト(見積もり)を対応できるようにします。最後に、エージェントはタスク(フォローアップを登録)を実行し、応答を提供します。 構築済みのソリューションには、Amazon Lex にデプロイできる自動車保険サービスの会話を自動化するためのボットが含まれています。

AutoInsuranceBot には、見積もりの取得、保険料の支払い、保険金の請求、代理店の検索、記名被保険者の追加または削除、車両の追加または削除など、一般的な保険契約者の活動のインテントが含まれています。 これには、次のインテントが含まれます。

  • GetPolicyQuote – 顧客の連絡先の詳細と、メーカー、モデル、年式、年間走行距離などの車両に関連する情報を収集して、見積もりを取得する。
  • MakePremiumPayment – 支払い金額、電話番号、日付などの情報を収集し、支払いを処理する。
  • PaymentByCard – 顧客のクレジットカード情報を収集して、支払いを行う。
  • MakeAClaim – 事故に関連する情報を収集し、保険金を請求する。
  • FindAnAdvisor – 場所と製品カテゴリに基づいて代理店を提案する。
  • AddDriver – 新しいドライバーの詳細を収集し、既存の契約にそのドライバーを追加する。
  • AddVehicle – 新しい車のメーカー、モデル、車両識別番号 (VIN) など、必要な詳細を収集し、既存の契約に追加する。
  • MakeModelYearAddVehicleMakeAClaim インテントへのフォローアップインテント。
  • EndConversation – 「さよなら」または「以上」などのユーザー入力に基づいて会話を終了する。
  • Fallback – 入力が設定されたインテントのいずれにも一致しない場合に呼び出される。

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

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

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

  • Amazon Lex ボットを使用して、データベースに保存されている情報を確認することにより、顧客を認証します。
  • AWS Lambda を使用して、バックエンドシステムへのアクセスをシミュレートし、認証機能を実行します。この投稿では、使用される保険の証券データは Amazon DynamoDB に保存されます。
  • 顧客が認証されると、メインの保険ボットでトランザクションを実行したり(例えば、支払いを実行)、顧客に要求された情報を提供したりします(例えば、「ゴールド免許の場合、どんな割引がありますか?」)。 Lambda を使用して、トランザクションを完了するために必要なビジネスロジックを実行します。
  • 顧客の質問に答えるために、ボットが情報を検索して応答できるように 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. スタックの名前 に、スタックの名前を入力します。この投稿では、次のスクリーンショットに示すように、 auto-insurance-solution という名前を使用します。
  3. 次に、パラメータセクションで、Amazon Lex ボット、DynamoDB テーブルの名前、および Amazon Connect インスタンスの ARN を入力します。
  4. IAM リソースの作成を承認し、スタックの作成 をクリックします。数分後、スタックの作成は完了するはずです。作成されるコアリソースは以下のようになります。
    • Amazon Lex ボットAutoInsurance
    • Lambda ファンクションAutoInsuranceBusinessLogic
    • DynamoDB テーブルauto_insurance_table
    • Amazon Connect 問い合わせフローAutoInsuranceContactFlow
    • IAM ロールLexRole, LexImportRole, LambdaRoleConnectRole
  5. スタックの作成中に Connect のARN を指定した場合、Amazon Connect ダッシュボードに移動し、ナビゲーションペインの ルーティング メニューで 電話番号 を選択します。
  6. 電話番号を自動車保険サービスの問い合わせフローに関連付けます。

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

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

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

自動車保険:主な機能

情報を再度聞き出すスロット、重要な情報の繰り返し、コンテキストとコンテキスト属性の使用、コンタクトセンターのフローなど、構築済みのソリューションによって提供されるいくつのコア機能を見ていきましょう。

情報を再度聞き出す

カスタマーサービスの会話では、エージェントは情報を収集するときに、回答を明確にする必要があります。例えば、保険金を請求する場合、最初の質問は「損害状況を教えてください。」を聞く可能性があります。 顧客が車両の部位で回答しない場合、フォローアップの質問はより規範的に聞く必要があります。「申し訳ありませんが、損害した車両の部位を教えてください。 例えば、フロントガラス、バンパー、ドアなどです。」 次のコードは、この会話フローの例を示しています。

if year_of_vehicle and not damaged_auto_component:
        previous_slot_to_elicit = dialog.get_previous_slot_to_elicit(
                                                                intent_request)
        if previous_slot_to_elicit == 'DamagedAutoComponent':
            '''
             User input did not get resolved to a slot value. So, re-eliciting the 
             same slot one more time with a guided prompt
            '''
            prompt = "Sorry, I did not follow that. Where did the damage occur? \
		You can say something like ‘to the windshield’, ‘to the bumper’ \
		or ‘to the door’ etc"
            return dialog.elicit_slot('DamagedAutoComponent',active_contexts,
                session_attributes,intent,
                [{'contentType': 'PlainText', 'content': prompt}])

応答を繰り返す

顧客は、質問を確認したり、重要な情報を取得したりするために、エージェントに簡単なリクエスト(「もう一度言ってくれませんか?」)を繰り返してもらいたい場合があります。構築済みのソリューションは、応答を保存し、顧客からの要求に応じて再生する機能を提供します。 AMAZON.RepeatIntent は、ユーザーの単語やフレーズに応答して、ボットの前のメッセージを繰り返します。 ボットの応答を繰り返すためのコードは次のとおりです。

if intent_name == 'Repeat':
    active_contexts = dialog.get_active_contexts(intent_request)
    session_attributes = dialog.get_session_attributes(intent_request)
    intent = dialog.get_intent(intent_request)
    previous_message = dialog.get_session_attribute(
        intent_request, 'previous_message')

    if previous_message:
        return dialog.elicit_intent(
            active_contexts, session_attributes, intent, 
            json.loads(previous_message))
    else:
        return dialog.elicit_intent(
            active_contexts, session_attributes, intent, 
            [{
                'contentType': 'PlainText', 
                'content': "I am sorry. I am unable to repeat that. \
                    Is there anything else I can help you with?"}])

…
…

# following is a dialog utility function 
def elicit_slot(slotToElicit, active_contexts, session_attributes, intent, messages):
    intent['state'] = 'InProgress'
    
    if not session_attributes:
        session_attributes = {}
    session_attributes['previous_message'] = json.dumps(messages)
    session_attributes['previous_dialog_action_type'] = 'ElicitSlot'
    session_attributes['previous_slot_to_elicit'] = slotToElicit
    
    return {
        'sessionState': {
            'sessionAttributes': session_attributes,
            'activeContexts': active_contexts,
            'dialogAction': {
                'type': 'ElicitSlot',
                'slotToElicit': slotToElicit
            },
            'intent': intent
        },
        'requestAttributes': {},
        'messages': messages
    }

フローを管理する

会話の流れは、トランザクションによって異なります。 例えば、保険料を支払う場合、支払い方法の選択に応じてフローが変化します。顧客が支払い方法としてクレジットカードを使用したい場合、エージェントは16桁のカード番号、有効期限、およびセキュリティコードを収集する必要があります。顧客が電子小切手を使用することを希望する場合、エージェントはアカウントIDと銀行コードを収集する必要があります。 構築済みのソリューションはコンテキストの管理機能を使用するため、このようなフローを管理できます。ボットは、支払いタイプ(カードまたは小切手)に応じて、PaymentByCard とPaymentByElectronicCheck の 2 つインテントを使用して支払いの詳細を収集します。 MakePremiumPayment インテントは、証券番号などの基本情報を取得し、支払いタイプに基づいて出力コンテキストを設定します。 次のユーザーの発話時に、入力コンテキスト属性に基づいて適切なインテントがトリガーされます。 次のコードは、コンテキストの管理方法を示しています。

# fulfilment of MakePremiumPaymentIntent      
if payment_amount:
    status, date, remaining_statement_balance, amount \
        = insurance_system.get_next_payment_details(
            customer_id)
    dialog.set_active_contexts(
        intent_request, 'CardPayment', 
        {
            'PhoneNumber':phone_number, 
            'DOB':dob, 
            'PaymentAmount':payment_amount,
            'PaymentMethod':payment_method,'Date':date
        },
        120, 10)
    dialog.set_active_contexts(
        intent_request, 'ElectronicCheckPayment', 
        {
            'PhoneNumber':phone_number,
            'DOB':dob,
            'PaymentAmount':payment_amount,
            'PaymentMethod':payment_method,'Date':date
        },
        120, 10)
    prompt = "Okay then, how would you like to pay, \
        by credit card, debit card, or electronic transfer?"
    return dialog.elicit_intent(
        active_contexts, session_attributes, intent,
        [{'contentType': 'PlainText', 'content': prompt}])

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

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

クリーンアップ

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

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

結論

Amazon Lex for Insurance は、顧客満足度を高めるために魅力的な会話体験の提供を加速するために使用できる構築済みのソリューションを提供します。 この投稿では、構築済みソリューションにある見積もりの提供、保険金の請求、保険料の支払いなどのアクティビティに関連する自動車保険のカスタマーサービス機能を確認しました。構築済みのソリューションは、Amazon Connectを使用してすぐに導入できるコンタクトセンターの構成を提供しました。組織のニーズに合わせて会話フローを追加することで、ソリューションを簡単に拡張できます。AWSは、保険会社がビジネスを最適化および革新し、顧客との関係を深めるためのアジャイルインフラストラクチャとして利用可能です。ぜひ Amazon Lex で構築済みの保険ソリューションをお試しください!


著者について


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


Harish Lanka
Smartbots.ai チームの会話型 AI スペシャリストです。彼は企業と話をし、問題点を理解してから、会話型AIを使用してソリューションを設計しています。 仕事以外のとき、彼は株を取引したり、サッカーを見たり、または読書しています。

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