Amazon-Connect

Amazon Connectのクイック接続先一覧をPython使ってCSVにリスト化してみました

こんにちは、ディーネットの山田です。

はじめに

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だけではなく、コントロールパネルの方もぜひ充実するようにお願いしたいです!)

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA