📝

Amazon Connect のデータストリーミングのデータを Lambda で取得してみた

に公開

Enable data streaming for your Amazon Connect instance - Amazon Connect
以下の構成を試してみました。

前提

  • リージョン: バージニア北部
  • Amazon Connect インスタンス作成済み
  • 電話番号取得済み

01. データストリームの作成

データストリーム名のみ入力し、その他設定はデフォルトで作成します。

02. Lambda 関数の作成

以下の内容で作成します。

  • ランタイム: Python 3.13
  • 実行ロールの権限: AdministratorAccess
  • コード
import json
import base64
import logging

# ログレベルを設定
logger = logging.getLogger()
logger.setLevel(logging.INFO)

def lambda_handler(event, context):
    logger.info("Lambda function started")
    
    for record in event['Records']:
        payload = base64.b64decode(record['kinesis']['data'])
        data = json.loads(payload)
        
        logger.info(f"Connect Data: {json.dumps(data, indent=2)}")
    
    return {
        'statusCode': 200,
        'body': json.dumps('Successfully processed records')
    }

上記コードデプロイ後、Lambda トリガーに手順 01 のデータストリームを指定します。
トリガーの設定はデフォルトで OK です。

03. Amazon Connect インスタンスでデータストリーミングを有効化

Amazon Connect インスタンスでデータストリーミングを有効化します。

04. コンタクトフローの作成

以下の内容で作成します。

  • ログ記録動作の設定
  • 音声の設定: 日本語
  • プロンプトの再生: テキスト読み上げまたはチャットテキスト
こんにちは。データストリーミングのテストです。


コンタクトフローの公開後、電話番号を上記フローに紐づけます。

05. 動作確認

CCP から上記電話番号に架電し、プロンプトが再生されれば OK です。
切電後、CloudWatch Logs に Lambda 関数の実行ログが出力されています。

