1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Salesforce Voice パートナーテレフォニーコンタクトセンター起点の機能別構成

1
Posted at

Amazon Connect からのパートナーテレフォニーを使用した Salesforce Voiceで提供している各機能について、Salesforce起点の機能ごとの処理の技術的な詳細を紹介します。
トラブルシューティングなどで内部の動きを知りたい時の備忘録です。

AWS側起点で動く仕組みは次のページにまとめています。

前提

Salesforce のバージョンは Summer '26、パートナーテレフォニーコンタクトセンターのバージョンは 21.0 です。

プロビジョニング完了後のCloudFormationスタックのデプロイ状況、CloudTrailのログを参照した結果に基づいています。
公式で示された内容ではないため、実際の環境と相違がある可能性や将来変更に伴い差異が発生する可能性がある点に注意してください。

コンタクトセンターの状態を確認

本機能は、Summer '26 リリース以降でかつ、コンタクトセンターバージョン 20.0 以降で利用可能です。
設定方法はプロビジョニングされたコンタクトセンターの状態チェックスタックの設定の記述を参照してください。

公式のセットアップ手順を実施することで、ProvisioningRole のロールを引き受け、ヘルスチェック用のCloudFormationスタックが作成され、ヘルスチェックに必要なAWSリソース群が追加でデプロイされます。
デプロイに成功するとメールが届きます。

状態確認 デプロイの仕組み
状態確認 デプロイの仕組み

サービスチェックを実行すると、Salesforce Voiceがデプロイしたリソース群について存在しているかのチェック、権限のテストなどが実行されます。
通常実行結果は、Salesforce からメールで添付ファイルとして送付されます。
加えて実行結果は、S3バケットにも格納されます。
このときバケットにヘルスチェック結果レポートを削除するライフサイクルルールが設定されていない場合、新規で設定します。
この結果レポートのオブジェクト自体はメールが到達しなかった場合などに備えて格納されていると考えられます。

状態確認 実行の仕組み
状態確認 実行の仕組み

