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?

【Amazon Connect】データテーブル機能試してみた!

Last updated at Posted at 2025-12-23

はじめに

こんにちは!廣田です。
今回は、Amazon Connect にデータテーブル機能が追加されたので、さっそく試してみました!

データテーブル

データテーブルは、Amazon Connect 内の構成に影響を与えるデータを保存および管理できる機能です。
フローやビューなどの他のリソースからデータテーブルを参照できます。
データテーブルに変更や追加が行われた時、再公開をする必要がなく、パブリック APIおよびコンソール上で即座に利用することが可能です。

前提

  • Amazon Connect インスタンスが構築済みであること
  • 東京リージョン(ap-northeast-1)

初期設定

  • セキュリティプロファイルの更新
    • ログインするユーザーに紐付いているセキュリティプロファイルを編集
    • ルーティング > データテーブル へのアクセスを許可する
      image.png
    • 保存
  • 管理者ワークスペースからルーティングで確認
    image.png

これで、データテーブルとレコードを作成することができます。

検証すること

今回は、コンタクトフロー内の「プロンプトの再生」で使う SSML をデータテーブルのレコードに格納し、参照して再生できるかを試してみたいと思います。

構築手順

データテーブルを作成

  • 名前:ssml-table
  • 説明:今回は設定なし
  • タイムゾーン:Japan(Asia/Tokyoも選べますが、違いはまだ把握できていません。)
  • ロックレベル:なし
    image.png

属性を設定

  • 属性
    • 名前:Id
    • タイプ:数値
    • プライマリ属性の設定:オン
    • コレクションの検証:なし
      image.png
    • 名前:Text
    • タイプ:テキスト
    • プライマリ属性の設定:オフ
    • コレクションの検証:なし
      image.png

これで、テーブルの属性(列)が作成できました。
image.png

レコードを追加

image.png

追加する Text の内容
<speak>
<prosody rate="$.Attributes.speed" >
オペレーターにお繋ぎします。
</prosody>
</speak>

コンタクトフローを作成

以下のようなコンタクトフローを作成しました。

image.png

補足:データテーブル

  • 手動で設定:オン
    • データテーブル:ssml-table
    • クエリ
      • クエリ名:GetSSMLText
      • プライマリ属性名:Id
      • 属性キーを入力:0
      • クエリ属性:Text

※注意点

  • クエリ名とクエリ属性は「プロンプトの再生」にて使用しますので、覚えておいてください
  • クエリ名はフロー内で一意になる必要があります

image.png

補足:プロンプトの再生

  • テキスト読み上げまたはチャットテキスト:オン
    • 動的に設定:オン
      • 名前空間:データテーブル
      • キー:GetSSMLText.Text
    • 次として解釈:SSML

image.png

