Amazon Connectで担当者直通電話システムの開発

Amazon Connectの概要

Amazon Connectでは、多機能(IVRや着電管理、ケース追跡など)なコールセンターの応対フローを素早くスケーラブルに作成することができます。例えば、ユーザの入力した番号によって担当者を変えたり、電話番号によってどのオペレータにつながるか指定することができます。

今回は、Amazon Connectを使って、弊社のお客様向けに、担当者直通電話システムを開発いたしましたので、ご紹介いたします。

目次

機能概要

機能としては、弊社へ電話でのお問合わせ時に、お客様専用の顧客番号を入力していただくと、プロジェクトに最も詳しい担当者(エージェント)に直通電話が繋がるというものです。(顧客番号は、お客様ごとに一意に採番され、データベース(今回はDynamoDB)で管理されております)。

これによって、お客様にとっては、プロジェクトの前提知識などが共有されている担当者に問い合わせをすることができ、また、担当者が別のプロジェクトの電話対応をしている場合は、次にプロジェクトに詳しい担当者へ順に転送されるため、待ち時間を極力少なく、素早く問題解決にご協力することができます。

全体の流れとしては、以下のようになります。

今回利用するAmazon Connectの主な機能は次の8つです。

  • Play prompt: 音声を再生する
  • Check hours of operation: オペレーションを行う時間を確認する
  • Check contact attributes: 情報を元に処理を分岐させる
  • Store customer input: ユーザの番号入力を受け取り、保存する
  • Invoke AWS Lambda function: Lambda関数を実行する
  • Set call recording behavior: 録音を開始する
  • Transfer to queue: 該当のスキルを持つ担当者に電話を転送する
  • Disconnect / hang up: 電話を切る

Amazon Connectで用意されている処理の一覧はこちらを御覧ください。

実装詳細

では、ひとつずつContact Flowを実装をしてゆきます。

営業日判定

営業日かどうかを判定するため、Check hours of operationを使用します。予め、Routing > Hours of operationから営業時間を決めておきます。

その後、Contact Flowで、作成した営業時間を選択します。チームごとに別の営業時間を決めておくようなことも可能です。

祝祭日

祝祭日判定は、Lambdaを呼び出し、Google Calendarの日本の祝日カレンダーを取得して、それを祝日としました。Invoke AWS Lambda functionで作成した関数を指定します。


Lambda側では、取得した祝日一覧に当日が含まれているかどうかを返却し、Check contact attributesで分岐を行い、祝日でなければ次の処理へ続くようにしています。

顧客番号入力

ここからお客様の操作が開始します。顧客番号を入力していただき、どの担当者に転送するかをDynamoDBから取得するので、まずは、Store customer inputを使用して、数字の入力を保存します。

入力後、StoredCustomerInputとして値をLambdaに渡します。

顧客番号からキューを取得

Lambdaで、Amazon Connectで入力した顧客番号を受取り、DynamoDBからキューの名前を取得して、返却します。キューがDBに存在しない場合は404、エラーが起きた際は500を返すようにしました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
def handle(event, context):
customer_id = event['Details']['Parameters']['StoredCustomerInput']
dynamodb = boto3.resource(
'dynamodb',
region_name='ap-northeast-1',
)
table = dynamodb.Table(os.environ['TABLE_NAME_AMAZON_CONNECT_QUEUE'])
response = table.query(
KeyConditionExpression=Key('CustomerId').eq(int(customer_id))
)

is_success = response['ResponseMetadata']['HTTPStatusCode'] == 200
if not is_success:
return {
'status': 500,
}

queue_name = None
for r in response['Items']:
queue_name = r['Name']

if queue_name:
return {
'status': 200,
'queue_name': queue_name,
}
else:
return {
'status': 404,
}

それをAmazon Connect側で受け取ります。まずstatusをチェックして例外を除外し、404は入力ミスとして扱いもう一度入力させる等のフローを作成します。

キューの取得に成功した場合、次のフローでqueue_name(キューの名前)をチェックし、キューを特定したら、予め作成したキューに転送できるよう、Set queueを行います。

エージェントへの転送

前の手順でqueue_nameによってSet queueを行なったので、別々のキューに転送します。今回は、顧客ごとにキューを作成していますが、例えば、サーバーサイドチーム、UIデザインチームなどの単位でキューを作成して担当者を振り分けることも可能です。

キューに対して通話を転送すると、予め定義した優先順位でスキルベースルーティングが自動的に行われます。これによって、プロジェクトごとに最適、かつ、手が開いている担当者を自動的に探し出し、対応を行うことができます。

対応音声

再生する音声は、Amazon Pollyで生成しています。例えば、顧客番号入力などは、以下のような音声が流れます。

顧客番号入力時

顧客番号入力エラー時

エージェントへの転送時

今回は、音声ファイルをRouting > Promptsで登録して再生していますが、Lambda等で返した動的な音声ファイルや、テキストをそのまま再生させることもできるため、より柔軟な音声再生フローも作成可能です。

録音/履歴管理

Amazon Connectでは録音にも対応しています。Set call recording behaviorを使用すると、担当者との通話がAmazonn S3に保存されます。やり方は、担当者に転送する前に、以下のようなフローを加えておくだけです。

録音する対象も指定することができます。

保存先もS3なので、管理を考える必要がなくいいですね。また、コンタクトの対応履歴は、Metrics and qualityで確認することができます。キューや担当者、日付、対応時間などで検索ができるので、コールセンターの品質にもつなげることができます。

料金

Amazon Connectの料金は、電話番号の取得と、通話時間の従量課金となっております。

例えば、日本で直通ダイヤルインの番号でインバウンドコールを対応すると、1分あたり0.0056 USDかかりますが、従量課金となっているため、お問合わせが少ない月など、システムの維持コストを低く抑えることができます。そのため、これまでコールセンターを導入しづらかった中小企業にもメリットがあると考えます。

おわりに

今回開発した機能は、一部のお客様から番号をお伝えし、実際に使用を開始していただいております。

大企業などで採用しているイメージのあるコールセンターがこのように素早くノンプログラミングで開発できるのは素晴らしいですね。弊社ではAmazon Connectを使用したコールセンターのシステム開発も行っておりますので、ぜひお気軽にお問い合わせください。

参考

このエントリーをはてなブックマークに追加