実行結果の例
{
  "execution_metadata": {
    "execution_id": "${コンタクトセンターID}_${乱数}",
    "timestamp": "2026-07-01T01:02:03.123456+00:00",
    "version": "refactored_v1.0",
    "execution_time_ms": 49930.716
  },
  "input_parameters": {
    "cc_version": "V21.0",
    "cc_name": "${コンタクトセンターAPI参照名}",
    "sku": "byoa",
    "execution_id": "${コンタクトセンターID}_${乱数}",
    "connect_instance_arn": "arn:aws:connect:ap-northeast-1:012345678901:instance/${インスタンスID}",
    "region": "ap-northeast-1",
    "max_threads": 10
  },
  "summary": {
    "overall_status": "UNHEALTHY",
    "total_resources": 119,
    "healthy": 114,
    "unhealthy": 5,
    "warnings": 0,
    "error_count": 5
  },
  "detailed_results": [
    {
      "ResourceType": "Event Source Mapping",
      "DetailedHealthCheck": [
        {
          "ResourceName": "CTRDataSyncFunctionStream",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "ContactLensConsumerFunctionStream",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "VoiceMailAudioProcessingFunctionStream",
          "status": 200,
          "message": "healthy"
        }
      ]
    },
    {
      "ResourceType": "Kinesis Stream",
      "DetailedHealthCheck": [
        {
          "ResourceName": "${コンタクトセンターAPI参照名}-012345678901-CTRStream",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "${コンタクトセンターAPI参照名}-012345678901-ContactLensStream",
          "status": 200,
          "message": "healthy"
        }
      ]
    },
    {
      "ResourceType": "EventBridge Rule",
      "DetailedHealthCheck": [
        {
          "ResourceName": "${コンタクトセンターAPI参照名}-ContactEventsRule",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "${コンタクトセンターAPI参照名}-ScheduledRule",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "${コンタクトセンターAPI参照名}-SCVBYOAContactCent-VoiceMailPackagingFunctio-8ZiKMQPm7VUg",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "${コンタクトセンターAPI参照名}-SCVBYOAContactCent-VoiceMailTranscribeFuncti-4Otb3NS1Dmtc",
          "status": 200,
          "message": "healthy"
        }
      ]
    },
    {
      "ResourceType": "KMS Alias",
      "DetailedHealthCheck": [
        {
          "ResourceName": "alias/${コンタクトセンターAPI参照名}KvsKey",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "alias/${コンタクトセンターAPI参照名}LMKvsKey",
          "status": 200,
          "message": "healthy"
        }
      ]
    },
    {
      "ResourceType": "Lambda Permission",
      "DetailedHealthCheck": [
        {
          "ResourceName": "AuthKeysSSMUtilFunctionPermission",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "CTRDataSyncFunctionPermission",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "ContactDataSyncFunctionPermission",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "ContactEventsRulePermission",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "ContactLensConsumerFunctionPermission",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "InvokeSalesforceRestApiFunctionPermission",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "InvokeTelephonyIntegrationApiFunctionPermission",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "InvokeVfsIntegrationApiFunctionPermission",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "KvsConsumerTriggerPermission",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "KvsTranscriberPermission",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "PostCallAnalysisTriggerFunctionPermission",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "RealtimeAlertLambdaPermission",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "ScheduledRulePermission",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "VoiceMailPackagingFunctionPermission",
          "status": 200,
          "message": "healthy"
        }
      ]
    },
    {
      "ResourceType": "S3 Bucket",
      "DetailedHealthCheck": [
        {
          "ResourceName": "${コンタクトセンターAPI参照名}-012345678901",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "scv-012345678901-byoa-cloudtrail",
          "status": 200,
          "message": "healthy"
        }
      ]
    },
    {
      "ResourceType": "CloudWatch Alarm",
      "DetailedHealthCheck": [
        {
          "ResourceName": "SCV Connect ${コンタクトセンターAPI参照名}-ConcurrentCallsPercentage",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "SCV Lambda ${コンタクトセンターAPI参照名}-CTRDataSyncFunction Errors",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "SCV Lambda ${コンタクトセンターAPI参照名}-CTRDataSyncFunction Throttles",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "SCV Lambda ${コンタクトセンターAPI参照名}-ContactDataSyncFunction Errors",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "SCV Lambda ${コンタクトセンターAPI参照名}-ContactDataSyncFunction Throttles",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "SCV Lambda ${コンタクトセンターAPI参照名}-ContactLensConsumerFunction Errors",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "SCV Lambda ${コンタクトセンターAPI参照名}-ContactLensConsumerFunction Throttles",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "SCV Lambda ${コンタクトセンターAPI参照名}-HandleContactEventsFunction Errors",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "SCV Lambda ${コンタクトセンターAPI参照名}-HandleContactEventsFunction Throttles",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "SCV Lambda ${コンタクトセンターAPI参照名}-InvokeSalesforceRestApiFunction Errors",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "SCV Lambda ${コンタクトセンターAPI参照名}-InvokeSalesforceRestApiFunction Throttles",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "SCV Lambda ${コンタクトセンターAPI参照名}-InvokeTelephonyIntegrationApiFunction Errors",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "SCV Lambda ${コンタクトセンターAPI参照名}-InvokeTelephonyIntegrationApiFunction Throttles",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "SCV Lambda ${コンタクトセンターAPI参照名}-InvokeVfsIntegrationApiFunction Errors",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "SCV Lambda ${コンタクトセンターAPI参照名}-InvokeVfsIntegrationApiFunction Throttles",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "SCV Lambda ${コンタクトセンターAPI参照名}-VoiceMailAudioProcessingFunction Errors",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "SCV Lambda ${コンタクトセンターAPI参照名}-VoiceMailAudioProcessingFunction Throttles",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "SCV Lambda ${コンタクトセンターAPI参照名}-VoiceMailPackagingFunction Errors",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "SCV Lambda ${コンタクトセンターAPI参照名}-VoiceMailPackagingFunction Throttles",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "SCV Lambda ${コンタクトセンターAPI参照名}-VoiceMailTranscribeFunction Errors",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "SCV Lambda ${コンタクトセンターAPI参照名}-VoiceMailTranscribeFunction Throttles",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "SCV Lambda ${コンタクトセンターAPI参照名}-kvsConsumerTrigger Errors",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "SCV Lambda ${コンタクトセンターAPI参照名}-kvsConsumerTrigger Throttles",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "SCV Lambda ${コンタクトセンターAPI参照名}-kvsTranscriber Errors",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "SCV Lambda ${コンタクトセンターAPI参照名}-kvsTranscriber Throttles",
          "status": 200,
          "message": "healthy"
        }
      ]
    },
    {
      "ResourceType": "IAM Managed Policy",
      "DetailedHealthCheck": [
        {
          "ResourceName": "SCVAmazonConnectAccessPolicy",
          "status": 500,
          "message": "Managed policy missing: SCVAmazonConnectAccessPolicy"
        },
        {
          "ResourceName": "SCVKMSAccessPolicy",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "SCVKinesisDataStreamAccessPolicy",
          "status": 500,
          "message": "Managed policy missing: SCVKinesisDataStreamAccessPolicy"
        },
        {
          "ResourceName": "SCVLambdaAccessPolicy",
          "status": 500,
          "message": "Managed policy missing: SCVLambdaAccessPolicy"
        },
        {
          "ResourceName": "SCVS3AccessPolicy",
          "status": 500,
          "message": "Managed policy missing: SCVS3AccessPolicy"
        },
        {
          "ResourceName": "SCVSSMAccessPolicy",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "SCVSecretsManagerAccessPolicy",
          "status": 500,
          "message": "Managed policy missing: SCVSecretsManagerAccessPolicy"
        }
      ]
    },
    {
      "ResourceType": "Lambda Layer",
      "DetailedHealthCheck": [
        {
          "ResourceName": "AuthKeysSSMUtilFunctionLayer",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "CTRDataSyncFunctionLayer",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "ContactDataSyncFunctionLayer",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "ContactLensConsumerFunctionLayer",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "ContactLensProcessorFunctionLayer",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "HandleContactEventsFunctionLayer",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "InvokeSalesforceRestApiFunctionLayer",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "InvokeTelephonyIntegrationApiFunctionLayer",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "InvokeVfsIntegrationApiFunctionLayer",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "KVSConsumerTriggerFunctionLayer",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "PostCallAnalysisTriggerFunctionLayer",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "RealtimeAlertFunctionLayer",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "VoiceMailAudioProcessingFunctionLayer",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "VoiceMailPackagingFunctionLayer",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "VoiceMailTranscribeFunctionLayer",
          "status": 200,
          "message": "healthy"
        }
      ]
    },
    {
      "ResourceType": "Lambda Function",
      "DetailedHealthCheck": [
        {
          "ResourceName": "${コンタクトセンターAPI参照名}-AuthKeysSSMUtilFunction",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "${コンタクトセンターAPI参照名}-CTRDataSyncFunction",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "${コンタクトセンターAPI参照名}-ConnectConfigurationFunction",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "${コンタクトセンターAPI参照名}-ContactDataSyncFunction",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "${コンタクトセンターAPI参照名}-ContactLensConsumerFunction",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "${コンタクトセンターAPI参照名}-ContactLensProcessorFunction",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "${コンタクトセンターAPI参照名}-CustomSSMFunction",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "${コンタクトセンターAPI参照名}-HandleContactEventsFunction",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "${コンタクトセンターAPI参照名}-InvokeSalesforceRestApiFunction",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "${コンタクトセンターAPI参照名}-InvokeTelephonyIntegrationApiFunction",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "${コンタクトセンターAPI参照名}-InvokeVfsIntegrationApiFunction",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "${コンタクトセンターAPI参照名}-PostCallAnalysisTriggerFunction",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "${コンタクトセンターAPI参照名}-RealtimeAlert",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "${コンタクトセンターAPI参照名}-SCVSecretConfigurator",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "${コンタクトセンターAPI参照名}-VoiceMailAudioProcessingFunction",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "${コンタクトセンターAPI参照名}-VoiceMailPackagingFunction",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "${コンタクトセンターAPI参照名}-VoiceMailTranscribeFunction",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "${コンタクトセンターAPI参照名}-kvsConsumerTrigger",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "${コンタクトセンターAPI参照名}-kvsTranscriber",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "ProviderCreator",
          "status": 200,
          "message": "SUCCESS: ProviderCreator Lambda function verified: SCVBYOATenantStack-ProviderCreator-dj78HqPNxeX6"
        }
      ]
    },
    {
      "ResourceType": "IAM Role",
      "DetailedHealthCheck": [
        {
          "ResourceName": "${コンタクトセンターAPI参照名}-ConnectCallRole",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "${コンタクトセンターAPI参照名}-SAMLRole",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "${コンタクトセンターAPI参照名}-SCVS3Role",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "${コンタクトセンターAPI参照名}-SCVTenantBucketWriteAccessRole",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "BYOATrailLogGroupRole",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "SCVAmazonConnectManagementRole",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "SCVCTRDataSyncFunctionRole",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "SCVConnectConfiguratorLambdaRole",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "SCVContactDataSyncFunctionRole",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "SCVContactLensConsumerFunctionRole",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "SCVContactLensStreamingRoleResource",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "SCVHandleContactEventsRole",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "SCVIDPLambdaRole",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "SCVInvokeSalesforceRestApiFunctionRole",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "SCVInvokeTelephonyIntegrationApiFunctionRole",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "SCVInvokeVfsIntegrationApiFunctionRole",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "SCVKvsConsumerTriggerRole",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "SCVKvsTranscriberRoleResource",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "SCVPostCallAnalysisTriggerFunctionRole",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "SCVRealtimeAlertRole",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "SCVSSMLambdaExecutionRole",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "SCVSecretConfiguratorLambdaRole",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "SCVVoiceMailAudioProcessingRole",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "SCVVoiceMailPackagingRole",
          "status": 200,
          "message": "healthy"
        },
        {
          "ResourceName": "SCVVoiceMailTranscribeRole",
          "status": 200,
          "message": "healthy"
        }
      ]
    }
  ],
  "errors": [
    "SCVAmazonConnectAccessPolicy: Managed policy missing: SCVAmazonConnectAccessPolicy",
    "SCVKinesisDataStreamAccessPolicy: Managed policy missing: SCVKinesisDataStreamAccessPolicy",
    "SCVLambdaAccessPolicy: Managed policy missing: SCVLambdaAccessPolicy",
    "SCVS3AccessPolicy: Managed policy missing: SCVS3AccessPolicy",
    "SCVSecretsManagerAccessPolicy: Managed policy missing: SCVSecretsManagerAccessPolicy"
  ]
}