検証用コンタクトフロー(.json)
{
  "Version": "2019-10-30",
  "StartAction": "65f38220-cc0c-4983-90f8-6440c2a6478c",
  "Metadata": {
    "entryPointPosition": {
      "x": -218.4,
      "y": -87.2
    },
    "ActionMetadata": {
      "65f38220-cc0c-4983-90f8-6440c2a6478c": {
        "position": {
          "x": -120,
          "y": -88
        }
      },
      "b6c898b4-70ce-4a43-a8d1-9eb50566db49": {
        "position": {
          "x": 116.8,
          "y": -82.4
        },
        "children": [
          "985f9948-5a5d-434e-a7b1-e516b879a094"
        ],
        "parameters": {
          "TextToSpeechVoice": {
            "languageCode": "ja-JP"
          }
        },
        "overrideConsoleVoice": true,
        "fragments": {
          "SetContactData": "985f9948-5a5d-434e-a7b1-e516b879a094"
        },
        "overrideLanguageAttribute": true
      },
      "985f9948-5a5d-434e-a7b1-e516b879a094": {
        "position": {
          "x": 116.8,
          "y": -82.4
        },
        "dynamicParams": []
      },
      "c2765a63-23a8-4b1b-a117-c3b4f6eecb92": {
        "position": {
          "x": 366.4,
          "y": 194.4
        }
      },
      "6e0890d3-c3f4-47b7-829e-045524cca301": {
        "position": {
          "x": 617.6,
          "y": 239.2
        }
      },
      "23a6707a-b58b-44a1-99b5-a74f0414211c": {
        "position": {
          "x": 347.2,
          "y": -70.4
        },
        "dynamicParams": []
      },
      "8bffaf56-7d9a-441b-be00-0a8ccaa2dc3f": {
        "position": {
          "x": 124.8,
          "y": 177.6
        },
        "parameters": {
          "QueueId": {
            "displayName": "BasicQueue"
          }
        },
        "queue": {
          "text": "BasicQueue"
        }
      },
      "f2d96326-7eb0-43d5-bf6f-2eb971e64a0a": {
        "position": {
          "x": 576.8,
          "y": -46.4
        },
        "parameters": {
          "DataTableId": {
            "displayName": "ssml-table"
          }
        }
      },
      "7cb1ab3c-3259-4aed-971e-359bdfa78f71": {
        "position": {
          "x": -123.2,
          "y": 144
        },
        "parameters": {
          "SSML": {
            "useDynamic": true
          }
        },
        "useDynamic": true
      }
    },
    "Annotations": [],
    "name": "検証用コンタクトフロー",
    "description": "",
    "type": "contactFlow",
    "status": "published",
    "hash": {}
  },
  "Actions": [
    {
      "Parameters": {
        "FlowLoggingBehavior": "Enabled"
      },
      "Identifier": "65f38220-cc0c-4983-90f8-6440c2a6478c",
      "Type": "UpdateFlowLoggingBehavior",
      "Transitions": {
        "NextAction": "b6c898b4-70ce-4a43-a8d1-9eb50566db49"
      }
    },
    {
      "Parameters": {
        "TextToSpeechEngine": "Neural",
        "TextToSpeechStyle": "None",
        "TextToSpeechVoice": "Kazuha"
      },
      "Identifier": "b6c898b4-70ce-4a43-a8d1-9eb50566db49",
      "Type": "UpdateContactTextToSpeechVoice",
      "Transitions": {
        "NextAction": "985f9948-5a5d-434e-a7b1-e516b879a094",
        "Errors": [
          {
            "NextAction": "23a6707a-b58b-44a1-99b5-a74f0414211c",
            "ErrorType": "NoMatchingError"
          }
        ]
      }
    },
    {
      "Parameters": {
        "LanguageCode": "ja-JP"
      },
      "Identifier": "985f9948-5a5d-434e-a7b1-e516b879a094",
      "Type": "UpdateContactData",
      "Transitions": {
        "NextAction": "23a6707a-b58b-44a1-99b5-a74f0414211c",
        "Errors": [
          {
            "NextAction": "23a6707a-b58b-44a1-99b5-a74f0414211c",
            "ErrorType": "NoMatchingError"
          }
        ]
      }
    },
    {
      "Parameters": {},
      "Identifier": "c2765a63-23a8-4b1b-a117-c3b4f6eecb92",
      "Type": "TransferContactToQueue",
      "Transitions": {
        "NextAction": "6e0890d3-c3f4-47b7-829e-045524cca301",
        "Errors": [
          {
            "NextAction": "6e0890d3-c3f4-47b7-829e-045524cca301",
            "ErrorType": "QueueAtCapacity"
          },
          {
            "NextAction": "6e0890d3-c3f4-47b7-829e-045524cca301",
            "ErrorType": "NoMatchingError"
          }
        ]
      }
    },
    {
      "Parameters": {},
      "Identifier": "6e0890d3-c3f4-47b7-829e-045524cca301",
      "Type": "DisconnectParticipant",
      "Transitions": {}
    },
    {
      "Parameters": {
        "Attributes": {
          "speed": "80%"
        },
        "TargetContact": "Current"
      },
      "Identifier": "23a6707a-b58b-44a1-99b5-a74f0414211c",
      "Type": "UpdateContactAttributes",
      "Transitions": {
        "NextAction": "f2d96326-7eb0-43d5-bf6f-2eb971e64a0a",
        "Errors": [
          {
            "NextAction": "f2d96326-7eb0-43d5-bf6f-2eb971e64a0a",
            "ErrorType": "NoMatchingError"
          }
        ]
      }
    },
    {
      "Parameters": {
        "QueueId": "arn:aws:connect:ap-northeast-1:738910090858:instance/7922efd0-d5d9-4445-b9ea-a077e39f2f5e/queue/6d2e7520-0faf-455b-b5d6-0d19b984c8f4"
      },
      "Identifier": "8bffaf56-7d9a-441b-be00-0a8ccaa2dc3f",
      "Type": "UpdateContactTargetQueue",
      "Transitions": {
        "NextAction": "c2765a63-23a8-4b1b-a117-c3b4f6eecb92",
        "Errors": [
          {
            "NextAction": "6e0890d3-c3f4-47b7-829e-045524cca301",
            "ErrorType": "NoMatchingError"
          }
        ]
      }
    },
    {
      "Parameters": {
        "DataTableId": "c9644cee-777d-4ae5-85f6-1c4a7c4dc653",
        "Queries": [
          {
            "QueryName": "GetSSMLText",
            "Attributes": [
              "Text"
            ],
            "PrimaryValues": [
              {
                "AttributeName": "Id",
                "Value": "0"
              }
            ]
          }
        ]
      },
      "Identifier": "f2d96326-7eb0-43d5-bf6f-2eb971e64a0a",
      "Type": "EvaluateDataTableValues",
      "Transitions": {
        "NextAction": "7cb1ab3c-3259-4aed-971e-359bdfa78f71",
        "Errors": [
          {
            "NextAction": "7cb1ab3c-3259-4aed-971e-359bdfa78f71",
            "ErrorType": "NoMatchingError"
          }
        ]
      }
    },
    {
      "Parameters": {
        "SSML": "$.DataTables.GetSSMLText.Text"
      },
      "Identifier": "7cb1ab3c-3259-4aed-971e-359bdfa78f71",
      "Type": "MessageParticipant",
      "Transitions": {
        "NextAction": "8bffaf56-7d9a-441b-be00-0a8ccaa2dc3f",
        "Errors": [
          {
            "NextAction": "8bffaf56-7d9a-441b-be00-0a8ccaa2dc3f",
            "ErrorType": "NoMatchingError"
          }
        ]
      }
    }
  ]
}

