Amazon Connect
Amazon ConnectネイティブのサードパーティAIエージェント(A2A)インテグレーションを通じて、Amazon Connectの音声コンタクトをElevenAgentsに引き渡します。
Amazon Connectインテグレーションは限定提供中です。AWSアカウントでAmazon ConnectのサードパーティAIエージェント サポートを有効にし、ElevenLabsトランスポートをワークスペースごとに有効化する必要があります。顧客トラフィックをルーティングする前に、 ElevenLabsの担当者にお問い合わせください。
概要
Amazon Connectインテグレーションでは、Amazon Connectのコンタクトフローを、オープンな A2Aプロトコルを拡張したAmazon ConnectのサードパーティAIエージェントプロトコルを介して、 ElevenAgentsのエージェントに直接接続します。Amazon Connectがテレフォニー、ルーティング、キューを管理し、 ElevenAgentsが会話を管理します。SIPトランク、Twilio番号、ミドルウェアは不要です。AWSではこの機能を エージェント間コラボレーションとして文書化しています。 このガイドでは、ElevenLabs固有の内容と、ElevenLabsエージェントに接続するために必要なAWSの手順を説明します。
同じフローで、StartOutboundVoiceContactを使用して開始される着信通話と発信コンタクトに対応します。
ElevenLabsエージェントが終了すると、Amazon Connectはコンタクトフローを継続し、受信した
結果に基づいて分岐します。
インテグレーションの仕組み
- コンタクトフローが、
AMAZON.QInConnectIntentインテントを使用するAmazon Lex V2ボットを呼び出すGet customer inputブロックに到達します。 - Amazon ConnectのオーケストレーションAIエージェントが、会話を直ちにElevenLabs用に登録したサードパーティアプリケーションへ引き継ぎます。
- Amazon Connectが、AWS Secrets Managerに保存されたAPIキーで認証し、アプリケーションの
AccessUrlにあるElevenLabsエンドポイントへのWebSocketを開きます。 - Amazon Connectが発信者のチャネルが接続中であることを通知すると、Amazon ConnectとElevenLabsがA2Aメッセージとして16ビットリニアPCMオーディオを交換します。Amazon Connectがサンプルレートを提示し、ElevenLabsがそれを採用するため、エージェント側でオーディオ形式を変更する必要はありません。
- エージェントが通話を終了すると、ElevenLabsは
Complete結果でセッションを完了し、フローはLexブロックから続行されます。発信者を有人キューへルーティングするEscalate結果は通信上サポートされており、転送ツールで公開される予定です。詳しくは有人対応への転送をご覧ください。
要件
始める前に、以下を用意してください。
- アカウントとリージョンでサードパーティAIエージェントのサポートが有効になっている、Connect CustomerティアのAmazon Connectインスタンス。
- インスタンスに関連付けられたAmazon Q in Connectアシスタント。
- KMSキー、Secrets Managerシークレット、AppIntegrationsアプリケーション、Connectセキュリティプロファイル、Amazon Q in Connect AIエージェント、Lex V2ボット、コンタクトフローを作成するためのAWS権限。
- Amazon Connectトランスポートが有効なElevenLabsワークスペース。
- ElevenLabsエージェントと専用APIキー。
- AWS CLI v2と、リリース済みのCLIバージョンにリクエスト形式がまだ含まれていない呼び出し用のawscurl(
pip install awscurl)。
すべてのAWSリソースは、Amazon Connectインスタンスと同じアカウントおよびリージョンに保持してください。以下の手順では、対応している呼び出しにはAWS CLIを、対応していない呼び出しにはawscurl(SigV4署名付きHTTPリクエスト)を使用します。AWSの外部AIエージェントとのコラボレーションを設定する
方法に従い、ElevenLabs固有の値を追加しています。
ElevenLabsを設定する
エージェントを作成または選択する
ElevenAgentsでエージェントを作成します。引き継ぎ完了後すぐに話し始める場合は、最初のメッセージを設定してください。セッション中、Amazon Connectは独自の音声を再生しません。
通話終了を有効にする
Agent → Tools → System toolsでEnd callを有効にすると、発信者のリクエストが解決された際にエージェントがセッションを終了できます。Amazon Connectはその後、Complete結果でフローを続行します。
専用APIキーを作成する
エージェントと同じワークスペースでAPIキーを作成し、ElevenAgentsにスコープを設定します。次のセクションでAWS Secrets Managerに保存するため、他の場所には貼り付けないでください。
WebSocket URLを確認する
Amazon Connectは、エージェントIDを含むURLに接続します。
ElevenLabsアカウントが分離されたレジデンシー環境にある場合は、<region>をリージョンコードに置き換えてください。利用可能なリージョンについては、データレジデンシーをご覧ください。
AWSにElevenLabsアプリケーションを登録する
このセクションの操作はすべてAPI呼び出しです。再利用する値を一度設定します。
Amazon Q in Connectアシスタントを作成する
インスタンスにすでにアシスタントがある場合は、この手順をスキップしてください。ない場合は、作成してインスタンスに関連付けます。
アシスタントIDとARNを記録します。
APIキーを保存する
Amazon Connectは独自のサービスプリンシパルでSecrets Managerからキーを読み取るため、シークレットはconnect.amazonaws.comに復号アクセスを許可するカスタマー管理KMSキーで暗号化する必要があります。デフォルトのaws/secretsmanagerキーは使用できません。
シェル履歴にElevenLabs APIキーが残らないようファイルに保存してから、キーとシークレットを作成します。
Amazon Connectにシークレットの読み取りアクセスを許可します。

