AWS Amazon Connectでクラウド上にコールセンターを構築する

AWS Amazon Connectでクラウド上にコールセンターを構築する

概要

今回、下記の公式サイトを参考にAmazon Connectでクラウド上にコールセンターを構築しました。

Amazon Connect Introduction – ANZ
Welcome to Amazon Connect Bootcamp

https://catalog.us-east-1.prod.workshops.aws/workshops/b06b53f6-3b36-4e1a-a208-ddbeb25405c6/en-US

Amazon Connectインスタンスの作成及び初期設定

Amazon Connectインスタンス作成

Amazon ConnectサービスでCreate Instanceを選択します。

【ID管理を設定】
“Amazon Connectでユーザーを作成および管理”を選択して、アクセスURLを入力します。

アクセスURLはグローバルで一意になる必要があります。
名前が重複しているかどうかは作成しないとわかりません。
重複時は、残念ながら一から再作成する事になります。

【管理者を追加】
管理者を指定を選択して、管理者情報を入力します。

【テレフォニーを設定】
着信を許可する発信を許可するともにチェックがついていることを確認します。

【データストレージ】
デフォルトのままとしました。

確認ページで確認後、数分でインスタンスが作成されました。

Amazon Connectのコンソールに移動しますので、アクセスURLをクリックします。

先ほど作成した管理者でログインします。

ログイン後、英語表記になっているので、右上のアイコンをクリックして日本語に変更します。

電話番号の取得

通常であれば、[チャネル]-[電話番号]メニューで電話番号取得を選択して新規電話番号を取得するのですが、

国/地域で”日本”を選択すると、”その国でお使いいただける番号はありません。必要な場合は、サポートにお問い合わせください。”とメッセージが表示され取得できません。

日本の電話番号を取得するにはAWSのサポートに申請が必要です。

申請に必要な書類は下記が必要となります。

  • 申請者の行政機関発行の有効な身分証明書 (運転免許証、パスポートなど)
  • 申請者と企業の関連性を示すドキュメント(社員証や、その他所属を確認できる書類)
  • 公共料金の請求書、法務省からの企業登録証明書 (登記事項証明書など)、行政機関からの領収書、国税または地方税に関する証明書 (納税証明書など)、社会保険料の領収書などの書類(東京の 03 番号の取得をする場合は、03 番号が使用可能な住所が記載されているもの)

事業用の電話番号のみ取得でき、個人用の番号は取得できません。

2022年8月現在、Amazon Connectで取得できる電話番号は下記の通りです。

  • 直通ダイヤル(DID)番号
    050 プレフィックス番号
    03 東京を表すプレフィックス番号
  • 通話料無料番号
    0120 プレフィックス番号
    0800 プレフィックス番号

現在、DIDでは東京以外の電話番号は取得できないようです。

私は大阪在住ですので、06を取得したかったのですが、無理なようですので050から始まる番号を申請しました。

申請から約1週間くらいで電話番号の取得が完了しました。

機能制限の緩和の申請

2021年8月上旬以降に東京リージョンで作成されたConnectインスタンスについて、デフォルトで、日本の固定電話・アメリカ合衆国・ベトナムの架電のみ可能となっており、その他の国及び日本の携帯電話番号への架電はホワイトリスト化の申請が必要となっております。

今回は、日本の携帯電話への架電が必要なので、AWSサポートに制限緩和の申請をしました。

申請から約1週間くらいで制限緩和の完了の連絡がきました。

問合せフローの設定

