Amazon Connectでカスタム問い合わせ属性キーを利用し、問い合わせ種別ごとの割合を月単位で集計する方法

Amazon Connectでカスタム問い合わせ属性キーを利用し、問い合わせ種別ごとの割合を月単位で集計する方法

Clock Icon2025.06.23

はじめに

以前、コンタクトごとにお問い合わせの種別をカスタム問い合わせ属性で記録する方法を紹介しました。

https://dev.classmethod.jp/articles/amazon-connect-contact-attributes-form-search

この仕組みを利用して、Amazon Connect標準の機能のみで月ごとのお問い合わせ種別の割合と件数を集計する方法を紹介します。

現在のAmazon Connectのダッシュボードでは、カスタム問い合わせ属性ごとの統計量を表示するウィジェットは提供されていません。

そのため、今回は以下の2つの方法をご紹介します。

  • コンソールから手動でコンタクトを検索する
  • AWS CLIを使ってコンタクトを検索し、統計情報を取得する

コンソールから手動でコンタクトを検索する

Connect管理画面のコンタクト検索を使用して、月単位でのお問い合わせ種別を集計する方法です。

時間範囲を1ヶ月に設定し、「カスタム問い合わせ属性」で事前に定義したカスタム問い合わせ属性キーtypeと、問い合わせ種別のすべての属性値を入力します。

その他, 支払い関連, 商品関連

cm-hirai-screenshot 2025-06-13 8.32.48

この方法では複数の種別を一度に確認できますが、それぞれの種別の件数は表示されません。

cm-hirai-screenshot 2025-06-13 8.32.54

問い合わせ種別の属性値を一つに絞ることで、特定の問い合わせ種別の月間件数を確認できます。

商品関連

cm-hirai-screenshot 2025-06-13 8.33.07

各問い合わせ種別の割合を算出するには、問い合わせ種別の属性値を一つずつ手動で検索する必要があります。

コンソールからコンタクト検索を行う場合、コンタクトIDのリンクから詳細画面に遷移して会話内容を確認できる点がメリットです。

cm-hirai-screenshot 2025-06-13 8.33.33

AWS CLIを使ってコンタクトを検索し、統計情報を取得する

AWS CLIのsearch-contactsコマンドを使用してコンタクトを検索し、統計情報を取得する方法です。

https://awscli.amazonaws.com/v2/documentation/api/latest/reference/connect/search-contacts.html

基本的な使用方法

search-contactsコマンドを使用することで、コンソールと同様に一定期間の特定の問い合わせ種別の件数を確認できます。AWS CloudShellから実行します。