サードパーティアプリケーションを作成する
ElevenLabs WebSocket URLを、A2A_SERVERタイプのAppIntegrationsアプリケーションとして登録します。このタイプではAuthConfigが必須です。
レスポンスにはアプリケーションのIdとArnが含まれます。APPLICATION_IDおよびAPPLICATION_ARNとしてエクスポートしてください。Amazon ConnectコンソールにはA2A_SERVERアプリケーションが表示されないため、APIで確認します。
セキュリティプロファイルでアプリケーションを許可する
オーケストレーションAIエージェントに紐付けるセキュリティプロファイルでは、許可されたAIエージェントとしてアプリケーションを一覧に含める必要があります。含まれていない場合、引き継ぎは実行時に失敗します。
管理サイトにはプロファイルとその権限は表示されますが、許可されたAIエージェントは表示されません。これらはAPIからのみ確認できます。

オーケストレーションAIエージェントを作成して公開する
オーケストレーションエージェントは、オーディオストリーミングを有効にして、すべての音声会話を直ちにアプリケーションへ引き継ぎます。音声セッションには即時引き継ぎが必要です。ElevenLabsは、テキストストリーミング(audioStreamingEnabledをfalseに設定)およびdelegateAgentConfigurationをサポートしていません。
公開するとバージョン付きARN(<AI_AGENT_ARN>:1)が返され、コンタクトフローではこれを参照します。バージョンなしとバージョン付きの両方のエージェントにセキュリティプロファイルを紐付けます。

コンタクトフローを構築する
Lexボットを作成する
- 唯一のインテントが組み込みの
AMAZON.QInConnectIntentであり、アシスタントARNを設定したLex V2ボットを作成します。ほかのインテントは追加しないでください。 - ボットロケールでスピーチtoスピーチを有効にします。双方向オーディオストリーミングは、Sonicスピーチtoスピーチボットでのみ動作します。
- ボットのIAMロールにアシスタントを使用する権限を付与します。これがないと、リクエストがElevenLabsに到達する前にAWS内で
HTTP 403となり、引き継ぎに失敗します。次のようなポリシーをアタッチしてください。
- ボットをビルドし、バージョンとエイリアスを作成して、エイリアスをインスタンスに関連付けます。

アシスタントとLexブロックを追加する
フローデザイナーで、以下のブロックを順番に追加します。
- Set logging behavior:有効化します。以下の引き継ぎを検証するにはフローログを使用します。
- Connect assistant:Amazon Q in Connectアシスタントを選択します。
- Get customer input:Amazon LexタブでEnter an ARNを選択し、ボットエイリアスARNを貼り付けます。引き継ぎ前にAmazon Connectが何も再生しないよう、テキスト読み上げプロンプトは半角スペース1文字のままにします。Session attributesで、手動設定の属性を2つ追加します。

x-amz-lex:qic-audio-passthroughは、AWSのプレローンチ期間中にサードパーティ音声パスを有効化します。AWSによれば、この機能が一般公開されると属性は不要になりますが、そのまま残しても問題ありません。
結果に応じて分岐する
Amazon Connectは、ElevenLabsの結果を$.Lex.SessionAttributes.Tool属性としてフローに渡します。Lexブロックの後にCheck contact attributesブロックを追加し、NamespaceをLex、KeyをSession attributes、Session Attribute KeyをToolに設定します。次に、結果ごとにEquals条件を追加します。

Amazon Connectは、エージェントが送信する大文字の結果タイプではなく、タイトルケース(Escalate、Complete)でこれらの値を書き込みます。エクスポートしたフローでは、LexブロックのDefault出力はNoMatchingCondition遷移です。エラーメッセージではなく、比較ブロックにつながっていることを確認してください。

