AWS SDK for Python を使用してAmazon Connectのオペレーション時間を別のインスタンスにコピーしてみた

AWS SDK for Python を使用してAmazon Connectのオペレーション時間を別のインスタンスにコピーしてみた

Clock Icon2024.5.31
facebook logohatena logotwitter logo

こんにちは。
繁松です。

はじめに

AWS SDK for Python (Boto3) を使用して、同一アカウント、同一リージョン内のAmazon Connectにオペレーション時間をコピーしてみました。

オペレーション時間を同様の設定で作成したい場合、インポート/エクスポートの機能がないため、手作業で一つ一つ作成する必要があります。AWS SDK for Python (Boto3) を使用することで、同様の設定のオペレーション時間を簡単に作成できました。
オペレーション時間をコピーしたいケースとしては、開発環境で作成したオペレーション時間を本番環境でも同じ設定で利用したい場合や、Amazon Connectのユーザー認証方式を変更したい場合等、新たに作成したインスタンスでも既存のインスタンスと同様の設定が使いたいといったケースが考えられます。

やってみた

コピー元のインスタンスのIDと、コピー先のインスタンスのIDを確認しスクリプト内で指定します。

コピー元のインスタンスからオペレーション時間のリストを取得し、TimeZoneや設定された営業時間等の詳細情報を取得します。
コピー元とコピー先に同じ名前のオペレーション時間がある場合は、設定値をアップデートするようにしています。

import boto3

def copy_hours_of_operation(source_instance_id, target_instance_id, region_name='ap-northeast-1'):
    connect = boto3.client('connect', region_name=region_name)

    # コピー元のインスタンスからオペレーション時間のリストを取得
    hours_of_operations = connect.list_hours_of_operations(
        InstanceId=source_instance_id
    )['HoursOfOperationSummaryList']

    for hours_of_operation in hours_of_operations:
        hours_id = hours_of_operation['Id']

        # オペレーション時間の詳細情報を取得
        hours_details = connect.describe_hours_of_operation(
            InstanceId=source_instance_id,
            HoursOfOperationId=hours_id
        )['HoursOfOperation']

        # 既存のオペレーション時間を確認
        existing_hours = connect.list_hours_of_operations(
            InstanceId=target_instance_id
        )['HoursOfOperationSummaryList']

        # 説明が空の場合は空の文字列を使用
        description = hours_details.get('Description', '')

        for existing_hour in existing_hours:
            # 同じ名前のオペレーション時間が存在する場合はアップデートを実施
            if existing_hour['Name'] == hours_details['Name']:
                update_params = {
                    'InstanceId': target_instance_id,
                    'HoursOfOperationId': existing_hour['Id'],
                    'TimeZone': hours_details['TimeZone'],
                    'Config': hours_details['Config'],
                    'Description': description
                }
                
                connect.update_hours_of_operation(**update_params)
                print(f"Updated existing Hours of Operation: {existing_hour['Name']}")
                break
        else:
            create_params = {
                'InstanceId': target_instance_id,
                'Name': hours_details['Name'],
                'TimeZone': hours_details['TimeZone'],
                'Config': hours_details['Config'],
                'Tags': hours_details.get('Tags', {})
            }
            if description:
                create_params['Description'] = description

            connect.create_hours_of_operation(**create_params)
            print(f"Copied Hours of Operation: {hours_details['Name']}")

# コピー元とコピー先のインスタンスIDを指定
source_instance_id = 'source_instance_idを指定'
target_instance_id = 'target_instance_idを指定'

copy_hours_of_operation(source_instance_id, target_instance_id)
  • 注意点
    同じ名前のオペレーション時間があった場合、設定値のアップデートでtagの項目は含まれません。
    update_hours_of_operationのAPIではtagを設定できないためです。

実行前

コピー元インスタンス

コピー先インスタンス

Basic Hoursの設定

実行後

コピー先インスタンス

test1,test2のオペレーション時間が追加されました。 Basic Hoursの説明も更新されました。

Basic Hoursのタイムゾーンと設定が更新されました。

さいごに

AWS SDK for Python (Boto3) を使ったオペレーション時間のコピーをやってみました。
コンソールを確認しながら実施するよりも簡単に同様のオペレーション時間の作成が実施できると思います。
コピー元とコピー先の指定を間違えないように気を付けてください。

次回はキューのコピーについて書きます。

この記事をシェアする

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.