aws connect search-contacts \
   --instance-id 3ff2093d-af96-43fd-b038-3c07cdd7609c \
   --time-range '{
     "Type": "INITIATION_TIMESTAMP",
     "StartTime": "2025-04-02T00:00:00Z",
     "EndTime": "2025-05-26T23:59:59Z"
   }' \
   --search-criteria '{
     "SearchableContactAttributes": {
       "Criteria": [
         {
           "Key": "type",
           "Values": [""支払い関連"]
         }
       ],
       "MatchType": "MATCH_ALL"
     }
   }'
実行結果
{
    "Contacts": [
        {
            "Arn": "arn:aws:connect:ap-northeast-1:アカウントID:instance/3ff2093d-af96-43fd-b038-3c07cdd7609c/contact/b3783634-1e07-419e-b439-73e41e8260e3",
            "Id": "b3783634-1e07-419e-b439-73e41e8260e3",
            "InitiationMethod": "INBOUND",
            "Channel": "VOICE",
            "QueueInfo": {
                "Id": "ba8d05d9-27b3-406e-b089-f5707174697e",
                "EnqueueTimestamp": "2025-04-14T08:50:41.847000+00:00"
            },
            "AgentInfo": {
                "Id": "104b4727-a2ef-4f12-8daf-6068ce627667",
                "ConnectedToAgentTimestamp": "2025-04-14T08:50:48.657000+00:00"
            },
            "InitiationTimestamp": "2025-04-14T08:50:40.191000+00:00",
            "DisconnectTimestamp": "2025-04-14T08:51:03.022000+00:00",
            "SegmentAttributes": {
                "connect:Subtype": {
                    "ValueString": "connect:Telephony"
                }
            }
        },
        {
            "Arn": "arn:aws:connect:ap-northeast-1:アカウントID:instance/3ff2093d-af96-43fd-b038-3c07cdd7609c/contact/3515d1a9-e4f8-4329-8def-81a75ed03cc6",
            "Id": "3515d1a9-e4f8-4329-8def-81a75ed03cc6",
            "InitiationMethod": "INBOUND",
            "Channel": "VOICE",
            "QueueInfo": {
                "Id": "ba8d05d9-27b3-406e-b089-f5707174697e",
                "EnqueueTimestamp": "2025-04-10T02:12:12.126000+00:00"
            },
            "AgentInfo": {
                "Id": "104b4727-a2ef-4f12-8daf-6068ce627667",
                "ConnectedToAgentTimestamp": "2025-04-10T02:12:25.864000+00:00"
            },
            "InitiationTimestamp": "2025-04-10T02:12:10.368000+00:00",
            "DisconnectTimestamp": "2025-04-10T02:13:09.281000+00:00",
            "SegmentAttributes": {
                "connect:Subtype": {
                    "ValueString": "connect:Telephony"
                }
            }
        }
    ],
    "TotalCount": 2
}

統計情報の自動集計スクリプト

以下のスクリプトをCloudShellから実行することで、4月の問い合わせ種別ごとの割合と件数、全件数を自動で出力できます。

bash <<'EOS'
INSTANCE_ID="3ff2093d-af96-43fd-b038-3c07cdd7609c"
START="2025-04-01T00:00:00Z"; END="2025-04-30T23:59:59Z"
CATEGORIES=("その他" "支払い関連" "商品関連")
time_range=$(jq -cn --arg s "$START" --arg e "$END" '{Type:"INITIATION_TIMESTAMP",StartTime:$s,EndTime:$e}')

count(){
  local key="$1"
  aws connect search-contacts --instance-id "$INSTANCE_ID" \
    --time-range "$time_range" --search-criteria "$(jq -cn --arg k "$key" \
    '{SearchableContactAttributes:{Criteria:[{Key:"type",Values:[$k]}],MatchType:"MATCH_ALL"}}')" \
    --query 'TotalCount' --output text --no-cli-pager --no-paginate
}

declare -A CNT
for i in "${!CATEGORIES[@]}"; do
  cat="${CATEGORIES[$i]}"
  CNT["$cat"]="$(count "$cat")"
  (( i<${#CATEGORIES[@]}-1 )) && sleep 1
done

total=0
for cat in "${CATEGORIES[@]}"; do
  (( total+=CNT["$cat"] ))
done

printf "期間: %s ~ %s (UTC)\n全件数: %d\n" "$START" "$END" "$total"
for cat in "${CATEGORIES[@]}"; do
  num=${CNT["$cat"]}
  pct=$(awk -v n="$num" -v t="$total" 'BEGIN{printf "%.2f", (t>0 ? n/t*100 : 0)}')
  printf "  %-*s : %d (%.2f%%)\n" 8 "$cat" "$num" "$pct"
done
EOS

このスクリプトでは以下の変数を設定して統計情報を取得しています。

  • INSTANCE_ID: Amazon ConnectインスタンスのID
  • STARTEND: 集計対象期間(UTC)
  • CATEGORIES: 集計対象の問い合わせ種別

各問い合わせ種別の件数を取得する際、1秒のスリープを挟んでいます。これは、Amazon Connect Service APIのレート制限に対応するためです。

Amazon Connect Service API を使用する場合、すべてのオペレーションRateLimitの は 1 秒あたり 2 リクエスト、 BurstLimitは 1 秒あたり 5 リクエストです。ただし、以下の例外があります。

https://docs.aws.amazon.com/ja_jp/connect/latest/adminguide/amazon-connect-service-limits.html

実行結果例

4月の実行結果

実行結果
期間: 2025-04-01T00:00:00Z ~ 2025-04-30T23:59:59Z (UTC)
全件数: 3
  その他 : 0 (0.00%)
  支払い関連 : 2 (66.67%)
  商品関連 : 1 (33.33%)

5月の実行例

期間を変更して5月の統計を取得する場合は、STARTENDの値を以下のように変更します。

5月
bash <<'EOS'
INSTANCE_ID="3ff2093d-af96-43fd-b038-3c07cdd7609c"
START="2025-05-01T00:00:00Z"; END="2025-05-31T23:59:59Z"
CATEGORIES=("その他" "支払い関連" "商品関連")
time_range=$(jq -cn --arg s "$START" --arg e "$END" '{Type:"INITIATION_TIMESTAMP",StartTime:$s,EndTime:$e}')

count(){
  local key="$1"
  aws connect search-contacts --instance-id "$INSTANCE_ID" \
    --time-range "$time_range" --search-criteria "$(jq -cn --arg k "$key" \
    '{SearchableContactAttributes:{Criteria:[{Key:"type",Values:[$k]}],MatchType:"MATCH_ALL"}}')" \
    --query 'TotalCount' --output text --no-cli-pager --no-paginate
}

declare -A CNT
for i in "${!CATEGORIES[@]}"; do
  cat="${CATEGORIES[$i]}"
  CNT["$cat"]="$(count "$cat")"
  (( i<${#CATEGORIES[@]}-1 )) && sleep 1
done

total=0
for cat in "${CATEGORIES[@]}"; do
  (( total+=CNT["$cat"] ))
done

printf "期間: %s ~ %s (UTC)\n全件数: %d\n" "$START" "$END" "$total"
for cat in "${CATEGORIES[@]}"; do
  num=${CNT["$cat"]}
  pct=$(awk -v n="$num" -v t="$total" 'BEGIN{printf "%.2f", (t>0 ? n/t*100 : 0)}')
  printf "  %-*s : %d (%.2f%%)\n" 8 "$cat" "$num" "$pct"
done
EOS
実行結果
期間: 2025-05-01T00:00:00Z ~ 2025-05-31T23:59:59Z (UTC)
全件数: 1
  その他 : 1 (100.00%)
  支払い関連 : 0 (0.00%)
  商品関連 : 0 (0.00%)

最後に

AWS CLIを使ったスクリプト実行では、全問い合わせ種別の件数と割合を一度に算出できるため、効率的な集計が可能です。
一方、コンソールからの手動検索では種別ごとに個別の検索が必要ですが、コンタクトIDから詳細な問い合わせ内容を確認できる利点があります。
用途に応じて、使い分けることをお勧めします。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.