電話番号の取得が完了したので、[チャネル]-[電話番号]で取得した電話番号をクリックして、問合せフロー/IVRでSample inbound flow(first contact experienceを選択して保存します。

ここで一度発着信が可能か確認しておきます。

コンタクトフローの作成

Amazon Connectでは複数のコンタクトフロー間を行き来しながら全体のフローを組み立てていく事となります。

各フローは公開されていないと、その他のフローから参照ができません。

そこで最初にAWSBootcamp1~8までの仮のコンタクトフローを作成して、公開状態にしておきます。(公式サイトでは9があったのですが、実際には使用されていないようだったので、作成の必要はありません。)

[ルーティング]-[問い合せフロー]メニューでコンタクトフローの作成を選択します。

フロー名を”AWSBootcamp1”
切断フローを追加して、エントリポイントから線でつなげます。

保存の右にある矢印をクリックして名前をつけて保存を選択して、説明に”Set global parameters”として保存します。

この名前を付けて保存を繰り返して、AWSBootcamp2~9まで下記のように作成します。

フロー名説明
AWSBootcamp1Set global parameters
AWSBootcamp2TOD Check
AWSBootcamp3Customer Lookup
AWSBootcamp4Welcome Message
AWSBootcamp5Menu
AWSBootcamp6Callback
AWSBootcamp7Case update playback
AWSBootcamp8Last agent routing

作成後、各フロー設定画面で公開を選択して、全てのフローを公開済み状態とします。

AWS Bootcamp 1
全体の初期設定

概要

このコンタクトフローでは、全体の初期設定を行います。
全ての設定が完了すれば、AWSBootcamp2へ転送します。

コンタクトフローの設定

下記の表を参考に最終的に下記の図になるように設定します。

設定後、公開を選択します。

ログの記録動作の設定コンタクトフロー内の動作ログを取得することができます。
CloudWatchLogsの/aws/connect/<インスタンス>
にログが記録されます。

ログの記録の動作:有効化
音声の設定テキスト読み上げでの音声に関する設定をします。

言語:日本語
音声:Takumi
言語属性を設定:チェック
記録と分析の動作を設定通話録音に関する設定を行います。
エージェントと顧客、またはどちらかを指定できます。
録音されたデータは、S3のamazon-connect-XXXXXXXXXXXX/connect/<インスタンス名>/CallRecordingsに.wav形式で保存されます。

通話記録:[オン]-[エージェントおよび記録]
保留フローの設定エージェントが通話を保留中に実行されるのフローを設定します。

[エージェント]-[フローの選択]で”Default agent hold”を選択します。
顧客キューフローの設定顧客がキューに転送された時のフローを設定します。

[フローの選択]で”Default customer queue”を選択します。
ウィスパーフローの設定通話がエージェントにつながる時に顧客またはエージェントに対してのウィスパーフローを設定します。

[送信先:エージェント]-[フローの選択]で”Default agent whisper”を選択します。
フローへの転送別のフローへ転送します。

フローの選択:”AWSBootcamp2″を選択します。

テスト

全ての設定が完了して、AWSBootcamp2のフローに遷移する事を確認します。

ブロック単位での処理結果を確認するにはCloudWatchLogsを参照するとよいです。

AWS Bootcamp 2
営業時間設定

概要

このコンタクトフローでは営業時間をチェックして時間内であればAWSBootcamp3へ転送します。

オペレーション時間の設定

最初に営業時間の設定をします。

[ルーティング]ー[オペレーション時間]ページで、新しい時間の追加を選択します。

名前:Basic Business Hours
説明:営業時間(通常)
タイムゾーン:Japan
営業時間:月~金のAM9:00~PM5:00

コンタクトフローの設定

下記の表を参考に最終的に下記の図になるように設定します。

設定後、公開を選択します。

オペレーション時間を確認する[指定時間(オプション)]で”Basic Business Hours”を選択します。
フローへ転送フローの選択:”AWSBootcamp3″を選択します。
プロンプトの再生[テキスト読み上げまたはチャットテキスト]-[手動で設定する]-“本日の営業は終了しました。”

テスト

営業時間内であればAWSbootcamp3へ遷移し、営業時間外であればメッセージが流れて切断されることを確認します。

AWSBootcamp3
顧客情報照会

概要

このコンタクトフローでは、Amazon Connectから渡される顧客電話番号を用いてLambdaを経由でDynamoDBへ顧客情報を照会をします。

データがあればmessageに”Success”をセットして取得された各値をセット。
データがなければmessageに”Fail”をセットします。

実際のシナリオではDynamoDBではなく、CRMへの照会になるかと思いますが、今回はDynamoDBを使用してシミュレートします。

IAMロールの作成

Lambdaに付与するロールを作成します。

IAMサービスで[ロール]メニューから、ロールを作成を選択します。

[AWSのサービス]からLambdaを選択します。

下記のポリシーをアタッチします。

  • AWSLambdaBasicExecutionRole
  • AmazonDynamoDBReadOnlyAccess
  • AmazonConnect_FullAccess(今回は特に必要なし)

ロール名を”AWSBootcamp”としてロールの作成を完了します。

DynamoDBのテーブル作成

DynamoDBのテーブルを作成します。

DynamoDBサービスの[テーブル]メニューからテーブルの作成を選択します。

テーブル名に”AWSBootCamp”
パーティションキーに”phoneNumber”と入力してテーブルの作成を完了します。

作成したテーブルに項目を追加します。

作成したテーブルのアクションから項目を作成を選択します。

JSONを選択して、下記のコードを貼り付けて項目の作成を完了します。

“phoneNumber”の値には発信者番号に書き換えて下さい。

{
  "phoneNumber": {
    "S": "+818012345678"
  },
  "caseNotes": {
    "S": "問合せ状況は、現在急ぎで確認中です。次の更新は午後3時になります。"
  },
  "caseNumber": {
    "S": "1030"
  },
  "DOB": {
    "S": "800105"
  },
  "fName": {
    "S": "イチロウ"
  },
  "lastAgent": {
    "S": "tanaka"
  },
  "lName": {
    "S": "スズキ"
  },
  "status": {
    "S": "シルバー"
  }
}

Lambda関数の作成

DynamoDBにデータ照会をするLambda関数を作成します。

Lambdaサービスの[関数]メニューから関数の作成を選択します。

「一から作成」を選択して、

関数名:AWSBootcamp
ランタイム:Python3.8
実行ロール既存のロールを使用するを選択して、AWSBootcampを選択します。

作成されたLambda関数の内容を編集します。

コードタブを選択して、下記のコードを貼り付けます。

貼り付け後、Deployを選択して保存します。

# MIT No Attribution

# Copyright 2021 AWS

# Permission is hereby granted, free of charge, to any person obtaining a copy of this
# software and associated documentation files (the "Software"), to deal in the Software
# without restriction, including without limitation the rights to use, copy, modify,
# merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.

# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
# PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

#Import libraries and set table name
import json
import boto3
import os

tableName= os.environ['tableName']
dynamodb = boto3.resource('dynamodb')

def lambda_handler(event, context):

  #Customer phone number passed from Amazon Connect via JSON
  phoneNumber = event ['Details']['ContactData']['CustomerEndpoint']['Address']

  #customer lookup to DynamoDB via Customer phone number
  table = dynamodb.Table(tableName)
  response = table.get_item(Key={'phoneNumber' : phoneNumber})

  #If record exists write values to variables
  if 'Item' in response:
    caseNumber = response['Item']['caseNumber']
    DOB = response['Item']['DOB']
    fName = response['Item']['fName']
    lName = response['Item']['lName']
    status = response['Item']['status']
    lastAgent = response['Item']['lastAgent']
    caseNotes = response['Item']['caseNotes']

    #Return variables to Amazon Connect
    return {'message': 'Success',
            'caseNumber' : caseNumber,
            'DOB' : DOB,
            'fName' : fName,
            'lName' : lName,
            'status' : status,
            'caseNotes' : caseNotes,
            'lastAgent' : lastAgent
    }

    #If no match return a default message
  else:
      return { 'message': 'Fail'}      

コード中で環境変数からテーブル名を取得しておりますので、環境変数を追加します。

設定タブを選択して、環境変数メニューで編集を選択します。

キー:tableName
:AWSBootCamp

を入力して保存を選択します。

Amazon ConnectのLambda設定

Amazon ConnectからLambdaを呼び出せるように設定します。

Amazon Connectサービスで該当インスタンスを選択し、[問合せフロー]メニューのAWS Lambda項目でAWSBootcampを選択してAdd Lambda Functionを押してLambda関数を追加します。

コンタクトフローの作成

下記の表を参考に最終的に下記の図になるように設定します。

設定後、公開を選択します。

コンタクト属性を確認するコンタクト属性とはコンタクトフロー内で使用する事ができるkey&valueタイプの変数です。
例えば、顧客の電話番号やキュー情報などの事前に定義されているものや、lambdaやLexなどのAWSサービスの戻り値、ユーザー定義で独自にも設定する事も可能です。
それらの値を用いて条件分岐で処理分岐させることができます。

ここではチャネル属性の値を確認しますが、値にはVOICE,CHAT,TASKの3つがあります。
今回は音声通話のみを対象としておりますので、VOICEかどうかの判定となります。

タイプ:システム
属性:チャネル
チェックする条件:等しい “voice”
AWS Lambda関数を呼び出すLambda関数を呼び出すことができます。

関数を選択する:Lambda関数のARN
タイムアウト:8秒
コンタクト属性の設定
コンタクト属性の値をセットします。
今回はLambdaの戻り値をユーザー定義として保存します。

宛先タイプ:ユーザー定義
宛先属性:message
[属性を使用する]-タイプ:外部 属性:message

宛先タイプ:ユーザー定義
宛先属性:caseNumber
[属性を使用する]-タイプ:外部 属性:caseNumber

宛先タイプ:ユーザー定義
宛先属性:DOB
[属性を使用する]-タイプ:外部 属性:DOB

宛先タイプ:ユーザー定義
宛先属性:fName
[属性を使用する]-タイプ:外部 属性:fName

宛先タイプ:ユーザー定義
宛先属性:lName
[属性を使用する]-タイプ:外部 属性:lName

宛先タイプ:ユーザー定義
宛先属性:status
[属性を使用する]-タイプ:外部 属性:status

宛先タイプ:ユーザー定義
宛先属性:caseNotes
[属性を使用する]-タイプ:外部 属性:caseNotes

宛先タイプ:ユーザー定義
宛先属性:lastAgent
[属性を使用する]-タイプ:外部 属性:lastAgent
切断時間内 → フローへ転送
フローの選択:”AWSBootcamp4″を選択します。

テスト

電話番号でデータを検索してヒットした時と、ヒットしない時に適切にコンタクト属性がセットされていることを確認します。

確認するにはCloudWatchLogsを参照するとよいです。

AWSBootcamp4
本人確認

概要

このコンタクトフローでは、ウェルカムメッセージを再生後に

  • 顧客照会でヒットした顧客(message:Success)は生年月日入力による本人確認処理
  • ヒットしなかった顧客(message:Fail)はAWSBootcamp5へ転送

の処理を行います。

本来であれば、生年月日による本人確認処理では、一致したケースと不一致のケースで処理を分岐するのでしょうが、このBootcampでは一致不一致の結果を音声で案内するのみで共にAWSBootcamp5転送するようです。

コンタクトフローの作成

下記の表を参考に最終的に下記の図になるように設定します。

設定後、公開を選択します。

プロンプトの再生[テキスト読み上げまたはチャットテキスト]-[手動で設定する]-”お電話ありがとうございます。こちらは〇〇会社です。”
コンタクト属性を確認するタイプ:ユーザー定義
属性:message
チェックする条件:等しい ”Success”
プロンプトの再生[テキスト読み上げまたはチャットテキスト]-[手動で設定する]-“こんにちは $.Attributes.fName さん。あなたは $.Attributes.status 会員です。”
顧客の入力を保存する入力されたプッシュ番号をコンタクト属性に保存します。
保存されたコンタクト属性は、
[コンタクト属性を確認する]の、
タイプ:システム 
属性:保存済の顧客の入力
で確認できます。

[テキスト読み上げまたはチャットテキスト]-[手動で設定する]で”生年月日を6桁の数字で入力してください。”と入力します。
顧客の入力:カスタム 最大桁数6
コンタクト属性を確認するタイプ:システム
属性:保存済の顧客の入力
チェックする条件:等しい ”$.Attributes.DOB”
プロンプトの再生[テキスト読み上げまたはチャットテキスト]-[手動で設定する]-“入力された番号と一致しませんでした。”
プロンプトの再生[テキスト読み上げまたはチャットテキスト]-[手動で設定する]-“確認できました。”
フローへ転送フローの選択:”AWSBootcamp5″を選択します。

テスト

AWSBootcamp4でデータベースにヒットした時は、その旨のメッセージが再生され、本人確認が正しく行われることを確認します。

データベースにヒットしなかった時はAWSBootcamp5に転送されることを確認します。

AWSBootcamp5
メニュー

概要

このコンタクトフローではメニューのフローを作成します。

各メニューと処理は

  • 1:セールス
    Salesキューへ転送
  • 2:問合せ
    Inquiryキューに設定してAWSBootcamp6へ転送
  • 3:サポート
    Supportキューに設定してAWSBootcamp7へ転送

となり、無効な入力がされた時は、エラーガイダンスを流し3回までリトライできるようにします。

3回のリトライでも無効と判定された時は2:問合せと同じ処理とします。

キューの作成

発信者のメニュー番号選択により、下記の3つのキューに振り分けますので、事前にキューを作成します。

  • Sales
  • Inquiry
  • Support

[ルーティング]-[キュー]ページよりキューを追加を選択します。

キューの名前:Sales
オペレーション時間:Basic Business Hours
アウトバウンド発信者ID番号:取得した電話番号

同様にInquiry,Supportのキューも作成します。

コンタクトフローの作成

下記の表を参考に最終的に下記の図になるように設定します。

設定後、公開を選択します。

顧客の入力を取得する[テキスト読み上げまたはチャットテキスト]-[手動で設定する]-”営業は1を。
新規問合せは2を。
既存問合せは3を押してください。”

オプション:1,オプション:2,オプション:3
プロンプトの再生[テキスト読み上げまたはチャットテキスト]-[手動で設定する]-“無効な番号が入力されました。再度入力してください。”
ループループ数:3
作業キューの設定通話を入れるキューを設定します。
設定されたキューは問合せフロー間で有効となります。

[キュー別]-[キューの選択]-“Sales”を選択します。
キューへ転送設定されているキューへ転送します。
これによりエージェントと通話可能状態となります。
作業キューの設定[キュー別]-[キューの選択]-“Inquiry”を選択します。
フローへ転送フローの選択:”AWSBootcamp6″を選択します。
作業キューの設定[キュー別]-[キューの選択]-“Support”を選択します。
フローへ転送フローの選択:”AWSBootcamp7″を選択します。

テスト

メニューで無効な番号がプッシュされた時はエラーメッセージが流れ、リトライ処理が正しく行われることを確認します。

有効な番号がプッシュされた時は、適切なキューが設定されることを確認します。

AWSBootcamp6
コールバック

概要

このコンタクトフローでは、コールバックのフローを作成します。

キューの待ち時間(2分以内かどうか)によって流す音声を変更し、その後

  • 1:このまま待機してエージェントと通話
    Inquiryキューへ転送
  • 2:コールバックをお願いする
    コールバックの電話番号を入力してコールバックキューへ転送後切断

を選択します。

コンタクトフローの作成

下記の表を参考に最終的に下記の図になるように設定します。

設定後、公開を選択します。

キューの状態を確認する最も古い問合せがエージェントにルーティングされるか、キューから削除されるまでにキュー内で費やした時間です。

出力:キューされていた時 2分以下
プロンプトの再生[テキスト読み上げまたはチャットテキスト]-[手動で設定する]-“待ち時間は2分以内です。”
プロンプトの再生[テキスト読み上げまたはチャットテキスト]-[手動で設定する]-“待ち時間は2分以上です。”
顧客の入力を取得する[テキスト読み上げまたはチャットテキスト]-[手動で設定する]-“このまま待機するには1を。コールバックをご希望の方は2をプッシュして下さい。”
オプション:1,オプション:2
キューへ転送
顧客の入力を保存する[テキスト読み上げまたはチャットテキスト]-[手動で設定する]-“ご希望のコールバック電話番号を入力してください。”
顧客の入力:電話番号-ローカル形式 国コード:+81 最初のエントリ前のタイムアウト:6

[電話番号]-[ローカル形式]で国コードを指定する事によりAmazon Connectが自動で国コードをセットします。
コールバック番号を設定するタイプ:システム
属性:保存済みの顧客の入力
キューへ転送コールバックキューへの転送
初回ディレイ:5秒
最大試行回数:2、試行間の最小時間:2分0秒
プロンプトの再生[テキスト読み上げまたはチャットテキスト]-[手動で設定する]-“コールバックを受付しました。”
プロンプトの再生[テキスト読み上げまたはチャットテキスト]-[手動で設定する]-“無効な電話番号が入力されました。”

エージェントの電話の受信の設定

エージェントで電話の受信できるようにするにはルーティングプロファイルを作成して、ユーザーとルーティングプロファイルを関連付ける必要があります。

[ユーザー]-[ルーティングプロファイル]で「プロファイルを新規追加」を選択します。

名前:routing_profile_Inquiry
説明:to Inquiry
チャネルを選択:音声
キュー:Inquiryを選択して、優先度と遅延を入力します。
デフォルトのアウトバウンドキュー:Inquiry

[ユーザー]-[ユーザー管理]で該当のユーザーを選択して、
ルーティングプロファイル:routing_profile_Inquiry
を選択します。

あとは、管理画面右上の電話のアイコンをクリックして、別窓で表示される電話操作画面でステータスがAvailavleになっていることを確認します。

テスト

このまま待機(1)でエージェントにつながる事と、コールバック(2)で入力された電話番号にエージェントから電話がかかってくることを確認します。

AWSBootcamp7
最新コメント再生

概要

このコンタクトフローでは問合せの最新コメント再生のフローを作成します。

  • 顧客照会でヒットした顧客
    問合せの最新のコメントを聞く(1)か、新規で問い合わせをする(2)かを選択します。
    問合せの最新のコメントを聞くときは、再生後、エージェントと通話するかを選択します。(エージェントと通話するときはAWSBootcamp8に転送)
    新規で問い合わせをするとき(1)は、AWSBootcamp8に転送します。
  • 顧客照会でヒットしなかった顧客
    AWSBootcamp8に転送します。

コンタクトフローの作成

下記の表を参考に最終的に下記の図になるように設定します。

設定後、公開を選択します。

コンタクト属性を確認するタイプ:ユーザー定義
属性:message
チェックする条件:等しい ”Success”
顧客の入力を取得する音声の再生には、テキスト以外にSSMLのタグを使用する事ができます。

[テキスト読み上げまたはチャットテキスト]-[手動で設定する]-“
<speak>
$.Attributes.fName さん。
最新の受付番号は、
<say-as interpret-as=”digits”>$.Attributes.caseNumber</say-as>
です。
最新の状況を再生するには1を。
新規の問い合わせは2をプッシュして下さい。
</speak>

解釈する:SSML

オプション:1,オプション:2
プロンプトの再生[テキスト読み上げまたはチャットテキスト]-[手動で設定する]-“
<speak>
受付番号
<break time=”1s”/>
<say-as interpret-as=”digits”>$.Attributes.caseNumber</say-as>
<break time=”1s”/>
$.Attributes.caseNotes
</speak>

解釈する:SSML

オプション:1
顧客の入力を取得する[テキスト読み上げまたはチャットテキスト]-[手動で設定する]-“担当者と話をするには1をプッシュして下さい。”

オプション:1
フローへの転送フローの選択、”AWSBootcamp8″

テスト

顧客照会でヒットした顧客が、既存受付の最新の状況を確認できる事と、それ以外がAWSBootcamp8に転送されることを確認します。

AWSBootcamp8
担当エージェントへ転送

概要

このコンタクトフローでは前回の担当者につなぐフローを作成します。

既存の問合せで、担当のエージェントに接続可能であればエージェントキューに転送し、以外はサポートキューに転送します。

コンタクトフローの作成

下記の表を参考に最終的に下記の図になるように設定します。

設定後、公開を選択します。

コンタクト属性を確認するタイプ:ユーザー定義
属性:message
チェックする条件:等しい ”Success”
人員の確認キューやエージェント単位で通話可能かどうかを確認します。

チェックするステータス:利用可能
[確認するキュー]-[エージェント別]-[属性を使用する]
タイプ:ユーザー定義
属性:lastAgent
顧客の入力を取得する[テキスト読み上げまたはチャットテキスト]-[手動で設定する]-“
$.Attributes.fName さん。あなたの担当者は $.Attributes.lastAgent です。
担当者との通話をご希望の時は1を押してください。

オプション:1
作業キューの設定[エージェント別]-[属性を使用する]
タイプ:ユーザー定義 属性:lastAgent
プロンプトの再生[テキスト読み上げまたはチャットテキスト]-[手動で設定する]-“担当者 $.Attributes.lastAgent に転送します。
しばらくお待ちください。”
作業キューの設定[キュー別]-[キューの選択]-“Support”を選択します。
プロンプトの再生[テキスト読み上げまたはチャットテキスト]-[手動で設定する]-“担当者におつなぎます。しばらくお待ちください。”
キューへ転送

テスト

既存の問合せで担当のエージェントが通話可能であればエージェントに転送され、以外はサポートキューに転送されることを確認します。

Default customer whisperの設定

Default customer whisperを変更して、エージェント接続時にlambdaを起動して、DynamoDBのAWSBootCampテーブルのlastAgentを更新するようにします。

Lambda関数の作成

DynamoDBのデータを更新するLambda関数を作成します。

AWSBootcamp3でLambdaを作成した時と同様の手順で下記を作成します。

関数名:AWSBootcampLastAgentUpdate

# MIT No Attribution

# Copyright 2021 AWS

# Permission is hereby granted, free of charge, to any person obtaining a copy of this
# software and associated documentation files (the "Software"), to deal in the Software
# without restriction, including without limitation the rights to use, copy, modify,
# merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.

# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
# PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

#Import libraries and set table name
import json
import boto3
import os

tableName= os.environ['tableName']
dynamodb = boto3.resource('dynamodb')

def lambda_handler(event, context):
  #Customer phone number and last agent deatils passed from Amazon Connect via JSON
  phoneNumber = event ['Details']['ContactData']['CustomerEndpoint']['Address']
  lastAgent = event['Details']['ContactData']['Attributes']['lastAgent']

  #customer lookup to DynamoDB via Customer phone number
  table = dynamodb.Table(tableName)
  response = table.get_item(Key={'phoneNumber' : phoneNumber})

  #If record exists update the last agent field
  if 'Item' in response:
    table.update_item(
    Key={'phoneNumber': phoneNumber},
    UpdateExpression="SET lastAgent = :var",
    ExpressionAttributeValues={':var': lastAgent}
    )
    return {'Message': 'updated'}

    #If no record exists create a new record with the phone number and last agent field
  else:
    table.put_item(
      Item={
        "phoneNumber": "" + phoneNumber + "",
        "lastAgent": "" + lastAgent + "",
        }
    )
    return { 'Message': 'added'}  

コンタクトフローの修正

既存のDefault customer whisperコンタクトフローを下記の表を参考に最終的に下記の図になるように設定します。

設定後、公開を選択します。

コンタクト属性の設定宛先タイプ:ユーザー定義
宛先属性:lastAgent
属性を使用する
 タイプ:エージェント
 属性:ユーザー名
AWS Lambda関数を呼び出す関数を選択する AWSBootcampLastAgentUpdate

テスト

既存の問合せでは既存レコードのlastAgentが更新され、新規の電話番号の問合せであればレコードが作成されることを確認します。

デフォルトのフローについて

ここまでのテストでお気づきだと思いますが、下記のような時にデフォルトで設定されているフローが適用され、英語のメッセージが再生されます。(音声言語を日本語にしている時は、カタカナ読みの英語)

  • エージェントで顧客からの通話がつながる時
    Default agent whisper
  • エージェントがコールバック発信をする時
    Default outbound
  • エージェントが保留した時
  • 顧客が通話キューに入れられた時
    Default customer queue
  • 顧客が着信を受ける時
    Default customer whisper

これらのデフォルトのフローはコンタクトフローのページで変更できます。
また、新規で作成して設定する事も可能です。
(コンタクトフローのページの「コンタクトフローの作成」の右の矢印ボタンを押下)

最後に

かなり突っ込みどころがある豪快なフローのBootcampでしたが、どのような事が可能かのイメージはつかむことができました。

次回はAmazon ConnectのAPIを使用してOutbound発信をしていこうと思います。


コメントを残す

メールアドレスが公開されることはありません。