Amazon Connect ルーティング設定をインポート

[Amazon Connect ルーティング設定をインポート] から [インポート]を実行すると、次の情報をインポートします。

  • Amazon Connect Customer の ルーティングプロファイル
  • Amazon Connect Customer の キュー
  • Amazon Connect Customer の ユーザーに割り当てられているルーティングプロファイル

最後に成功/失敗の結果がパートナーテレフォニーコンタクトセンター作成時のシステム管理者のメールアドレスに送信されます。

インポート時の説明

  • 既存の Salesforce キューに関連付けられていない各 Amazon Connect キューに基づいて Salesforce キューを作成します。
  • 既存のコンタクトセンターグループに関連付けられていない各 Amazon Connect ルーティングプロファイルについて Salesforce コンタクトセンターグループを作成します。
  • Amazon Connect キューに関連付けられたルーティングプロファイルに基づいてコンタクトセンターグループを Salesforce に関連付けます。このアクションにより、各 Salesforce グループの既存のキュー割り当てが置き換えられます。
  • それぞれの Amazon Connect ルーティングプロファイルにいてのユーザー割り当てに基づいて Salesforce ユーザーをコンタクトセンターグループに割り当てます。このアクションにより、各グループの既存のユーザー割り当てが置き換えられます。

インポート操作時、API呼び出しの流れ
インポート操作時、API呼び出しの流れ

