Amazon Connect
Amazon ConnectのネイティブなサードパーティAIエージェント(A2A)インテグレーションを通じて、Amazon Connectの音声コンタクトをElevenAgentsに引き渡します。
Amazon Connectインテグレーションは限定提供中です。AWSアカウントでAmazon ConnectのサードパーティAIエージェント サポートを有効にし、ワークスペースごとにElevenLabsトランスポートを有効化する必要があります。顧客トラフィックを ルーティングする前に、ElevenLabsの担当者にお問い合わせください。
概要
Amazon Connectインテグレーションでは、オープンな A2Aプロトコルの拡張であるAmazon ConnectのサードパーティAIエージェントプロトコルを介して、Amazon Connectのコンタクトフローを 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またはEscalateの結果で セッションを終了し、Lexブロックからフローが続行されます。詳細は 担当者への転送をご覧ください。
要件
開始する前に、以下を用意してください。
- アカウントとリージョンでサードパーティ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自体は何も再生しません。
End callを有効にする
Agent → Tools → System toolsで、End callを有効にします。これにより、発信者のリクエストが解決したときに
エージェントがセッションを終了できます。Amazon Connectはその後、Complete
結果でフローを続行します。
Amazon Connect転送ルールを追加する(任意)
エージェントが発信者を担当者に引き継げるようにするには、プロバイダー設定がamazon_connectである
転送ルールを含むTransfer to numberシステムツールを設定します。このルールには宛先がありません。セッションは
Escalate結果で終了し、コンタクトフローでキューを選択します。転送ルールはAPIで設定します。
エージェントにPATCHしてツールを追加します。
すでに存在するend_callなどのツールを含め、エージェントの完全なbuilt_in_toolsオブジェクトを送信してください。
エージェントはconditionによりルールを選択します。返されるオプションは固定トークン
amazon_connectであるため、ツールごとにAmazon Connectルールは1つで十分です。ほかのプロバイダー用に設定した電話番号やSIP URIは、
Amazon Connect通話では提供されません。
転送ルールはAPI管理の設定です。これらを使用するエージェントのTransfer to numberツールは、上記のようにAPIから 設定・更新してください。ダッシュボードのツールエディターは、番号ごとの転送リストに対応しています。
専用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エージェントを作成して公開する
オーケストレーションエージェントは、オーディオストリーミングを有効にして、すべての音声会話を直ちにアプリケーションへ引き渡します。
音声セッションには即時引き渡しが必要です。テキストストリーミング
(audioStreamingEnabledをfalseに設定)およびdelegateAgentConfigurationは
ElevenLabsではサポートされません。オーディオ即時引き渡しオーケストレーターでは、toolConfigurationsに
RETURN_TO_CONTROLタイプの予約済みCompleteツールも宣言する必要があります。これがないと、作成リクエストは
An audio frontline orchestrator (with an audio immediate handoff) must configure the reserved 'Complete' RETURN_TO_CONTROL toolで失敗します。
公開すると、バージョン付き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条件を1つ追加し、No Matchをエラープロンプトへルーティングします。

Amazon Connectは結果を、通信で送信される大文字の終了タイプではなくタイトルケース(Escalate、Complete)で書き込むため、
このブロックにはこの2つの条件だけで十分です。引き渡し後に失敗したセッションはCOMPLETE_WITH_ERRORタイプで終了します。
その場合、LexブロックはError出力に進むか、比較がNo Matchにフォールスルーします。どちらもエラープロンプトにルーティングしてください。
エクスポートしたフローでは、LexブロックのDefault出力はNoMatchingCondition
遷移です。エラーメッセージではなく比較ブロックにつながることを確認してください。

インテグレーションをテストする
電話をかける
電話番号に発信します。フローがLexブロックに到達してから数秒後にエージェントの最初のメッセージが再生されます。
AWS内の引き渡しには、ElevenLabsに接続されるまで約3秒かかります。短い会話をしてから別れの挨拶をしてください。
エージェントがEnd callを呼び出し、ElevenLabsセッションがCompleteで終了すると、フローはLexブロックから続行します。
転送ルールを追加した場合は、代わりに担当者を求めてください。エージェントがTransfer to numberを呼び出し、セッションがEscalateで終了して、
フローはその分岐に進みます。
動的変数
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の設定 で示すように、amazon_connect 転送ルールを設定した Transfer to number システムツールをエージェントに付与します。ルールの条件が満たされると、エージェントがこのツールを呼び出し、ElevenLabsは Escalate の結果とエージェントが指定した理由をもってセッションを終了します。フローの Escalate 分岐では、Set working queue と Transfer to queue でコンタクトを処理します。このルールには転送先が含まれないため、キューはエージェントではなくフローで選択されます。キュー処理、ウィスパーフロー、担当者の選択はAmazon Connect側で維持されます。
End call ツールは Complete の結果を生成します。いずれの結果の後も、通常どおり通話後分析と通話後Webhookが実行されます。
人間の担当者に概要を渡す
Amazon Connectがフローに公開するのは結果のみです。$.Lex.SessionAttributes.Tool(およびLexインテント名)には Escalate が含まれますが、転送理由を含め、ElevenLabsセッションのそれ以外の情報はフローに届きません。通話を引き継ぐ人間の担当者に概要を伝えるには、概要をコンタクトに保存し、担当者用ウィスパーフローで読み上げます。
-
Amazon Connectの
UpdateContactAttributesAPIを呼び出すエンドポイントを公開します。HTTP APIの背後に最小限のLambdaを置けば十分です。呼び出し元には、インスタンスのコンタクトに対するconnect:UpdateContactAttributesが許可されている必要があります。 -
Webhookツール をエージェントに付与し、
amazon_connect_contact_id動的変数から設定したcontact_idと、モデルが作成するsummaryを含めて、そのエンドポイントにPOSTします。共有シークレットはワークスペースシークレットに保存し、リクエストヘッダーとして送信します。システムプロンプトでは、まずこのツールを呼び出し、返却後にのみ Transfer to number を呼び出すようエージェントに指示します。モデルが1ターンで両方の呼び出しを出力すると、転送と概要の保存が競合します。この指示をした場合、テストではエージェントのリクエストから約1秒後、Amazon Connectがフローを再開する3秒前に、属性がコンタクトに保存されました。 -
コンタクトフローの
Escalate分岐で、Transfer to queue の前に Set whisper flow ブロックを追加します。このブロックは、Play prompt で$.Attributes.handoff_summaryを読み上げる担当者用ウィスパーフローを指定します。発信者にはキュー処理が聞こえている間に、Amazon Connectが人間の担当者に概要を読み上げ、その後両者を接続します。フローの後続ブロックでhandoff_summaryを再設定しないでください。空の値を設定すると、エンドポイントが書き込んだ値が置き換えられます。
同じ属性は、ルーティングの判断に 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通話から電話番号やSIP URIに発信できず、エスカレーションされた発信者を受け取るキューはフローが決定します。
- データ収集の結果はフローに返されず、共有するコンタクトデータは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経由で渡してください。エージェントの最初のメッセージまたはプロンプトが一度も提供されない変数を参照している場合、セッションは開始時に失敗します。