検証結果

実際に電話をかけ、プロンプトが再生されることを確認しました。
以下はCloudWatch ログの抜粋です。

{
    "ContactFlowModuleType": "EvaluateDataTableValues",
    "ResultData": {
        "ResultData": {
            "GetSSMLText": {
                "AttributeCount": 1
            }
        },
        "Result": "EXECUTION_RESULT"
    },
    "Parameter": {
        "Queries": [
            {
                "QueryName": "GetSSMLText",
                "Attributes": [
                    "Text"
                ],
                "PrimaryValues": [
                    {
                        "AttributeName": "Id",
                        "Value": "0"
                    }
                ]
            }
        ]
    }
}
{
    "ContactFlowModuleType": "PlayPrompt",
    "Parameters": {
        "TextToSpeechType": "ssml",
        "Text": "<speak> <prosody rate=\"$.Attributes.speed\" > オペレーターにお繋ぎします。 </prosody> </speak>"
    }
}

想定どおりの音声が聞こえました!
CloudWatch ログを確認しても、データテーブルに設定したSSMLが出力されていることが分かります。

想定されるユースケース例

  • 窓口ごとのメッセージやキューを設定して、分岐させる(1つの電話番号で複数窓口を運営している場合)
  • 内線番号とエージェントまたはキューのマッピング

まとめ

今回は、Amazon Connect のデータテーブル機能を使ってみました!
これまで外部テーブルを使う場合は Amazon DynamoDB などを用意する必要があり、コンタクトフロー外でリソースの設定を管理するのが少し大変でした。
今回のアップデートにより、リソースの設定をデータテーブルに集約し、変更もデータテーブル側で完結できるようになりました。
また、コンタクトフロー上でさまざまな条件分岐を構築している場合、分岐ロジックを表として表現することが可能だと思います。

今後も「こんな使い方できるよ!」というネタを見つけたら、また発信します!

参考記事

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?