{
  "AWSAccountId": "012345678901",
  "AgentARN": "arn:aws:connect:us-east-1:012345678901:instance/3d725830-a4c0-4e1d-8514-d94b67a0ed87/agent/966a5995-ff79-4e12-a09f-f93ec70e9001",
  "CurrentAgentSnapshot": {
    "AgentStatus": {
      "ARN": "arn:aws:connect:us-east-1:012345678901:instance/3d725830-a4c0-4e1d-8514-d94b67a0ed87/agent-state/45d8f3a6-827e-4232-85bd-95cd8bdfa8f8",
      "Name": "Available",
      "StartTimestamp": "2025-07-16T01:16:30.363Z",
      "Type": "ROUTABLE"
    },
    "Configuration": {
      "AgentHierarchyGroups": null,
      "AutoAccept": false,
      "FirstName": "xxx",
      "LanguageCode": "ja_JP",
      "LastName": "xxx",
      "Proficiencies": [],
      "RoutingProfile": {
        "ARN": "arn:aws:connect:us-east-1:012345678901:instance/3d725830-a4c0-4e1d-8514-d94b67a0ed87/routing-profile/68b91a77-1625-4467-9310-7892ed7115a0",
        "Concurrency": [
          {
            "AvailableSlots": 0,
            "Channel": "CHAT",
            "CurrentAvailableSlots": 0,
            "MaximumSlots": 2
          },
          {
            "AvailableSlots": 0,
            "Channel": "TASK",
            "CurrentAvailableSlots": 0,
            "MaximumSlots": 1
          },
          {
            "AvailableSlots": 0,
            "Channel": "VOICE",
            "CurrentAvailableSlots": 0,
            "MaximumSlots": 1
          }
        ],
        "DefaultOutboundQueue": {
          "ARN": "arn:aws:connect:us-east-1:012345678901:instance/3d725830-a4c0-4e1d-8514-d94b67a0ed87/queue/7201f89c-93da-4859-8d46-5e3dff9a613e",
          "Channels": ["VOICE"],
          "Name": "BasicQueue"
        },
        "InboundQueues": [
          {
            "ARN": "arn:aws:connect:us-east-1:012345678901:instance/3d725830-a4c0-4e1d-8514-d94b67a0ed87/queue/7201f89c-93da-4859-8d46-5e3dff9a613e",
            "Channels": ["CHAT", "TASK", "VOICE"],
            "Name": "BasicQueue"
          },
          {
            "ARN": "arn:aws:connect:us-east-1:012345678901:instance/3d725830-a4c0-4e1d-8514-d94b67a0ed87/queue/agent/966a5995-ff79-4e12-a09f-f93ec70e9001",
            "Channels": ["CHAT", "TASK", "VOICE"],
            "Name": null
          }
        ],
        "Name": "Basic Routing Profile"
      },
      "SipAddress": "",
      "Username": "xxx"
    },
    "Contacts": [
      {
        "Channel": "VOICE",
        "ConnectedToAgentTimestamp": "2025-07-16T01:18:02.190Z",
        "ContactId": "badb0a74-30e5-4570-aa17-a5b469be7d91",
        "InitialContactId": "badb0a74-30e5-4570-aa17-a5b469be7d91",
        "InitiationMethod": "OUTBOUND",
        "Queue": {
          "ARN": "arn:aws:connect:us-east-1:012345678901:instance/3d725830-a4c0-4e1d-8514-d94b67a0ed87/queue/7201f89c-93da-4859-8d46-5e3dff9a613e",
          "Name": "BasicQueue"
        },
        "QueueTimestamp": null,
        "State": "CONNECTED",
        "StateStartTimestamp": "2025-07-16T01:18:02.247Z"
      }
    ],
    "NextAgentStatus": null
  },
  "EventId": "f777283c-d9c2-4222-97bd-205f2b27791d",
  "EventTimestamp": "2025-07-16T01:18:02.248Z",
  "EventType": "STATE_CHANGE",
  "InstanceARN": "arn:aws:connect:us-east-1:012345678901:instance/3d725830-a4c0-4e1d-8514-d94b67a0ed87",
  "PreviousAgentSnapshot": {
    "AgentStatus": {
      "ARN": "arn:aws:connect:us-east-1:012345678901:instance/3d725830-a4c0-4e1d-8514-d94b67a0ed87/agent-state/45d8f3a6-827e-4232-85bd-95cd8bdfa8f8",
      "Name": "Available",
      "StartTimestamp": "2025-07-16T01:16:30.363Z",
      "Type": "ROUTABLE"
    },
    "Configuration": {
      "AgentHierarchyGroups": null,
      "AutoAccept": false,
      "FirstName": "xxx",
      "LanguageCode": "ja_JP",
      "LastName": "xxx",
      "Proficiencies": [],
      "RoutingProfile": {
        "ARN": "arn:aws:connect:us-east-1:012345678901:instance/3d725830-a4c0-4e1d-8514-d94b67a0ed87/routing-profile/68b91a77-1625-4467-9310-7892ed7115a0",
        "Concurrency": [
          {
            "AvailableSlots": 0,
            "Channel": "CHAT",
            "CurrentAvailableSlots": 0,
            "MaximumSlots": 2
          },
          {
            "AvailableSlots": 0,
            "Channel": "TASK",
            "CurrentAvailableSlots": 0,
            "MaximumSlots": 1
          },
          {
            "AvailableSlots": 0,
            "Channel": "VOICE",
            "CurrentAvailableSlots": 0,
            "MaximumSlots": 1
          }
        ],
        "DefaultOutboundQueue": {
          "ARN": "arn:aws:connect:us-east-1:012345678901:instance/3d725830-a4c0-4e1d-8514-d94b67a0ed87/queue/7201f89c-93da-4859-8d46-5e3dff9a613e",
          "Channels": ["VOICE"],
          "Name": "BasicQueue"
        },
        "InboundQueues": [
          {
            "ARN": "arn:aws:connect:us-east-1:012345678901:instance/3d725830-a4c0-4e1d-8514-d94b67a0ed87/queue/7201f89c-93da-4859-8d46-5e3dff9a613e",
            "Channels": ["CHAT", "TASK", "VOICE"],
            "Name": "BasicQueue"
          },
          {
            "ARN": "arn:aws:connect:us-east-1:012345678901:instance/3d725830-a4c0-4e1d-8514-d94b67a0ed87/queue/agent/966a5995-ff79-4e12-a09f-f93ec70e9001",
            "Channels": ["CHAT", "TASK", "VOICE"],
            "Name": null
          }
        ],
        "Name": "Basic Routing Profile"
      },
      "SipAddress": "",
      "Username": "xxx"
    },
    "Contacts": [
      {
        "Channel": "VOICE",
        "ConnectedToAgentTimestamp": null,
        "ContactId": "badb0a74-30e5-4570-aa17-a5b469be7d91",
        "InitialContactId": "badb0a74-30e5-4570-aa17-a5b469be7d91",
        "InitiationMethod": "OUTBOUND",
        "Queue": {
          "ARN": "arn:aws:connect:us-east-1:012345678901:instance/3d725830-a4c0-4e1d-8514-d94b67a0ed87/queue/7201f89c-93da-4859-8d46-5e3dff9a613e",
          "Name": "BasicQueue"
        },
        "QueueTimestamp": null,
        "State": "CONNECTING",
        "StateStartTimestamp": "2025-07-16T01:17:54.944Z"
      }
    ],
    "NextAgentStatus": null
  },
  "Version": "2017-10-01"
}

上記データからリアルタイムにコンタクトを分析することができますが、今回は分析までは行いません。
リアルタイムモニタリングの方法については AWS 公式ブログなどをご参照ください。

まとめ

今回は Amazon Connect のデータストリーミングのデータを Lambda で取得してみました。
どなたかの参考になれば幸いです。

参考資料

Discussion