こんにちは、ディーネットの山田です。
目次
はじめに
Amazon Connectのクイック接続とは
クイック接続とは、ひと言で表現しますと通話転送機能になります。
通話転送先のリストを事前に作成しておくことで、エージェントが他へ通話を転送することができます。
クイック接続のリストには、"キュー"、"エージェント"、"外部の電話番号"の3種類設定することができます。
本題へ
先日、Amazon Connectのクイック接続先をリスト化する機会がありましたので、その際に使ったPythonのコードを紹介したいと思います。
現時点で、Amazon Connectのクイック接続先をコントロールパネルから"削除"、"エクスポート"できる機能はありませんが、API経由であれば提供されています。
今回使ったAPIは、"list_quick_connects"という関数になります。
boto3のリファレンス
クイック接続先の一覧を取得してくれるものになります。
コントロールパネルに一覧表示されたものをExcelなど駆使してリスト化することはできなくもないですが、私にとって少し手間だったので、サクッとPythonで処理を書いて回すことにしました。
実際のクイック接続先一覧の画面
Pythonのスクリプト内容
import boto3
import csv
# Amazon Connectのリージョン名を指定します
regionname = "ap-northeast-1"
# Amazon ConnectのインスタンスIDを指定します
instanceid = "{インスタンスID}" # TODO: Amazon ConnectのインスタンスIDを指定すること
# 出力するCSVファイル名を記載します
filename = "quicklist.csv"
# ファイルディスクプリタを開きます
f = open(filename, "w")
writer = csv.writer(f, lineterminator="\n")
# CSVに記載する1行目(ヘッダ情報)の内容を記載します
csvhead = ["Name", "Type", "Destination", "Contact flow", "Description"]
writer.writerow(csvhead)
# boto3でAmazon ConnectのAPIを呼び出します
client = boto3.client(
"connect",
region_name=regionname,
##aws_access_key_id="{アクセスキー}", # TODO: 基本的にはIAMロールもしくは、環境変数でアクセスキーを指定すること
##aws_secret_access_key="{シークレットキー}" # TODO: 基本的にはIAMロールもしくは、環境変数でシークレットアクセスキーを指定すること
)
# 'list_quick_connects'のAPIは複数ページを返却する可能性があるのでページネータを利用します
paginator = client.get_paginator("list_quick_connects")
list_quick_connects = paginator.paginate(InstanceId=instanceid)
# リクエストしたAPIで返却された結果分ループ処理行います
for quick_connects in list_quick_connects:
for quick_connect in quick_connects["QuickConnectSummaryList"]:
# クイック接続の詳細を取得します
describe_quick_connect = client.describe_quick_connect(
InstanceId=instanceid, QuickConnectId=quick_connect["Id"]
)
# クイック接続の種類によって処理を別けます
quickconnecttype = describe_quick_connect["QuickConnect"]["QuickConnectConfig"]["QuickConnectType"]
# エージェント宛の場合
if quickconnecttype == "USER":
# ユーザーの詳細を取得します
describe_user = client.describe_user(
InstanceId=instanceid,
UserId=describe_quick_connect["QuickConnect"]["QuickConnectConfig"]["UserConfig"]["UserId"]
)
# コンタクトフローの詳細を取得します
describe_contact_flow = client.describe_contact_flow(
InstanceId=instanceid,
ContactFlowId=describe_quick_connect["QuickConnect"]["QuickConnectConfig"]["UserConfig"]["ContactFlowId"]
)
# CSVのヘッダ情報の通り取得した値を順番にCSVへ書き込む
csvlist = []
csvlist.append(describe_quick_connect["QuickConnect"]["Name"])
csvlist.append("Agent")
csvlist.append(describe_user["User"]["Username"])
csvlist.append(describe_contact_flow["ContactFlow"]["Name"])
csvlist.append(describe_quick_connect["QuickConnect"]["Description"])
writer.writerow(csvlist)
# 外部宛の場合
elif quickconnecttype == "PHONE_NUMBER":
# CSVのヘッダ情報の通り取得した値を順番にCSVへ書き込む
csvlist = []
csvlist.append(describe_quick_connect["QuickConnect"]["Name"])
csvlist.append("External")
csvlist.append(describe_quick_connect["QuickConnect"]["QuickConnectConfig"]["PhoneConfig"]["PhoneNumber"])
csvlist.append("--")
csvlist.append(describe_quick_connect["QuickConnect"]["Description"])
writer.writerow(csvlist)
# キュー宛の場合
elif quickconnecttype == "QUEUE":
# キューの詳細を取得します
describe_queue = client.describe_queue(
InstanceId=instanceid,
QueueId=describe_quick_connect["QuickConnect"]["QuickConnectConfig"]["QueueConfig"]["QueueId"]
)
# コンタクトフローの詳細を取得します
describe_contact_flow = client.describe_contact_flow(
InstanceId=instanceid,
ContactFlowId=describe_quick_connect["QuickConnect"]["QuickConnectConfig"]["QueueConfig"]["ContactFlowId"]
)
# CSVのヘッダ情報の通り取得した値を順番にCSVへ書き込む
csvlist = []
csvlist.append(describe_quick_connect["QuickConnect"]["Name"])
csvlist.append("Queue")
csvlist.append(describe_queue["Queue"]["Name"])
csvlist.append(describe_contact_flow["ContactFlow"]["Name"])
csvlist.append(describe_quick_connect["QuickConnect"]["Description"])
writer.writerow(csvlist)
# その他(想定外)の場合
else:
# その他になることは想定していませんが、万が一発生した場合はありのまま書き込む
csvlist = []
csvlist.append(describe_quick_connect["QuickConnect"]["Name"])
csvlist.append("--error--")
csvlist.append("--error--")
csvlist.append("--error--")
csvlist.append(describe_quick_connect["QuickConnect"]["Description"])
writer.writerow(csvlist)
処理後のCSV内容
Name,Type,Destination,Contact flow,Description
ディーネット東京本社,External,+81335918887,--,ディーネット東京本社
山田,Agent,yutaka.yamada,Default agent transfer,山田
テクニカルサポート,Queue,BasicQueue,Default queue transfer,テクニカルサポート
ディーネット大阪本社,External,+81662318887,--,ディーネット大阪本社
使い道などについて
Amazon Connectに変更履歴の機能はありますが、現時点でバックアップの機能はないので、LambdaとS3を使ってクイック接続先一覧の定期的なバックアップなど。
余談
Amazon Connectを久々に触ってみるとAPIなどの機能がいつの間にか充実してきていますね。
(APIだけではなく、コントロールパネルの方もぜひ充実するようにお願いしたいです!)
プロフィール
テクニカルサポートは卒業して、フロントサイドでお客様環境の構築をさせていただいております。
たまに、テクニカルサポートでご対応させていただくことがあるかもしれませんが、その際はよろしくお願いいたします。
インフラ系のエンジニアですが、時々休日プログラマー(Python、PHP)をやっております。
LINK
クラウドベリージャム:プロフィールページ