上記フローでは各結果の両方の表記を比較しているため、大文字・小文字の使い分けが変更されても動作し続けます。
インテグレーションをテストする
通話を発信する
電話番号に発信します。フローがLexブロックに到達してから数秒後にエージェントの最初のメッセージが再生されます。ElevenLabsに接続されるまで、AWS内の引き継ぎには約3秒かかります。短く会話してから別れの挨拶をしてください。エージェントがEnd callを呼び出し、ElevenLabsセッションがCompleteで終了すると、フローはLexブロックから続行されます。
動的変数
Amazon Connectは、すべてのセッションでコンタクトのシステム属性を送信します。ElevenLabsでは、 これらをセッション識別子とともに動的変数として公開します:
Amazon Connectセッションでは、受信・発信コンタクトのどちらでも、system__caller_idは常に顧客、system__called_number
は常にAmazon Connectの番号です。
Amazon Connectが送信するコンタクトコンテキストのその他すべてのメンバーも同様に公開されます。ネストされた
名前はアンダースコアで結合され、amazon_connect_プレフィックスの下でスネークケースに変換されます。
フロー内でSet contact attributesを使って設定したカスタムコンタクト属性は、AIエージェントのセキュリティプロファイルでコンタクト
属性を表示できる場合でも、Amazon Connectが現在送信するコンテキストには含まれません。AWSがこれらを含めるようになった場合は、同じプレフィックスの下に自動的に表示されます。Amazon Connectが共有するコンタクトデータを選択することはできません。AWSは固定のコンテキストセットを渡します。
追加のコンテキストを渡すには、
会話開始Webhookを使用してください。
Amazon Connectセッションでは、エージェントが話し始める前にWebhookが呼び出され、caller_idには顧客の番号、
called_numberにはAmazon Connectの番号、call_idにはAmazon ConnectコンタクトIDが設定されます。そのため、フロー内のLambdaでコンタクトIDをキーにコンタクト属性を保存し、Webhookから動的変数と設定オーバーライドとして返せます。
担当者への転送
ElevenLabsセッションがEscalate結果で終了すると、Amazon Connectはコンタクトを担当者キューにルーティングします。フローのEscalateブランチでは、Set working queueとTransfer to queueでこれを処理します。キュー処理、ウィスパーフロー、エージェント選択はすべてAmazon Connectが処理します。
Escalateのエージェント側トリガーは、すべてのプロバイダーで1つのツールで担当者への引き継ぎを扱えるよう、Amazon Connectの転送タイプとしてTransfer to numberツールに追加中です。提供開始までは、Amazon Connect上のElevenLabsエージェントは通話を終了(Complete)できますが、担当者へエスカレーションすることはできません。フローのEscalateブランチはそのまま維持してください。追加のフロー変更なしで機能し始めます。
End callツールはComplete結果を生成します。どちらの結果の後も、通話後分析と通話後Webhookは通常どおり実行されます。
Amazon Connectに戻されるのは、結果タイプと理由文字列のみです。ルーティングデータをフローに渡すには、amazon_connect_contact_idと保存する値を使用してAmazon ConnectのUpdateContactAttributes APIを呼び出すWebhookツールをエージェントに付与し、通話を終了する前に呼び出すよう指示してください。フローでは、Lexブロックの後にあるCheck contact attributesブロックでこれらの属性を読み取れます。通話後Webhookはフローがすでに続行された後に発火するため、ルーティングの判断ではなくCRMの更新に適しています。
トレース
Amazon Connectでは、すべてのコラボレーションについて外部エージェントによるトレースデータの送信が必要です。 Amazon Connectがセッションのトレーシングをサブスクライブすると、ElevenLabsはエージェントの各ターンについて、発信者の文字起こし、エージェントの応答、結果を含む各ツール呼び出し、スパンごとのタイミングを含むOpenTelemetryトレースを送信します。Amazon Connectはこれらのトレースをコンタクトとともに保存します。表示方法については、 AIエージェントトレースを参照してください。これらのトレース内の文字起こしとツール結果には、Amazon Connect内の他のコンタクトデータと同じ秘匿化設定が適用されるため、インテグレーションを有効にする前にデータ取り扱い要件を確認してください。通話後Webhookと同様に、トレースは独自のシステムに配信されます。ゼロ保持モードのエージェントもトレースを送信します。ゼロ保持はElevenLabsが保存するデータに適用され、Amazon Connectインスタンスが受信するデータには適用されないためです。
オーディオ
Amazon Connectは各セッションで8、16、または24kHzの16ビット・モノラル・リニアPCMを提案し、ElevenLabsはその提案を採用します。そのため、Amazon Connectセッションではエージェントに設定されたオーディオ形式は使用されません。発信者による割り込みはElevenLabsが検出し、Amazon Connectに報告するため、バッファリングされた再生は即座にフラッシュされます。Amazon Connectが収集したキーパッド入力は、DTMF数字としてエージェントに配信されます。Amazon Connect独自の無音マーカーは無視されます。無言の発信者に再度プロンプトを出すには、エージェントのターンタイムアウトを使用してください。
制限事項と未対応の機能
- クライアントツールとPlay keypad touch toneシステムツールはサポートされていません。Transfer to numberはまだAmazon Connectをサポートしていません。担当者への引き継ぎは、このツールのAmazon Connect転送タイプとして提供されます。
- データ収集結果はフローに返されず、Amazon Connectが共有するコンタクトデータを決定します。追加のコンテキストには
amazon_connect_contact_idをキーにした会話開始Webhookを、ルーティングデータにはUpdateContactAttributesを呼び出すWebhookツールを、それ以外には通話後Webhookを使用してください。 system__override_first_messageなどの設定オーバーライドはフローから渡せません。代わりに会話開始Webhookから返してください。- 音声セッションでは即時の引き継ぎが必要です。Amazon Connectチャットチャネル、テキストストリーミング、バックグラウンド(
delegateAgentConfiguration)コラボレーションはまだサポートされていません。 - Amazon Connectに送信されるトレースには、発信者の文字起こし、エージェントの応答、結果を含むツール呼び出し、タイミングが含まれます。ツール呼び出しパラメータは含まれません。
- Amazon Connectのサードパーティエージェントサポートは、AWSが有効化している場所でのみ利用でき、AWSから追加料金が発生する場合があります。
トラブルシューティング
フローが「A2A WebSocket upgrade ... failed(HTTP 403)」で失敗する
- このエラーは、リクエストがElevenLabsに到達する前にAWS内部で発生します。Lexサービスロールからの
wisdom:SendMessageに対するAccessDeniedがCloudTrailに記録されていないか確認してください。ボットにアタッチされたロールには、アシスタントとそのセッションに対するwisdom:CreateSession、wisdom:GetAssistant、wisdom:SendMessage、wisdom:GetNextMessageが必要です。 - セキュリティプロファイルでアプリケーションが許可されており、フローで参照されている公開済みオーケストレーションエージェントバージョンに関連付けられていることを確認してください。
- シークレットのKMSキーとリソースポリシーで
connect.amazonaws.comにアクセスが許可されていることを確認してください。
フローが「the hand-off to the target agent could not be completed」で失敗する
- Amazon Connectでは、WebSocket接続の確立に約20秒の猶予があります。
AccessUrlがAWSから到達可能であることを確認してください:wss://、正しいエージェントID、ネットワーク許可リストによる妨げがないこと。 - 独自のインフラストラクチャ経由で接続をプロキシしている場合は、そのプロキシをウォーム状態に保ってください。コールド状態のサーバーレスインスタンスでは引き継ぎの制限時間を超える場合があり、ElevenLabsがリクエストを受け取る前にAmazon Connectが中断します。
LexブロックがErrorブランチに進み、発信者に何も聞こえない
- Get customer inputブロックに両方のセッション属性が設定されていることを確認してください:公開済みでバージョン付きのエージェントARNを指定した
x-amz-lex:q-in-connect:ai-agent-arnと、trueに設定したx-amz-lex:qic-audio-passthroughです。 - アプリケーションを許可するセキュリティプロファイルが、そのエージェントバージョンにアタッチされていることを確認してください。
- フローログ内のブロックエントリを確認してください。Amazon Connectで発生したエラーが記録されています。
接続直後にセッションが終了する
AccessUrlがwss://を使用し、正しいエージェントIDを含み、ワークスペースが存在するリージョンを指していることを確認してください。- APIキーが有効で、エージェントのワークスペースに属し、IP制限がないことを確認してください。
- ワークスペースでAmazon Connectトランスポートが有効になっていることを確認してください。
エージェント終了後、発信者にフローのエラープロンプトが聞こえる
Lexブロックで、Default出力が$.Lex.SessionAttributes.Toolを比較するブロックにつながっていることを確認し、タイトルケースの値EscalateとCompleteに対して比較してください。
エージェントがまったく話さず、数秒後にセッションが終了する
コラボレーターでaudioStreamingEnabledがtrueに設定されていることを確認してください。テキストストリーミングではAmazon Connectがテキストターンを送信し、テキスト応答を期待しますが、ElevenLabsはこれをサポートしていません。ElevenLabsログにはINIT_SESSION carries no audio configurationと表示されます。
動的変数が見つからない
Amazon Connectは、上記のコンタクトシステム属性と識別子を提供します。フローで設定したカスタムコンタクト属性はエージェントに届きません。代わりに会話開始Webhook経由で渡してください。エージェントの最初のメッセージまたはプロンプトが一度も提供されない変数を参照している場合、セッションは起動時に失敗します。
