Amazon Connectの評価フォームをAWS CloudFormationで作成してみた
はじめに
Amazon Connectのパフォーマンス評価機能では、事前に作成した評価フォームを利用して、エージェントが顧客対応完了後に、会話内容を機械学習によるスコアリングで自動評価し、評価スコアを算出します。
これにより管理者(評価者)は、スコアの低いコンタクトを対応したエージェントに対して、迅速にフォローアップを行うことができます。
以前、生成AIを活用した自動評価フォームを手動で作成し、自動評価の動作を検証しました。
複数のインスタンスに同じ評価フォームを効率的にデプロイしたい場面があったため、今回は、同じ内容の評価フォームをAWS CloudFormationで作成してみます。
CloudFormationテンプレート
テンプレートは以下のとおりです。
AWSTemplateFormatVersion: '2010-09-09'
Description: 'Amazon Connect Evaluation Form- Auto-Evaluation Enabled Version'
Parameters:
ConnectInstanceArn:
Type: String
Description: 'Amazon Connect Instance ARN'
Resources:
ConnectEvaluationForm:
Type: AWS::Connect::EvaluationForm
Properties:
InstanceArn: !Ref ConnectInstanceArn
AutoEvaluationConfiguration:
Enabled: TRUE
Title: 'カスタマーサービス評価フォーム'
Description: 'カスタマーサービス部門のエージェント向け評価フォーム(自動評価対応)'
Status: DRAFT
# スコアリング戦略
ScoringStrategy:
Mode: QUESTION_ONLY
Status: ENABLED
# 評価フォーム項目
Items:
# セクション1: 挨拶・開始対応(重み: 25%)
- Section:
Title: 'セクション1: 挨拶・開始対応'
RefId: 'Section1'
Instructions: 'このセクションでは、エージェントが顧客との最初の接点でプロフェッショナルで温かい印象を与えることができたかを評価します。'
Weight: 25.0
Items:
# 質問1.1: 適切な挨拶
- Question:
Title: 'エージェントは適切な挨拶を行いましたか?'
Instructions: 'エージェントは通話開始時に挨拶、会社名、名前、用件確認を行う必要があります。'
RefId: 'Q1_1'
QuestionType: SINGLESELECT
QuestionTypeProperties:
SingleSelect:
Options:
- RefId: 'Q1_1_Yes'
Text: 'はい'
Score: 10
- RefId: 'Q1_1_No'
Text: 'いいえ'
Score: 0
# 質問1.2: 名前の紹介
- Question:
Title: 'エージェントは自分の名前を明確に名乗りましたか?'
Instructions: 'エージェントが挨拶時に自分の名前を顧客に分かりやすく伝えたかを評価してください。'
RefId: 'Q1_2'
QuestionType: SINGLESELECT
QuestionTypeProperties:
SingleSelect:
Options:
- RefId: 'Q1_2_Clear'
Text: '明確に名乗った'
Score: 10
- RefId: 'Q1_2_Unclear'
Text: '不明瞭だった'
Score: 5
- RefId: 'Q1_2_None'
Text: '名乗らなかった'
Score: 0
# セクション2: 顧客対応・問題解決(重み: 30%)
- Section:
Title: 'セクション2: 顧客対応・問題解決'
RefId: 'Section2'
Instructions: 'このセクションでは、エージェントの技術的能力と問題解決スキルを評価します。'
Weight: 30.0
Items:
# 質問2.1: 問題解決能力
- Question:
Title: 'エージェントは顧客の問題を正確に理解し解決できましたか?'
Instructions: 'エージェントが顧客の問題を正確に復唱し、適切な解決策を提示できたかを評価してください。顧客の問題を間違って理解した場合は「理解不足」、解決策が提示されなかった場合は「理解したが未解決」とします。'
RefId: 'Q2_1'
QuestionType: SINGLESELECT
QuestionTypeProperties:
SingleSelect:
Options:
- RefId: 'Q2_1_Complete'
Text: '完全に解決'
Score: 10
- RefId: 'Q2_1_Partial'
Text: '部分的に解決'
Score: 7
- RefId: 'Q2_1_Understood'
Text: '理解したが未解決'
Score: 3
- RefId: 'Q2_1_Poor'
Text: '理解不足'
Score: 0
# 質問2.2: 中断の回数
- Question:
Title: '通話中の中断回数を評価してください'
Instructions: '通話中にエージェントが顧客の発言を遮った回数を評価してください。'
RefId: 'Q2_2'
QuestionType: NUMERIC
QuestionTypeProperties:
Numeric:
MinValue: 0
MaxValue: 1000
Options:
- MinValue: 0
MaxValue: 2
Score: 10
- MinValue: 2
MaxValue: 5
Score: 7
- MinValue: 5
MaxValue: 10
Score: 3
- MinValue: 10
MaxValue: 1000
Score: 0
Automation:
PropertyValue:
Label: "NUMBER_OF_INTERRUPTIONS"
# 質問2.3: 解決策の説明
- Question:
Title: 'エージェントは解決策を顧客に分かりやすく説明しましたか?'
Instructions: 'エージェントが提案した解決策について、専門用語を避けて顧客が理解しやすい言葉で説明したかを評価してください。'
RefId: 'Q2_3'
QuestionType: SINGLESELECT
QuestionTypeProperties:
SingleSelect:
Options:
- RefId: 'Q2_3_Clear'
Text: '非常に分かりやすく説明'
Score: 10
- RefId: 'Q2_3_Adequate'
Text: 'ある程度分かりやすく説明'
Score: 7
- RefId: 'Q2_3_Unclear'
Text: '説明が不明瞭'
Score: 3
- RefId: 'Q2_3_None'
Text: '説明なし'
Score: 0
# セクション3: コミュニケーション・感情管理(重み: 25%)
- Section:
Title: 'セクション3: コミュニケーション・感情管理'
RefId: 'Section3'
Instructions: 'このセクションでは、エージェントの対人コミュニケーション能力を評価します。'
Weight: 25.0
Items:
# 質問3.1: 言葉遣い
- Question:
Title: 'エージェントは顧客に対して丁寧で適切な言葉遣いで対応しましたか?'
Instructions: 'エージェントの言葉遣いを通話全体を通して評価してください。'
RefId: 'Q3_1'
QuestionType: SINGLESELECT
QuestionTypeProperties:
SingleSelect:
Options:
- RefId: 'Q3_1_Always'
Text: '常に丁寧'
Score: 10
- RefId: 'Q3_1_Mostly'
Text: '概ね丁寧'
Score: 7
- RefId: 'Q3_1_Sometimes'
Text: '時々不適切'
Score: 3
- RefId: 'Q3_1_Poor'
Text: '不適切'
Score: 0
# 質問3.2: 顧客感情評価
- Question:
Title: '顧客の感情状態を評価してください'
Instructions: '通話中の顧客の感情状態を評価してください(-5から5の範囲で入力)。'
RefId: 'Q3_2'
QuestionType: NUMERIC
QuestionTypeProperties:
Numeric:
MinValue: -5
MaxValue: 5
Options:
- MinValue: -5
MaxValue: -3
Score: 0
- MinValue: -3
MaxValue: -1
Score: 3
- MinValue: -1
MaxValue: 1
Score: 7
- MinValue: 1
MaxValue: 5
Score: 10
Automation:
PropertyValue:
Label: "OVERALL_CUSTOMER_SENTIMENT_SCORE"
# セクション4: 効率性・プロセス遵守(重み: 15%)
- Section:
Title: 'セクション4: 効率性・プロセス遵守'
RefId: 'Section4'
Instructions: 'このセクションでは、エージェントの業務効率性を評価します。'
Weight: 15.0
Items:
# 質問4.1: プロセス遵守
- Question:
Title: 'エージェントは必要な手順やプロセスを遵守しましたか?'
Instructions: 'エージェントが以下の必須手順を実行したかを確認してください:1) 顧客の問題を詳しく聞き取り内容を復唱確認、2) 解決策を分かりやすく説明、3) 解決策について顧客が理解したか確認、4) 「他にご不明な点はございませんか」等の最終確認。これらの手順をすべて実行した場合のみ「完全に遵守」とします'
RefId: 'Q4_1'
QuestionType: SINGLESELECT
QuestionTypeProperties:
SingleSelect:
Options:
- RefId: 'Q4_1_Complete'
Text: '完全に遵守'
Score: 10
- RefId: 'Q4_1_Mostly'
Text: '概ね遵守'
Score: 7
- RefId: 'Q4_1_Partial'
Text: '部分的に遵守'
Score: 3
- RefId: 'Q4_1_None'
Text: '未遵守'
Score: 0
# セクション5: 通話終了・満足度確認(重み: 5%)
- Section:
Title: 'セクション5: 通話終了・満足度確認'
RefId: 'Section5'
Instructions: 'このセクションでは、通話終了時の適切な処理を評価します。'
Weight: 5.0
Items:
# 質問5.1: 顧客満足度確認
- Question:
Title: 'エージェントは通話終了前に顧客の満足度を確認しましたか?'
Instructions: 'エージェントが通話終了前に「問題は解決されましたか」「他にご質問はございませんか」などの満足度確認を行ったかを評価してください。'
RefId: 'Q5_1'
QuestionType: SINGLESELECT
QuestionTypeProperties:
SingleSelect:
Options:
- RefId: 'Q5_1_Confirmed'
Text: '明確に満足度を確認'
Score: 10
- RefId: 'Q5_1_Partial'
Text: '部分的に確認'
Score: 5
- RefId: 'Q5_1_None'
Text: '確認なし'
Score: 0
Outputs:
EvaluationFormArn:
Description: 'ARN of the created evaluation form'
Value: !GetAtt ConnectEvaluationForm.EvaluationFormArn
Export:
Name: !Sub '${AWS::StackName}-EvaluationFormArn'
評価フォームのステータスはACTIVE
ではなくDRAFT
(下書き)に設定しています。
Resources:
ConnectEvaluationForm:
Type: AWS::Connect::EvaluationForm
Properties:
~中略~
Status: DRAFT
これは、後述する2点の設定をCloudFormationでは設定できないため、手動で修正した後にアクティブ化して利用可能にする必要があるためです。
スタックの作成
上記のテンプレートを使用してCloudFormationスタックを作成します。
パラメータConnectInstanceArn
には、対象のAmazon ConnectインスタンスのARNを指定してください。
スタックの作成が完了しました。
作成された評価フォームの確認
CloudFormationで作成された評価フォームを確認してみます。
CloudFormationで作成した評価フォームは、前回の生成AIを活用した評価フォームとほぼ同じ構成で作成できました。
ただし、CloudFormationでは以下の2つの設定に対応していないため、手動での設定が必要です。
- 生成AIによる質問の自動化オプション
- 「評価の自動提出を有効化」の設定
1. 生成AIによる質問の自動化オプション
評価フォームの各質問に対して、以下の自動化オプションが選択できます。
- 自動化なし: 評価者が手動で回答する設定
- Contact Lensカテゴリによる自動化: 事前に定義したContact Lensのルールとカテゴリを使用した問い合わせの自動分類・自動アクション
- メトリクスによる自動化: 通話時間、保留時間、感情スコアなどのメトリクスを使用した自動評価(数値質問用)
- 生成AIによる自動化: AIが会話内容を分析して自動評価
そのうち、CloudFormationでは、生成AIを使った自動評価の設定はサポートされていません。
一方で、Contact Lensカテゴリやメトリクスによる自動化のオプションは設定可能です。
# 質問3.2: 顧客感情評価
- Question:
Title: '顧客の感情状態を評価してください'
Instructions: '通話中の顧客の感情状態を評価してください(-5から5の範囲で入力)。'
RefId: 'Q3_2'
QuestionType: NUMERIC
QuestionTypeProperties:
Numeric:
~中略~
Automation:
PropertyValue:
Label: "OVERALL_CUSTOMER_SENTIMENT_SCORE"
テンプレートでの設定状況
今回のテンプレートでは、自動化オプションが以下のように設定しています。
メトリクスによる自動化(手動変更不要)
- 質問2.2「中断の回数」→
NUMBER_OF_INTERRUPTIONS
- 質問3.2「顧客感情評価」→
OVERALL_CUSTOMER_SENTIMENT_SCORE
自動化なし(手動変更が必要)
- 質問1.1「適切な挨拶」
- 質問1.2「名前の紹介」
- 質問2.1「問題解決能力」
- 質問2.3「解決策の説明」
- 質問3.1「言葉遣い」
- 質問4.1「プロセス遵守」
- 質問5.1「顧客満足度確認」
生成AI自動化への手動変更手順
上記の7つの質問それぞれについて「オートメーション」タブを選択し、「自動化なし」から「生成AI」に変更する必要があります。GUIベースで容易に変更可能です。
参考:Contact Lensカテゴリによる自動化
今回のテンプレートでは使用していませんが、Contact Lensカテゴリによる自動化もCloudFormationで設定可能です。
Contact Lensカテゴリは、Amazon Connect Contact Lensの「ルール」で作成するカテゴリです。
例えば、通話中、「動きません」というキーワードを検出した場合に「製品の故障」カテゴリを付与し、このカテゴリの有無に基づいて自動評価を行うことができます。
以下の記事では、会話内容で「動きません」というワードに対して「problem_with_products」というカテゴリを設定するルール作成方法を紹介しています。
設定方法
- Contact Lensのルールで事前にカテゴリを作成(例:「problem_with_products」)
- 評価フォームの質問で「オートメーション」タブを選択し、「Contact Lensカテゴリ」を選択する。これによって、そのカテゴリの有無に基づいて自動評価が実行されます
この方法により、会話内容から特定のパターンを検出して自動的に評価を行うことができます。
2. 「評価の自動提出を有効化」の設定
「評価の自動提出を有効化」を有効にすると、顧客対応完了後に、自動評価が実行されるようになります。
ただし、評価フォームの全ての質問に自動化オプション(生成AI、Contact Lensカテゴリ、またはメトリクス)が設定されていることが前提条件です。
一つでも「自動化なし」のオプションが選択されている質問があれば、有効化できません。
CloudFormationでは、以下のようにAutoEvaluationConfiguration
プロパティが提供されていますが、現時点では正常に動作しないため、手動での設定が必要です。
(メトリクスによる自動化のみの質問でスタックを作成しても、実際には有効化されませんでした。今後、設定できるように改善されると推測します。)
Resources:
ConnectEvaluationForm:
Type: AWS::Connect::EvaluationForm
Properties:
InstanceArn: !Ref ConnectInstanceArn
AutoEvaluationConfiguration:
Enabled: TRUE
「評価の自動提出を有効化」の手動設定手順
生成AIへの変更完了後、完全な自動評価を実現するには以下の手順を実行します。
- 評価フォーム内の全ての質問に自動化(生成AI、Contact Lensカテゴリ、またはメトリクス)が設定されていることを確認
- 評価フォームの編集画面で「評価の自動提出を有効化」トグルをオンに設定
最後に評価フォームを有効化します。
- 評価フォームを有効化
- 「このフォームを使用して、どの連絡先が自動的に評価されるかを指定するルールを作成する次のステップに進みますか?」と表示されるので、ルールを作成
- エージェントが顧客対応完了後に自動評価するルールが必要です。ルールの作成方法は、以下の記事を参照してください。
- エージェントが顧客対応完了後に自動評価するルールが必要です。ルールの作成方法は、以下の記事を参照してください。
まとめ
Amazon Connectの評価フォームをAWS CloudFormationで作成することで、再利用性と一貫性を持った評価フォームの管理が可能になります。
ただし、現時点では以下の制限があることに注意が必要です。
- 生成AIによる自動化オプションの設定はCloudFormationでサポートされていない
- 「評価の自動提出を有効化」の設定が動作しない
これらの設定については手動対応が必要ですが、評価フォームの基本構造はCloudFormationで効率的に管理できます。
特に、環境別に複数のAmazon Connectインスタンスで同じ評価基準を利用したい場合には、CloudFormationテンプレートの活用をおすすめします。