インポート:キュー

Amazon Connect 側にキューが存在し、Salesforce 側にキューが存在しない場合、Salesforceに新しいキューが作成されます。
次にパートナーテレフォニーコンタクトセンターキューに Salesforce キューと Amazon Connect キューの紐付けが追加されます。
キューは次の情報で作成されます。
- 表示ラベル: ${キューの名前}
- キュー名 (API参照名): ${キューの名前}_CCQ_${コンタクトセンターの15桁ID}
- オムニチャネルルーティングを使用する設定
- ルーティング設定: Default For Voice
- サポートされるオブジェクト
- 選択されたオブジェクト
- 音声通話

注意: キューの名前 に日本語が入っていると失敗します。

例:キューインポートの対応関係
例:キューインポートの対応関係

インポート:ルーティングプロファイル

Amazon Connect 側にルーティングプロファイルが存在し、Salesforce側にコンタクトセンターグループが存在しない場合、Saleforceに新しいコンタクトセンターグループが作成されます。
コンタクトセンターグループは次の情報で作成されます。

  • コンタクトセンターグループ名: ${ルーティングプロファイルの名前}
  • API参照名: ${スペースを"_"に変換後のルーティングプロファイルの名前}_CCG_${コンタクトセンターの15桁ID}
    • 例: External_Routing_Profile_1_CCG_04v000000000000

デフォルトの発信キュー、関連付けられたキューのいずれの設定もインポートするとAmazon Connect側の設定がコンタクトセンターの設定に反映されます。

注意: ルーティングプロファイル名に日本語が入っていると失敗します。

例:ルーティングプロファイルインポートの対応関係
例:ルーティングプロファイルインポートの対応関係

インポート:ユーザー割当てのコンタクトセンターグループ

事前に連携が完了している コンタクトセンターユーザー と すでに存在している/インポートの操作で追加になったコンタクトセンターグループを割り当てます。

例:ユーザー割当てのルーティングプロファイルインポートの対応関係
例:ユーザー割当てのルーティングプロファイルインポートの対応関係

コンタクトセンターユーザー

コンタクトセンターユーザー追加

Salesforce Voiceの権限セットライセンスを持ったSalesforceユーザーを Amazon Connect側のユーザーとして追加します。
ユーザー作成 (CreateUser) APIが呼び出され、追加に成功するとコンタクトセンターユーザーのマッピング情報が作成されます。
最後に成功/失敗の結果がパートナーテレフォニーコンタクトセンター作成時のシステム管理者のメールアドレスに送信されます。

すでにユーザーが存在している場合は、コンタクトセンターには正常に追加されメール文面もエラーになりません。
ただし、CloudTrailのエラーコードには DuplicateResourceException で残ります。

ユーザー追加、API呼び出しの流れ
ユーザー追加、API呼び出しの流れ

コンタクトセンターユーザー削除

コンタクトセンターユーザーを Amazon Connect側のユーザーから削除します。
Amazon Connect 側にすでにユーザーが存在しない場合は削除のAPIコールはスキップされ成功となります。
実際にAmazon Connectから削除される、すでにAmazon Connect側に該当ユーザーが存在しない場合、コンタクトセンターユーザーのマッピング情報からも削除され、成功になります。
最後に成功/失敗の結果がパートナーテレフォニーコンタクトセンター作成時のシステム管理者のメールアドレスに送信されます。

