コンタクトセンターで重要な機能の1つとしてウォールボードがあります。ウォールボードは、エージェントやスーパバイザが必要な情報を集約したリアルタイムダッシュボードです。通常、ウォールボードはコンタクトセンターに大画面に表示され、コンタクトセンターサービスや他のソースから取得した情報を表示します。また多くのお客様では、いくつかの異なるウォールボードフォーマットを使い分け、コンタクトセンター全体に関連する情報だけでなく、エージェントに必要な固有の情報を表示しています。
このラボでは、Amazon Connect のウォールボードとして使用できるサーバーレスアプリケーションを構築する方法を解説します。エージェントイベント、リアルタイムメトリクス/履歴メトリクスに関するデータを収集し、ブラウザで所定のフォーマットにレンダリングします。同じデータセットを使用して複数のウォールボード形式を同時にサポートし、関連ソースからデータを追加することもできます。
利用するコンポーネントは以下の通りです。
テンプレートをデプロイするには、次の手順に従います。
ウェブページをレンダリングする Lambda 関数は、すべての異なるデータをまとめ、値を HTML テーブルとして返します。Lambda 関数の出力は HTML テーブルのみであり、完全な HTML ページではありません。これにより、ユーザーの作成した任意の Web ページ内からAPI Gateway を呼び出し、テーブルを挿入して表示することが可能です。
WallboardTable
環境変数で指定します。ウォールボードの各セルに表示される情報は、次のいずれかになります。複数のキューと Amazon Connect インスタンスから情報を表示することも可能ですので、コンタクトセンター全体にまたがるウォールボードを作成できます。
Amazon Connect からリアルタイムまたは履歴データを収集するには、Amazon Connect ARN、キュー ARN、および必要なメトリックを指定する必要がありますので、これらを準備します。
Amazon Connect インスタンスの概要を表示して、コンソールでインスタンス ARN をメモしておいてください。
キュー ARN を取得するために、管理者として Amazon Connect インスタンスにログインし、キューを開き、追加のキュー情報の表示から ARN をメモしておいてくださいす。
まず、Amazon Connect インスタンス内の1つのキューを表示するサンプルについて確認していきます。 リアルタイムデータの場合、ウォールボードをレンダリングする Lambda 関数は、Connect real-time data API をポーリングします。ウォールボードインスタンスが多数存在する場合を考慮し、API コールの回数を制限するために、データをキャッシュするタイマーがコード内に存在します(デフォルトでは5秒に設定されています)。Lambda 関数の「realtimeTimeout」変数を変更することで、API 呼び出しの頻度を変更できます。 履歴データは、個別の Lambda 関数によって毎分収集されます。この場合の「履歴」とは、集計日のデータを意味します。データは、ウォールボードテーブルをレンダリングする Lambda 関数によって DynamoDB テーブルに格納されます。
Agents Available | Contacts in Queue | Longest Waiting | Contacts Handled Today | Abandoned Calls | Average Handle Time |
---|---|---|---|---|---|
5 | 3 | 45 | 300 | 4 | 129 |
この特定のウォールボードでは、以下で説明するツールを使用して DynamoDB テーブルにインポートするファイルを作成します。
ここに示す定義ファイルは、静的テキストと、リアルタイムメトリックと履歴メトリックが混在した6列2行のウォールボードを作成します。 データソースとなる Amazon Connect インスタンスを指定するため、インスタンス ARN の一部(ID)とキュー ARN の一部(ID)にを指定します。
サンプルウォールボードを構築するために、以下のテキストを任意のファイル名(例:wallboard-sample1.txt
)で保存します。このとき、以下の「xxxxxxxx-xxxx-xxxxx-xxxxxxxx」をメモしておいたインスタンス ID に置き換え、「yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy」をキュー ID に置き換えます。
WallboardTemplateFormatVersion: 1
Description: Simple Wallboard Example
Identifier: simplewallboard
Defaults:
TextColor: black
BackgroundColor: white
TextSize: 15
Sources:
- Source: AgentsAvailable
Description: Agents available in basic queue (real-time)
Reference: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx:yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy:AGENTS_AVAILABLE
- Source: ContactsInQueue
Description: Contacts waiting in basic queue (real-time)
Reference: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx:yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy:CONTACTS_IN_QUEUE
- Source: LongestWaiting
Description: Longest waiting contact in basic queue (real-time)
Reference: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx:yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy:OLDEST_CONTACT_AGE
- Source: ContactsHandled
Description: Number of contacts handled today (historical)
Reference: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx: yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy:CONTACTS_HANDLED
- Source: AbandonedCalls
Description: Abandoned calls today (historical)
Reference: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx:yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy:CONTACTS_ABANDONED
- Source: AverageCallTime
Description: Average time to handle a call (historical)
Reference: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx:yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy:HANDLE_TIME
Rows:
- Row: 1
Cells:
- Cell: 1
Text: Agents Available
BackgroundColor: lightgreen
TextSize: 20
- Cell: 2
Text: Contacts in Queue
BackgroundColor: lightgreen
TextSize: 20
- Cell: 3
Text: Longest Waiting
BackgroundColor: lightgreen
TextSize: 20
- Cell: 4
Text: Contacts Handled Today
BackgroundColor: lightgreen
TextSize: 20
- Cell: 5
Text: Abandoned Calls
BackgroundColor: lightgreen
TextSize: 20
- Cell: 6
Text: Average Handle Time
BackgroundColor: lightgreen
TextSize: 20
- Row: 2
Cells:
- Cell: 1
Reference: AgentsAvailable
TextColor: blue
- Cell: 2
Reference: ContactsInQueue
TextColor: blue
- Cell: 3
Reference: LongestWaiting
TextColor: blue
- Cell: 4
Reference: ContactsHandled
TextColor: blue
- Cell: 5
Reference: AbandonedCalls
TextColor: blue
- Cell: 6
Reference: AverageCallTime
TextColor: blue
このファイルには、次の情報が含まれます。
ウォールボード定義ファイルを準備したら、DynamoDB にインポートします。
wallboard-import.py
と、ウォールボード定義ファイル(例:wallboard-sampl1.txt
)をアップロードします。wallboard-import.py に実行権限を付与します。
chmod 777 wallboard-import.py
wallboard-import.py を使ってウォールボード定義ファイルをDynamoDBにインポートします。
./wallboard-import.py [ウォールボード定義ファイル]
同じ Amazon Connect インスタンスを参照して表示するウォールボードが複数ある場合は、複数の定義ファイルをインポートして DynamoDB テーブルに共存させることができます。
CloudFormation のスタック作成後にコピーした APIGatewayURL は、以下のような形式です。
https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/wallboard
この URL はインポートした定義ファイルの Identifier をパラメータとして付与する必要があるため、そのまま開いても以下のようなエラーとなります。
<div class="error">No wallboard name specified</div>
テストとして、サンプルウォールボードの定義ファイルをインポートした後、Wallboard パラメータに Identifier(simplewallboard) を指定して、ページを開きます。
https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/wallboard?Wallboard=simplewallboard
正常に実行されると以下のような HTML テーブルが応答されます。data は各自の通話状況で異なります。
<table label="ConnectWallboardsimplewallboard" style="border: 1px solid black; border-collapse: collapse; margin-left: auto; margin-right: auto; text-align: center; color: black; background: white; font-size: 15px; font-family: sans-serif;" class="wallboard-simplewallboard">
<tr><td label="R1C1" class="R1C1" style="border: 1px solid black; padding: 5px; font-size: 20px; background: lightgreen;"><div class="text">Agents Available</div></td><td label="R1C2" class="R1C2" style="border: 1px solid black; padding: 5px; font-size: 20px; background: lightgreen;"><div class="text">Contacts in Queue</div></td><td label="R1C3" class="R1C3" style="border: 1px solid black; padding: 5px; font-size: 20px; background: lightgreen;"><div class="text">Longest Waiting</div></td><td label="R1C4" class="R1C4" style="border: 1px solid black; padding: 5px; font-size: 20px; background: lightgreen;"><div class="text">Contacts Handled Today</div></td><td label="R1C5" class="R1C5" style="border: 1px solid black; padding: 5px; font-size: 20px; background: lightgreen;"><div class="text">Abandoned Calls</div></td><td label="R1C6" class="R1C6" style="border: 1px solid black; padding: 5px; font-size: 20px; background: lightgreen;"><div class="text">Average Handle Time</div></td></tr>
<tr><td label="R2C1" class="R2C1" style="border: 1px solid black; padding: 5px; color: blue;"><div class="data">0</div></td><td label="R2C2" class="R2C2" style="border: 1px solid black; padding: 5px; color: blue;"><div class="data">0</div></td><td label="R2C3" class="R2C3" style="border: 1px solid black; padding: 5px; color: blue;"><div class="data">0</div></td><td label="R2C4" class="R2C4" style="border: 1px solid black; padding: 5px; color: blue;"><div class="data">1</div></td><td label="R2C5" class="R2C5" style="border: 1px solid black; padding: 5px; color: blue;"><div class="data">2</div></td><td label="R2C6" class="R2C6" style="border: 1px solid black; padding: 5px; color: blue;"><div class="data">13</div></td></tr>
</table>
ウォールボードを表示するには、このテーブルを埋め込んだウェブページを作成する必要があります。このラボでは簡単なサンプルとしてこちらのウォールボードサンプルを使用します。
API_URI
に API Gatewayを呼び出す URL を指定します。この URL は上記のテストで使用したものと同じです。RefreshInterval
に更新間隔をミリ秒単位で設定します。これは API Gateway 経由で新しいデータを照会する頻度を指定します。HTML は Web サーバにアップロードする必要はなく、ローカルで実行して動作を確認することが可能です。
ウェブページを開いたら、CCP を開いていくつかのテスト動作を行いつつ、ウォールボードの表示内容を確認してください。
上で定義した数値データポイントの出力を取り出し、それらに対して簡単な計算を実行した結果をウォールボードに表示することもできます。これを行うためのウォールボード構成ファイルは、次のようになります。
WallboardTemplateFormatVersion: 1
Description: Calculation Wallboard
Identifier: calculations
Sources:
- Source: BasicAgentsAvailable
Description: Agents available in basic queue (real-time)
Reference: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx:yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy:AGENTS_AVAILABLE
- Source: AdvancedAgentsAvailable
Description: Agents available in advanced queue (real-time)
Reference: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx:zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz:AGENTS_AVAILABLE
Calculations:
- Calculation: TotalAgentsAvailable
Formula: BasicAgentsAvailable+AdvancedAgentsAvailable
- Calculation: ThisMakesNoSense
Formula: BasicAgentsAvailable*AdvancedAgentsAvailable+24
Rows:
- Row: 1
Cells:
- Cell: 1
Text: Basic agents available
Reference: BasicAgentsAvailable
- Cell: 2
Text: Advanced agents available
Reference: AdvancedAgentsAvailable
- Row: 2
Cells:
- Cell: 1
Text: TotalAgentsAvailable
Reference: TotalAgentsAvailable
- Cell: 2
Text: Silly calculation to prove a point
Reference: ThisMakesNoSense
この例では、リアルタイムメトリックからいくつかのデータを収集します。(データは、履歴メトリクスなど、どこからでもソースでき、作成した Lambda 関数によって DynamoDB テーブルに注入することもできます)。 次に、それらに対していくつかの基本的な計算を実行し、いくつかのテキストを含むいくつかのセルに結果を表示します。 使用可能なエージェントを乗算する計算は「実際の」指標ではありませんが、必要な単純な数学的計算を実行できることが証明されています。計算からの出力はすべて整数です。 この例では、2つの異なるキューからデータが取得されていることを示しています。
特定の値がしきい値を超えた場合に、セルの背景色を変更できます。これにより、特定の値が警告のしきい値を超えたときに、行全体を黄色にすることができます。 しきい値の設定方法の例を次に示します。
WallboardTemplateFormatVersion: 1
Description: Threshold Example
Identifier: thresholdexample
Defaults:
WarningBackgroundColor: yellow
AlertBackgroundColor: red
Thresholds:
- Threshold: AgentThreshold
Reference: AgentsAvailable
WarnBelow: 10
AlertBelow: 5
- Threshold: CallThreshold
Reference: CallsWaiting
WarnAbove: 20
AlertAbove: 30
Rows:
- Row: 1
Cells:
- Cell: 1
Text: Agents Available
Reference: AgentsAvailable
ThresholdReference: AgentThreshold
- Cell: 2
Text: Calls
Reference: CallsWaiting
ThresholdReference: CallThreshold
この例では、Avaliable なエージェントの数が10を下回ると警告(黄色)になり、5未満になるとアラート(赤)になります。同様に、 「CallThreshold」は、キューの待ち呼数が20を超えると警告になり、30を超えるとアラートになります。 そこから、個々のセルは、そのセルの色をコントロールする特定のしきい値を参照します。セルの背景色が (個別またはデフォルトで) 指定されている場合、しきい値のカラーで上書きされます。セルには、そのしきい値で使用される値を保持する必要はありません。これにより、単一のしきい値を超えたときに、セルの行全体を強調表示することができます。
小規模なコンタクトセンターにおいて、最大6人のエージェントのステータスを表示するウォールボードを構築します。 このウォールボードの YAML 定義ファイルは次のようになります。
WallboardTemplateFormatVersion: 1
Description: Agent Wallboard
Identifier: agents
Defaults:
TextColor: black
BackgroundColor: white
TextSize: 15
AgentStates:
- State: Available
Color: Green
- State: Offline
Color: Red
- State: Work
Color: Orange
- State: Lunch
Color: Yellow
Rows:
- Row: 1
Cells:
- Cell: 1
Description: Agent state
Reference: =activeagents
- Cell: 2
Description: Agent state
Reference: =activeagents
- Cell: 3
Description: Agent state
Reference: =activeagents
- Row: 2
Cells:
- Cell: 1
Description: Agent state
Reference: =activeagents
- Cell: 2
Description: Agent state
Reference: =activeagents
- Cell: 3
Description: Agent state
Reference: =activeagents
このファイルには、次のものが含まれます。
このウォールボードには6つのセルがあり、最初の6人の「アクティブ」エージェント(「ログアウト」状態になっていないエージェント) の詳細がアルファベット順に表示されます。現在「テキスト」フィールドは不要です。エージェントの詳細は動的であるため、ディレクトリの「名」属性と「姓」属性から自動的に取得されます。
「=activeagents」の代わりに「=allagents」を使用することもできます。「=allagents」を使用すると「ログアウト」を含む任意の状態のエージェントが表示されます。セルよりも多くのエージェントがある場合そのエージェントは無視され、表示されません。エージェントが6人以下の場合は空白セルとなります。
このラボでは、Lambda、API Gateway、Kinesis Data Streams、DynamoDB などのサーバーレステクノロジーを使用して Amazon Connect 用のウォールボードを作成する方法を解説しました。これを使用することで、コンタクトセンター内に表示する複数のウォールボードを作成できます。