ユーザー削除、API呼び出しの流れ
ユーザー削除、API呼び出しの流れ

ユーザーをコンタクトセンターグループに割り当て

コンタクトセンターユーザーにチェックを入れ、[グループの割り当て]を実行するとルーティングプロファイル一覧( ListRoutingProfiles )を実行します。
[コンタクトセンターグループ] から割り当てるコンタクトセンターグループを選択し、[保存]を実行すると、ユーザー一覧( ListUsers )を実行し各々のユーザーIdを取得し、取得チェックした人数分のユーザーに対してルーティングプロファイル割り当て( UpdateUserRoutingProfile )を実行します。

コンタクトセンターグループに割り当て、API呼び出しの流れ
コンタクトセンターグループに割り当て、API呼び出しの流れ

コンタクトセンターキュー

コンタクトセンターキュー作成

事前に Salesforce 側でキューを作成します。
キュー作成時の条件は [オムニチャネルルーティングを使用する設定] > [ルーティング設定]にコンタクトセンターのオムニチャネルのルーティングモデルと一致するルーティング設定を選択します。

  • 外部ルーティングの場合は、ルーティング設定のルーティングモデルには `外部ルーティング を設定されている必要があります
  • 統合ルーティングの場合は、ルーティング設定のルーティングモデルには 対応中件数が最小対応余力が最大 を設定されている必要があります

次に [サポートされるオブジェクト] > [選択されたオブジェクト]には 音声通話 を選択します。

キュー追加時は [追加]ボタンを押下するとモーダル画面が表示され、キュー一覧取得(ListQueues) -> 営業時間一覧取得(ListHoursOfOperations) を実行して必要情報を取得します。
[完了]ボタンを押下すると、キュー作成 (CreateQueue) APIが呼び出されます。
上記までのAPI呼び出しが完了すると、コンタクトセンターキューのマッピング情報が作成され、成功/失敗の結果がパートナーテレフォニーコンタクトセンター作成時のシステム管理者のメールアドレスに送信されます。

キューを作成、API呼び出しの流れ
キューを作成、API呼び出しの流れ

既存のキューを選択

既存のキューを選択するためには、事前に Salesforce 側にキューが存在しており、 Amazon Connect 側にも紐付けされていないキューが必要です。

キュー選択時は [追加]ボタンを押下するとモーダル画面が表示され、キュー一覧取得(ListQueues) -> 営業時間一覧取得(ListHoursOfOperations) を実行して必要情報を取得します。
既存のキューを選択すると キューの詳細を取得 (DescribeQueue) APIが呼び出されます。
[完了]ボタンを押下すると、キューのステータス更新 (UpdateQueueStatus: "ENABLED") APIが呼び出されます。
上記までのAPI呼び出しが完了すると、コンタクトセンターキューのマッピング情報が作成され、成功/失敗の結果がパートナーテレフォニーコンタクトセンター作成時のシステム管理者のメールアドレスに送信されます。

既存のキューを選択、API呼び出しの流れ
既存のキューを選択、API呼び出しの流れ

コンタクトセンターキュー削除

削除時は、ルーティングプロファイル一覧取得 (ListRoutingProfiles) -> ルーティングプロファイルからキューを解除( DisassociateRoutingProfileQueues ) が割り当てられている数分実行 -> キューのステータス無効化 (UpdateQueueStatus: "DISABLED") APIがコールされます。

コンタクトセンターキューを削除すると

  • コンタクトセンターキューのマッピング情報が削除されます
  • Salesforce側のキューは削除されません
  • Amazon Connect側のキューは削除されず無効化されます
    最後に成功/失敗の結果がパートナーテレフォニーコンタクトセンター作成時のシステム管理者のメールアドレスに送信されます。

キュー削除、API呼び出しの流れ
キュー削除、API呼び出しの流れ

注意: すでに Amazon Connect 側のキューが削除されている場合、ResourceNotFoundException エラーが発生した旨のメールが送信されます。
コンタクトセンターキューを画面から削除できなくなるため注意してください。

コンタクトセンターキューに残る
コンタクトセンターキューに残る

また、Summer '26 時点では コンタクトセンターキュー削除失敗後に Salesforceのバックエンドからの ListRoutingProfiles APIの呼び出しが止まらなくなる問題が発生するので注意してください。
約1秒に1回頻度でListRoutingProfilesの呼び出しがされ続ける
約1秒に1回頻度でListRoutingProfilesの呼び出しがされ続ける

コンタクトセンターグループ

コンタクトセンターグループ作成

[追加]ボタンを押下するとモーダル画面が表示され、ListQueues APIがコールされキュー一覧を取得します。
グループ追加のパラメータを入力し[完了]すると、ルーティングプロファイルの作成(CreateRoutingProfile) -> ルーティングプロファイルのキュー一覧取得(ListRoutingProfileQueues) -> ルーティングプロファイルにキューの割り当て(AssociateRoutingProfileQueues) -> ルーティングプロファイル一覧取得(ListRoutingProfiles) が呼び出されます。
その後、コンタクトセンターグループのマッピング情報が作成され、ルーティングプロファイルの内容が反映されます。
最後に成功/失敗の結果がパートナーテレフォニーコンタクトセンター作成時のシステム管理者のメールアドレスに送信されます。

コンタクトセンターグループ作成、API呼び出しの流れ
コンタクトセンターグループ作成、API呼び出しの流れ

コンタクトセンターグループ既存のプロファイルを選択

[追加]ボタンを押下するとモーダル画面が表示され、 キュー一覧取得 ( ListQueues )をAPIがコールされます。
[既存の Amazon Connect ルーティングプロファイルを選択] を選択すると、 ルーティングプロファイル一覧取得 (ListRoutingProfile) API がコールされます。

[Amazon Connect ルーティングプロファイル]のプルダウンメニューからプロファイルを選択すると、ルーティングプロファイルの詳細を取得 ( DescribeRoutingProfile ) APIが呼び出されます。
合わせて、ルーティングプロファイルに割り当てられているキュー一覧取得 (ListRoutingProfileQueues ) -> すでに割り当てられているキュー全てに対して キューの詳細を取得( DescribeQueue )APIが呼び出されます。

[完了]ボタンを押下すると、再度 ListRoutingProfileQueues -> DescribeRoutingProfile -> DescribeQueue が実行された後、ルーティングプロファイルの名称更新で上書き ( UpdateRoutingProfileName ) -> ルーティングプロファイルに割り当てられているキュー一覧取得(ListRoutingProfileQueues) -> デフォルトアウトバウンドキューを更新で上書き ( UpdateRoutingProfileDefaultOutboundQueue ) -> 追加で関連付けられたキューを設定している場合、ルーティングプロファイルのキュー割り当て ( AssociateRoutingProflileQueues ) がキューの数分実行する、APIが呼び出されます。次にルーティングプロファイル一覧を取得 (ListRoutingProfiles) API呼び出しが完了します。
その後、コンタクトセンターグループのマッピング情報が作成され、ルーティングプロファイルの内容が反映されます。
最後に成功/失敗の結果がパートナーテレフォニーコンタクトセンター作成時のシステム管理者のメールアドレスに送信されます。

コンタクトセンターグループ既存のプロファイルを選択時、API呼び出しの流れ
コンタクトセンターグループ既存のプロファイルを選択時、API呼び出しの流れ

コンタクトセンターグループ削除

Summer '26・コンタクトセンターバージョン21.0時点では、削除には対応していません。

コンタクトセンターチャネル設定

コンタクトフローからの Lambda関数を介した executeOmniFlow で、電話番号に1対1で返却するキュー や 電話番号をキーにしたオムニチャネルフロー実行の登録を行うことができます。

[追加]ボタンを押下するとモーダル画面が表示され、 電話番号一覧取得 ( ListPhoneNumbers )をAPIがコールされます。
[保存]すると ContactCenterChannel をオブジェクトをベースとして、 MessagingChannel オブジェクトを作成します。

  • 共通の情報
    • ContactCenterChannel
      • ContactCenterId: コンタクトセンターID
      • ChannelId: MessagingChannelのID
    • MessagingChannel
      • MasterLabel: チャネル名
      • MessageType: "Voice"
      • MessagingPlatformKey: E.164形式のAmazon Connect側の電話番号
      • PlatformType: "Enhanced"
      • ConsentType: "ImplicitOptIn"
  • 差分情報
    • 通話のルーティング種別 = なし
      • MessagingChannel
        • SessionHandlerId: null
        • FallbackQueueId: null
    • 通話のルーティング種別 = キュー
      • MessagingChannel
        • SessionHandlerId: SalesforceキューのレコードID
        • FallbackQueueId: null
    • 通話のルーティング種別 = オムニチャネルフロー
      • MessagingChannel
        • SessionHandlerId: オムニチャネルフローのID
        • FallbackQueueId: SalesforceキューのレコードID
    • ボイスメールのルーティング種別 = なし
      • ContactCenterChannel
        • VoicemailHandler: null
        • VoicemailFallbackQueueId: null
    • ボイスメールのルーティング種別 = キュー
      • ContactCenterChannel
        • VoicemailHandler: SalesforceキューのレコードID
        • VoicemailFallbackQueueId: null
    • ボイスメールのルーティング種別 = オムニチャネルフロー
      • ContactCenterChannel
        • VoicemailHandler: オムニチャネルフローのID
        • VoicemailFallbackQueueId: SalesforceキューのレコードID

削除: パートナーテレフォニーコンタクトセンターからコンタクトセンターチャネルを削除することで登録が解除できます。
なお、コンタクトセンターチャネルを削除しても、MessagingChannelオブジェクトは残り続けます( delete()をサポートしていない )。IsActiveフィールド= false で無効の状態で残ります。

リレーションは次の通りです。

コンタクトセンターチャネルの設定ダイアログ表示時、API呼び出しの流れ
コンタクトセンターチャネルの設定ダイアログ表示時、API呼び出しの流れ

プレゼンス状況の対応付け

プレゼンスの対応付を行うためには事前に Salesforce側に "プレゼンス状況" を、Amazon Connect 側に "エージェントステータス" を作成しておきます。
[プレゼンス状況の対応付け]セクションの[追加]ボタンを押下すると、エージェントステータス一覧取得( ListAgentStatuses ) APIが呼び出されます。
Salesforce側のプレゼンス状況とAmazon Connect側のエージェントステータスがそれぞれ表示されます。
対応付けをそれぞれ選択し[保存]したら Salesforce に VendorCallCenterStatusMap レコードが作成されプレゼンス状況と紐付けが行われます。

  • ServicePresenceStatus(プレゼンス状況)
    • DeveloperName: API 参照名
    • MasterLabel: 状況名
  • VendorCallCenterStatusMap
    • ServicePresenceStatusId: ServicePresenceStatus オブジェクトへのレコードID
    • ExternalStatus: Amazon Connect のエージェントステータスのARN
    • CallCenterId: コールセンターのレコードID

プレゼンス状況の対応付けの削除を行うと、VendorCallCenterStatusMap オブジェクトのレコードが削除されます。
プレゼンスの状況は削除されず残ります。

リレーションは次の通りです。

プレゼンス状況の対応付けダイアログ表示時のAPI呼び出しの流れ
プレゼンス状況の対応付けダイアログ表示

キーを更新

[キーを更新]を実行すると、Telephony Integration API で利用するJWTベアラーフローによる認証時の公開鍵と秘密鍵が更新されます。

Salesforceのシステムが ProvisoningRole ロールを引き受け、AuthKeysSSMUtilsFunctions 関数を呼び出します。
AuthKeysSSMUtilsFunctions にて秘密鍵と公開鍵を生成し、SecretsManager から ***-salesforce-secretのシークレット値を取得(GetSecretValue) します。
シークレット値の中のキー ***-scrt-jwt-auth-private-key に秘密鍵の値をセットし、シークレット値を更新 ( UpdateSecret )を行います。

更新が完了したら、公開鍵がLambda関数のレスポンスとして返り、 CallCenter メタデータの name=reqTelephonyIntegrationCertificate の値(value) が新しい証明書(公開鍵)の値で更新されます

最後にキーペアが更新された旨のメールが通知されます。
キーペアには期限があります。詳細は 公式ページ コンタクトセンターの鍵のペアの更新 を参照してください。

キー更新の流れ
キー更新の流れ

更新をインストール

古いコンタクトセンターのバージョンを利用していると、設定画面の上部に警告のお知らせが表示されます。
合わせて、パートナーテレフォニーコンタクトセンターの設定画面に [更新をインストール]のボタンとバージョンの左横に警告アイコンが表示されます。

手順やどのようなAPIがコールされるかはバージョンの記事を参照してください。

スタック更新の流れ
スタック更新の流れ

Salesforce側にパートナーテレフォニーコンタクトセンターを残しつつ、先にCloudFormationスタックを削除しているという状況では、AWS error message: Stack [${コンタクトセンターAPI参照名}-SCVBYOAContactCenterStack] does not exist というエラーが起きた旨のメールが通知されます。

削除 (コンタクトセンターを削除)

コンタクトセンターバージョン21.0 時点ではAWS側のリソースは削除されません。
手動でCloudFormationのスタックの削除が必要になります。
また、削除を実行するためには、コンタクトセンターに関連付けられている音声通話オブジェクトのレコードを全て削除する必要があります。

スタック削除後も以下のリソースが残るため手動での削除が必要です。

  • Amazon Connect Connect インスタンス
  • KMSのキーは削除保留中で7日間残り、その後自動で削除されます
  • S3バケットは (バケットにオブジェクトがある場合)スタックの削除に失敗します
    • 特に CloudTrail の証跡は削除操作自体のログが出力されるので、S3バケットの自動削除を無視するよう選択し再試行でスタック削除を行なう必要があります。スタックによるCloudTrailの証跡削除 → 手動でS3バケット削除の順を踏むことになります
  • CloudWatch ログループ (フローログやLambda関数の各種ログ)

パートナーテレフォニーコンタクトセンターの削除をメニューから選択
パートナーテレフォニーコンタクトセンターの削除をメニューから選択

ダイアログで削除を選択
ダイアログで削除を選択

削除実行後の表示
削除実行後の表示

詳細は公式ページ コンタクトセンターの削除を参照してください。

Amazon Connectインスタンス使い回し時の注意点
スタック削除後にContact Lens のストリームとの紐付け情報(StorageConfig)が内部で残っています。AWS CLIなどを用いて API 経由での削除を行なってください。

補足:パートナテレフォニーコンタクトセンター関連の標準オブジェクトの表現

パートナーテレフォニーコンタクトセンターを軸に、 Amazon Connectの情報と紐づける( CallCenterRoutingMap ) の リレーションは次の通りです。
なお、Group オブジェクトにはSalesforceのキューやコンタクトセンターグループなどTypeに応じた多目的なデータを格納します。
ここでは分かりやすさのため 本来は Salesforceのキューは Groupオブジェクトに保持されていますが、図では Group(Queue) で表現し、コンタクトセンターグループ(ルーティングプロファイル)は Group で表現しています。

上記をもとに、キューとユーザーに分けると次のように分けて考えることができます。

コンタクトセンターキューとコンタクトセンターグループ

Amazon Connect のキューは CallCenterRoutingMap と 1対1で紐づきます。
Amazon Connect のルーティングプロファイルは Groupオブジェクト と 1対1で紐づきます。

Amazon Connectのルーティングプロファイルには複数のキューが割り当てられます。
Salesforce側 ではこれを GroupMember オブジェクトをジャンクションオブジェクトとして Group オブジェクト 1に対して、GroupMember オブジェクト をNで紐付けます。
最後に QroupMemberQueue が 1対1で紐づきます
(なお、 SalesforceのキューとAmazon Connectのキューを紐付けないケースもあるため、正確には Queue から見たら CallCenterRoutingMapGroupMember はそれぞれ >=0 の関係になります)

  • CallCenterRoutingMap
    • DeveloperName: [SALESFORCE_QUEUE_NAME]_[CALL_CENTER_ID]
    • ExternalId: Amazon Connect のキューARN
      • 例: arn:aws:connect:ap-northeast-1:012345678901:instance/00000000-0000-4000-0000-000000000000/queue/11111111-1111-4111-1111-111111111111
    • ReferenceRecordId: Salesforce のキューのレコードID
      • 例: 00G***************
    • QuickConnect: Amazon Connect のクイック接続のID
      • 例: 22222222-4222-2222-2222-22222222222
  • Group (Queue):
    • Name: 表示ラベル
    • DeveloperName: キュー名
    • Type: Queue
    • QueueRoutingConfigId: ルーティング設定のレコードID
    • OwnerId: キューの所有者
      • 例: 00D**************
  • GroupMember: Group(コンタクトセンターグループ) と Queue(Salesforceキュー) を紐づけるジャンクション
    • GroupId: Salesforce のキューのレコードID
      • 例: 00G***************
    • UserOrGroupId: コンタクトセンターグループのレコードID
      • 例: `00G***************``
  • Group : コンタクトセンターグループ
    • Name: コンタクトセンターグループ名
    • DeveloperName: コンタクトセンターグループのAPI参照名
    • Type: ContactCenterGroup
    • OwnerId: 組織ID
      • 例: 00D**************

コンタクトセンターユーザーとコンタクトセンターグループ

Amazon Connect のユーザーは CallCenterRoutingMap と 1対1で紐づきます。
次にAmazon Connect のルーティングプロファイルは Groupオブジェクト と 1対1で紐づきます。

Amazon Connectのルーティングプロファイルには複数のキューが紐付けられます。
Salesforce側 ではこれを、GroupMember オブジェクトをジャンクションオブジェクトとして Group オブジェクト 1に対して、GroupMember オブジェクト をNで紐付けます。
最後に QroupMemberQueue が 1対1で紐づきます
(なお、 SalesforceのキューとAmazon Connectのキューを紐付けないケースもあるため、正確には Queue から見たら CallCenterRoutingMapGroupMember はそれぞれ >=0 の関係になります)

  • CallCenterRoutingMap(User)
    • DeveloperName: User_[SALESFORCE_USER_ID]_[CALL_CENTER_ID]
    • ExternalId: Amazon Connect のキューARN
      • 例: arn:aws:connect:ap-northeast-1:738910090858:instance/00000000-0000-4000-0000-000000000000/agent/33333333-3333-4333-3333-33333333333
    • ReferenceRecordId: Salesforce のユーザーのレコードID
      • 例: 005*************
  • GroupMember
    • GroupId: SalesforceのユーザーのレコードID
      • 例: 005***************
    • UserOrGroupId: コンタクトセンターグループのレコードID
      • 例: 00G***************
    • Group : コンタクトセンターグループ
      • Name: コンタクトセンターグループ名
      • DeveloperName: コンタクトセンターグループのAPI参照名
      • Type: ContactCenterGroup
      • OwnerId: 組織ID
        • 例: 00D**************

オムニチャネル: ルーティング設定

  • QueueRoutingConfig": Salesforce のルーティング設定
  • Group: Salesforce のキュー
    • Name: Salesforce のキューの表示ラベル
    • DeveloperName: Salesforce のキューのキュー名(API参照名)
    • Type: Queue で固定
    • QueueRoutingConfigId: ルーティング設定のレコードID

参考URL:

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?