Amazon Connect

Transférez les contacts vocaux Amazon Connect à ElevenAgents grâce à l’intégration native d’agent IA tiers, A2A, d’Amazon Connect.

L’intégration Amazon Connect est disponible de manière limitée. La prise en charge des agents IA tiers d’Amazon Connect doit être activée pour votre compte AWS, et le transport ElevenLabs est activé par Workspace. Contactez votre représentant ElevenLabs avant d’acheminer du trafic client.

Vue d’ensemble

L’intégration Amazon Connect connecte directement un flux de contact Amazon Connect à un agent dans ElevenAgents via le protocole d’agent IA tiers d’Amazon Connect, une extension du protocole A2A ouvert. Amazon Connect gère la téléphonie, le routage et la file d’attente ; ElevenAgents gère la conversation. Aucun trunk SIP, numéro Twilio ou middleware n’est requis. AWS documente cette fonctionnalité sous Collaboration agent à agent ; ce guide couvre les spécificités d’ElevenLabs ainsi que les étapes AWS nécessaires pour accéder à un agent ElevenLabs.

Le même flux sert les appels entrants et les contacts sortants démarrés avec StartOutboundVoiceContact. Lorsque l’agent ElevenLabs termine, Amazon Connect poursuit votre flux de contact et crée une branche selon le résultat reçu.

Fonctionnement de l’intégration

  1. Un flux de contact atteint un bloc Get customer input qui appelle un bot Amazon Lex V2 avec l’intention AMAZON.QInConnectIntent.
  2. L’agent IA d’orchestration d’Amazon Connect transfère immédiatement la conversation à l’application tierce que vous avez enregistrée pour ElevenLabs.
  3. Amazon Connect ouvre un WebSocket vers le point de terminaison ElevenLabs dans AccessUrl de l’application, en s’authentifiant avec la clé API stockée dans AWS Secrets Manager.
  4. Amazon Connect signale que le canal de l’appelant est actif, puis Amazon Connect et ElevenLabs échangent de l’audio PCM linéaire 16 bits sous forme de messages A2A. Amazon Connect propose la fréquence d’échantillonnage et ElevenLabs l’adopte, aucun changement de format audio n’est donc nécessaire côté agent.
  5. Lorsque l’agent met fin à l’appel ou transfère l’appelant à un humain, ElevenLabs termine la session avec un résultat Complete ou Escalate, et le flux se poursuit depuis le bloc Lex ; consultez Transférer à un humain.

Prérequis

Avant de commencer, assurez-vous de disposer des éléments suivants :

  1. Une instance Amazon Connect au niveau Connect Customer, avec la prise en charge des agents IA tiers activée pour le compte et la région.
  2. Un assistant Amazon Q in Connect associé à l’instance.
  3. Des autorisations AWS pour créer des clés KMS, des secrets Secrets Manager, des applications AppIntegrations, des profils de sécurité Connect, des agents IA Amazon Q in Connect, des bots Lex V2 et des flux de contact.
  4. Un Workspace ElevenLabs avec le transport Amazon Connect activé.
  5. Un agent ElevenLabs et une clé API dédiée.
  6. AWS CLI v2 et awscurl (pip install awscurl) pour les appels dont les formats de requête ne sont pas encore disponibles dans les versions publiées de la CLI.

Conservez chaque ressource AWS dans le même compte et la même région que l’instance Amazon Connect. Les étapes ci-dessous utilisent l’AWS CLI lorsqu’elle prend en charge l’appel et awscurl, une requête HTTP signée SigV4, lorsqu’elle ne le prend pas en charge. Elles suivent la procédure AWS Configurer la collaboration avec un agent IA externe et ajoutent les valeurs spécifiques à ElevenLabs.

Configurer ElevenLabs

1

Créer ou sélectionner un agent

Créez l’agent dans ElevenAgents. Donnez-lui un premier message s’il doit parler dès que le transfert est terminé ; Amazon Connect ne diffuse aucun son pendant la session.

2

Activer End call

Dans Agent → Tools → System tools, activez End call afin que l’agent puisse terminer la session lorsque la demande de l’appelant est résolue. Amazon Connect poursuit alors votre flux avec le résultat Complete.

3

Ajouter une règle de transfert Amazon Connect (facultatif)

Pour permettre à l’agent de transférer l’appelant à un humain, attribuez-lui l’outil système Transfer to number avec une règle de transfert dont la configuration du fournisseur est amazon_connect. La règle n’a pas de destination : la session se termine avec le résultat Escalate et votre flux de contact choisit la file d’attente. Les règles de transfert sont configurées via l’API. Ajoutez l’outil avec un PATCH sur l’agent :

curl -X PATCH "https://api.elevenlabs.io/v1/convai/agents/agent_7101k5zvyjhmfg983brhmhkd98n6" \
-H "xi-api-key: $ELEVENLABS_API_KEY" -H "Content-Type: application/json" \
-d '{
"conversation_config": {"agent": {"prompt": {"built_in_tools": {
"end_call": {"type": "system", "name": "end_call", "description": "",
"params": {"system_tool_type": "end_call"}},
"transfer_to_number": {
"type": "system", "name": "transfer_to_number", "description": "",
"params": {
"system_tool_type": "transfer_to_number",
"transfers": [],
"transfer_rules": [{
"condition": "the caller asks to speak with a human",
"provider_configs": [
{"type": "amazon_connect", "config": {"type": "amazon_connect_escalate"}}
]
}]
}
}
}}}}
}'

Envoyez l’objet built_in_tools complet de l’agent, y compris les outils qu’il possède déjà, tels que end_call. L’agent sélectionne la règle selon sa condition ; l’option qu’il renvoie est le jeton fixe amazon_connect, une règle Amazon Connect par outil suffit donc. Les numéros de téléphone et URI SIP configurés pour d’autres fournisseurs ne sont pas proposés lors des appels Amazon Connect.

Les règles de transfert sont un paramètre géré par API. Configurez et mettez à jour l’outil Transfer to number d’un agent qui les utilise via l’API, comme ci-dessus ; l’éditeur d’outils du Dashboard fonctionne avec la liste de transferts par numéro.

4

Créer une clé API dédiée

Créez une clé API dans le même Workspace que l’agent et limitez sa portée à ElevenAgents. Vous la stockerez dans AWS Secrets Manager dans la section suivante ; ne la collez nulle part ailleurs.

5

Noter l'URL WebSocket

Amazon Connect se connecte à une URL contenant l’ID de votre agent :

EnvironnementAccessUrl
Par défautwss://api.elevenlabs.io/v1/convai/conversation/amazon-connect/agent_7101k5zvyjhmfg983brhmhkd98n6
Résidence des donnéeswss://api.<region>.residency.elevenlabs.io/v1/convai/conversation/amazon-connect/agent_7101k5zvyjhmfg983brhmhkd98n6

Si votre compte ElevenLabs se trouve dans un environnement de résidence isolé, remplacez <region> par votre code de région. Consultez la résidence des données pour connaître les régions disponibles.

Enregistrez l’application ElevenLabs dans AWS

Tous les éléments de cette section sont des appels API. Définissez une seule fois les valeurs que vous réutiliserez :

export AWS_REGION=<REGION> # Region of your Amazon Connect instance
export ACCOUNT_ID=<ACCOUNT_ID>
export INSTANCE_ID=<INSTANCE_ID> # Amazon Connect instance ID
export INSTANCE_ARN=arn:aws:connect:$AWS_REGION:$ACCOUNT_ID:instance/$INSTANCE_ID
export AGENT_ID=<AGENT_ID> # ElevenLabs agent ID
1

Créer un assistant Amazon Q in Connect

Ignorez cette étape si l’instance dispose déjà d’un assistant. Sinon, créez-en un et associez-le à l’instance :

aws qconnect create-assistant --name elevenlabs-assistant --type AGENT --region $AWS_REGION
aws connect create-integration-association --instance-id $INSTANCE_ID \
--integration-type WISDOM_ASSISTANT --integration-arn <ASSISTANT_ARN> --region $AWS_REGION

Notez l’ID et l’ARN de l’assistant.

2

Stocker la clé API

Amazon Connect lit la clé depuis Secrets Manager avec son propre principal de service. Le secret doit donc être chiffré avec une clé KMS gérée par le client qui accorde à connect.amazonaws.com l’accès au déchiffrement. La clé par défaut aws/secretsmanager ne peut pas être utilisée.

kms-key-policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AccountAdmin",
"Effect": "Allow",
"Principal": { "AWS": "arn:aws:iam::<ACCOUNT_ID>:root" },
"Action": "kms:*",
"Resource": "*"
},
{
"Sid": "AllowConnectDecrypt",
"Effect": "Allow",
"Principal": { "Service": "connect.amazonaws.com" },
"Action": ["kms:Decrypt", "kms:DescribeKey"],
"Resource": "*"
}
]
}

Enregistrez la clé API ElevenLabs dans un fichier afin qu’elle n’apparaisse jamais dans l’historique de votre terminal, puis créez la clé et le secret :

KMS_KEY_ID=$(aws kms create-key --description "ElevenLabs agent API key" \
--policy file://kms-key-policy.json --region $AWS_REGION \
--query KeyMetadata.KeyId --output text)
SECRET_ARN=$(aws secretsmanager create-secret --name elevenlabs/agent-api-key \
--kms-key-id "$KMS_KEY_ID" --secret-string file://elevenlabs-api-key.txt \
--region $AWS_REGION --query ARN --output text)
rm elevenlabs-api-key.txt

Accordez à Amazon Connect un accès en lecture au secret :

secret-resource-policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowConnectRead",
"Effect": "Allow",
"Principal": { "Service": "connect.amazonaws.com" },
"Action": ["secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret"],
"Resource": "<SECRET_ARN>"
}
]
}
aws secretsmanager put-resource-policy --secret-id "$SECRET_ARN" \
--resource-policy file://secret-resource-policy.json --region $AWS_REGION

Secret Secrets Manager chiffré avec la clé gérée par le client et sa politique de ressources pour
connect.amazonaws.com

3

Créer l’application tierce

Enregistrez l’URL WebSocket d’ElevenLabs comme application AppIntegrations de type A2A_SERVER. AuthConfig est obligatoire pour ce type.

create-application.json
{
"Name": "elevenlabs-agent",
"Namespace": "elevenlabs-agent",
"Description": "ElevenLabs agent over the Amazon Connect A2A extension",
"ApplicationType": "A2A_SERVER",
"ApplicationSourceConfig": {
"ExternalUrlConfig": {
"AccessUrl": "wss://api.elevenlabs.io/v1/convai/conversation/amazon-connect/<AGENT_ID>"
}
},
"AuthConfig": {
"AuthType": "API_KEY",
"CredentialProviderIdentifier": "<SECRET_ARN>"
}
}
awscurl --service app-integrations --region $AWS_REGION -X POST \
-H 'Content-Type: application/json' --data @create-application.json \
"https://app-integrations.$AWS_REGION.amazonaws.com/applications"

La réponse contient l’Id et l’Arn de l’application. Exportez-les sous les noms APPLICATION_ID et APPLICATION_ARN. La console Amazon Connect ne répertorie pas les applications A2A_SERVER. Vérifiez avec l’API :

aws appintegrations get-application --arn "$APPLICATION_ARN" --region $AWS_REGION
4

Associer l’application à votre instance

awscurl --service connect --region $AWS_REGION -X PUT -H 'Content-Type: application/json' \
--data "{\"IntegrationArn\": \"$APPLICATION_ARN\", \"IntegrationType\": \"APPLICATION\"}" \
"https://connect.$AWS_REGION.amazonaws.com/instance/$INSTANCE_ID/integration-associations"
aws connect list-integration-associations --instance-id $INSTANCE_ID \
--integration-type APPLICATION --region $AWS_REGION
5

Autoriser l’application dans un profil de sécurité

Le profil de sécurité associé à l’agent IA d’orchestration doit répertorier l’application parmi ses agents IA autorisés, sans quoi le transfert échoue à l’exécution.

SECURITY_PROFILE_ID=$(aws connect create-security-profile --instance-id $INSTANCE_ID \
--security-profile-name elevenlabs-a2a --permissions QConnectAIAgents.View Wisdom.View \
--region $AWS_REGION --query SecurityProfileId --output text)
awscurl --service connect --region $AWS_REGION -X POST -H 'Content-Type: application/json' \
--data "{\"AllowedAIAgents\": [{\"Arn\": \"$APPLICATION_ARN\", \"Type\": \"THIRD_PARTY\"}]}" \
"https://connect.$AWS_REGION.amazonaws.com/security-profiles/$INSTANCE_ID/$SECURITY_PROFILE_ID"

Le site d’administration affiche le profil et ses autorisations, mais pas les agents IA autorisés, qui sont visibles uniquement via l’API.

Profil de sécurité dédié sur le site d’administration Amazon Connect, avec des autorisations de
consultation des agents IA

6

Créer et publier l’agent IA d’orchestration

L’agent d’orchestration transmet immédiatement chaque conversation vocale à l’application, avec le streaming audio activé. Les sessions vocales exigent un transfert immédiat. Le streaming texte (audioStreamingEnabled défini sur false) et delegateAgentConfiguration ne sont pas pris en charge par ElevenLabs. Un orchestrateur de transfert immédiat audio doit également déclarer l’outil réservé Complete de type RETURN_TO_CONTROL dans toolConfigurations, sans quoi la requête de création échoue avec An audio frontline orchestrator (with an audio immediate handoff) must configure the reserved 'Complete' RETURN_TO_CONTROL tool.

create-ai-agent.json
{
"name": "elevenlabs-handoff",
"type": "ORCHESTRATION",
"visibilityStatus": "PUBLISHED",
"configuration": {
"orchestrationAIAgentConfiguration": {
"connectInstanceArn": "<INSTANCE_ARN>",
"locale": "en_US",
"multiAgentConfigurations": [
{
"handoffAgentConfiguration": {
"agentTarget": { "applicationId": "<APPLICATION_ARN>" },
"instruction": {
"instruction": "Immediately hand off every voice conversation to the ElevenLabs agent."
},
"audioStreamingEnabled": true,
"immediateHandoff": true
}
}
],
"toolConfigurations": [
{
"toolName": "Complete",
"toolType": "RETURN_TO_CONTROL",
"description": "Close the conversation when the customer has no more questions.",
"instruction": {
"instruction": "Mark the conversation as complete when the customer has no additional questions or needs."
},
"inputSchema": {
"type": "object",
"properties": {
"reason": { "type": "string", "description": "Reason for completion" }
},
"required": ["reason"]
},
"userInteractionConfiguration": { "isUserConfirmationRequired": false }
}
]
}
}
}
awscurl --service wisdom --region $AWS_REGION -X POST -H 'Content-Type: application/json' \
--data @create-ai-agent.json \
"https://wisdom.$AWS_REGION.amazonaws.com/assistants/<ASSISTANT_ID>/aiagents"
aws qconnect create-ai-agent-version --assistant-id <ASSISTANT_ID> \
--ai-agent-id <AI_AGENT_ID> --region $AWS_REGION

La publication renvoie un ARN versionné (<AI_AGENT_ARN>:1), auquel le flux de contact fait référence. Associez le profil de sécurité à l’agent non versionné et à l’agent versionné :

for ARN in <AI_AGENT_ARN> <AI_AGENT_ARN>:1; do
aws connect associate-security-profiles --instance-id $INSTANCE_ID --entity-arn "$ARN" \
--entity-type AI_AGENT --security-profiles Id=$SECURITY_PROFILE_ID --region $AWS_REGION
done

Agent IA d’orchestration dans le concepteur d’agents IA, avec le profil de sécurité dédié
associé

Créez le flux de contact

1

Créer le bot Lex

  1. Créez un bot Lex V2 dont la seule intention est AMAZON.QInConnectIntent, intégré à votre ARN d’assistant. N’ajoutez aucune autre intention.
  2. Activez la synthèse vocale bidirectionnelle dans la locale du bot. Le streaming audio bidirectionnel fonctionne uniquement avec les bots Sonic de synthèse vocale bidirectionnelle.
  3. Autorisez le rôle IAM du bot à utiliser l’assistant. Sans cela, le transfert échoue dans AWS avec HTTP 403 avant qu’une requête n’atteigne ElevenLabs. Associez une politique telle que :
lex-role-policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["wisdom:CreateSession", "wisdom:GetAssistant"],
"Resource": ["<ASSISTANT_ARN>", "<ASSISTANT_ARN>/*"]
},
{
"Effect": "Allow",
"Action": ["wisdom:SendMessage", "wisdom:GetNextMessage"],
"Resource": "arn:aws:wisdom:<REGION>:<ACCOUNT_ID>:session/<ASSISTANT_ID>/*"
}
]
}
  1. Générez le bot, créez une version et un alias, puis associez l’alias à l’instance :
aws connect associate-bot --instance-id $INSTANCE_ID \
--lex-v2-bot AliasArn=<LEX_ALIAS_ARN> --region $AWS_REGION

Liste des intentions du bot Lex V2 avec l’intention de transfert Q in Connect et l’intention de
secours intégrée

2

Ajouter l’assistant et le bloc Lex

Dans le concepteur de flux, ajoutez ces blocs dans l’ordre :

  1. Définir le comportement de journalisation : activé. Le journal du flux vous permet de vérifier le transfert ci-dessous.
  2. Connecter l’assistant : sélectionnez votre assistant Amazon Q in Connect.
  3. Obtenir les données du client : dans l’onglet Amazon Lex, choisissez Saisir un ARN et collez l’ARN de l’alias du bot. Laissez l’invite de synthèse vocale sous la forme d’un simple espace afin qu’Amazon Connect ne lise rien avant le transfert. Sous Attributs de session, ajoutez deux attributs définis manuellement :
Clé de destinationValeur
x-amz-lex:q-in-connect:ai-agent-arnL’ARN versionné de l’agent d’orchestration (...:1).
x-amz-lex:qic-audio-passthroughtrue

Attributs de session du bloc Obtenir les données du client : l’ARN de l’agent IA versionné et
l’indicateur de transmission directe de l’audio

x-amz-lex:qic-audio-passthrough active le chemin vocal tiers pendant la période de prélancement d’AWS. AWS indique que l’attribut ne sera plus nécessaire une fois la fonctionnalité disponible publiquement ; le conserver est sans conséquence.

3

Créer une branche selon le résultat

Amazon Connect transmet le résultat ElevenLabs au flux sous la forme de l’attribut $.Lex.SessionAttributes.Tool. Ajoutez un bloc Vérifier les attributs de contact après le bloc Lex, définissez Espace de noms sur Lex, Clé sur Attributs de session et Clé d’attribut de session sur Tool, puis ajoutez une condition Est égal à par résultat et dirigez Aucune correspondance vers une invite d’erreur :

BrancheSignificationItinéraire suggéré
CompleteL’agent a mis fin à l’appel, par exemple avec l’outil Mettre fin à l’appel.Déconnecter
EscalateL’agent a demandé un humain (voir Transférer vers un humain).Définir la file de travail → Transférer vers la file
Aucune correspondanceToute autre valeur.Lire l’invite → Déconnecter

Bloc Vérifier les attributs de contact configuré sur l’attribut de session Lex Tool, avec des
conditions Est égal à pour chaque résultat

Amazon Connect écrit le résultat avec une majuscule initiale (Escalate, Complete), et non sous la forme du type de fin en majuscules envoyé sur le réseau. Ces deux conditions suffisent donc au bloc. Une session qui échoue après le transfert se termine avec le type COMPLETE_WITH_ERROR ; le bloc Lex emprunte alors sa sortie Erreur, ou la comparaison aboutit à Aucune correspondance. Dirigez les deux vers l’invite d’erreur. Dans un flux exporté, la sortie Par défaut du bloc Lex correspond à sa transition NoMatchingCondition ; assurez-vous qu’elle mène au bloc de comparaison plutôt qu’à un message d’erreur.

Flux de contact où le bloc Obtenir les données du client mène à un bloc Vérifier les attributs de contact qui
dirige Escalate vers une file, Complete vers une déconnexion et Aucune correspondance vers une invite
d’erreur

4

Publier et attribuer

Publiez le flux, puis associez-y un numéro de téléphone revendiqué :

aws connect associate-phone-number-contact-flow --instance-id $INSTANCE_ID \
--phone-number-id <PHONE_NUMBER_ID> --contact-flow-id <CONTACT_FLOW_ID> --region $AWS_REGION

Pour les appels sortants, démarrez le contact avec le même flux. Amazon Connect appelle le client et transmet l’appel auquel il répond à ElevenLabs :

aws connect start-outbound-voice-contact --instance-id $INSTANCE_ID \
--contact-flow-id <CONTACT_FLOW_ID> --destination-phone-number <E164_NUMBER> \
--source-phone-number <YOUR_CONNECT_NUMBER> --region $AWS_REGION

Tester l’intégration

1

Passer un appel

Appelez le numéro. Le premier message de l’agent est lu quelques secondes après que le flux atteint le bloc Lex ; le transfert au sein d’AWS prend environ trois secondes avant qu’ElevenLabs ne soit contacté. Tenez une courte conversation et dites au revoir : l’agent appelle Mettre fin à l’appel, la session ElevenLabs se termine par Complete et votre flux se poursuit depuis le bloc Lex. Si vous avez ajouté une règle de transfert, demandez plutôt à parler à un humain : l’agent appelle Transférer vers un numéro, la session se termine par Escalate et le flux emprunte cette branche.

2

Vérifier la conversation dans ElevenLabs

Ouvrez la conversation dans Conversations. Sa source est Amazon Connect et l’onglet Données client répertorie les variables dynamiques amazon_connect_* reçues par la session.

Onglet Données client d’une conversation Amazon Connect répertoriant les variables dynamiques Amazon Connect

3

Vérifier le journal du flux dans AWS

Lorsque la journalisation est activée, chaque bloc écrit une entrée dans le groupe de journaux de flux de l’instance. Le bloc Obtenir les données du client enregistre le résultat reçu d’ElevenLabs :

aws logs filter-log-events --log-group-name /aws/connect/<INSTANCE_ALIAS> \
--start-time $(( $(date +%s) - 600 ))000 --region $AWS_REGION \
--query 'events[].message' --output text | tr '\t' '\n' | grep -o '"Results": *"[A-Za-z_]*"'

Pour le bloc Lex, vous devriez voir "Results": "Complete", ou "Results": "Escalate" après un transfert, suivi des blocs de cette branche.

Variables dynamiques

Amazon Connect envoie les attributs système du contact à chaque session. ElevenLabs les expose, avec les identifiants de session, sous forme de variables dynamiques :

Variable dynamiqueDescription
system__caller_idLe numéro de téléphone du client (point de terminaison client d’Amazon Connect).
system__called_numberLe numéro Amazon Connect du contact (point de terminaison système).
system__call_idL’ID de contact Amazon Connect.
amazon_connect_system_attributes_channelLe canal de contact, par exemple VOICE.
amazon_connect_system_attributes_customer_endpoint_addressL’adresse du point de terminaison client envoyée par Amazon Connect.
amazon_connect_system_attributes_system_endpoint_addressL’adresse du point de terminaison système envoyée par Amazon Connect.
amazon_connect_interaction_modeLe mode de collaboration, par exemple HANDOFF.
amazon_connect_contact_idL’ID de contact Amazon Connect.
amazon_connect_contact_arnL’ARN complet du contact.
amazon_connect_context_idL’ID de session A2A (contexte).
amazon_connect_instance_idL’ID de l’instance.
amazon_connect_instance_arnL’ARN de l’instance.

Dans les sessions Amazon Connect, system__caller_id correspond toujours au client et system__called_number correspond toujours au numéro Amazon Connect, pour les contacts entrants comme sortants.

Tous les autres membres du contexte de contact envoyés par Amazon Connect sont exposés de la même manière : les noms imbriqués sont joints par des traits de soulignement et convertis en snake case sous le préfixe amazon_connect_. Les attributs de contact personnalisés définis dans votre flux avec Définir les attributs de contact ne font pas partie actuellement du contexte envoyé par Amazon Connect, même lorsque le profil de sécurité de l’agent IA peut consulter les attributs de contact. Si AWS commence à les inclure, ils apparaîtront automatiquement sous le même préfixe. Vous ne pouvez pas choisir les données de contact partagées par Amazon Connect ; AWS transmet un ensemble de contexte fixe.

Pour transmettre du contexte supplémentaire, utilisez le webhook de démarrage de conversation. Pour les sessions Amazon Connect, le webhook est appelé avant que l’agent ne parle, avec caller_id défini sur le numéro du client, called_number défini sur le numéro Amazon Connect et call_id défini sur l’ID de contact Amazon Connect. Une Lambda dans votre flux peut donc stocker des attributs de contact indexés par ID de contact, et le webhook peut les renvoyer comme variables dynamiques et remplacements de configuration.

Transférer vers un humain

Donnez à l’agent l’outil système Transférer vers un numéro avec une règle de transfert amazon_connect, comme indiqué dans Configurer ElevenLabs. Lorsque la condition de la règle est remplie, l’agent appelle l’outil et ElevenLabs termine la session avec le résultat Escalate et la raison fournie par l’agent. La branche Escalate de votre flux gère alors le contact avec Définir la file de travail et Transférer vers la file. La règle ne comporte aucune destination : la file est choisie dans le flux, et non par l’agent. Le traitement de file, les flux de chuchotement et la sélection des agents restent dans Amazon Connect.

L’outil Mettre fin à l’appel produit un résultat Complete. L’analyse après appel et le webhook après appel s’exécutent normalement après l’un ou l’autre résultat.

Fournir un résumé à l’agent humain

Amazon Connect expose uniquement le résultat à votre flux : $.Lex.SessionAttributes.Tool (ainsi que le nom de l’intention Lex) contient Escalate, et aucune autre information de la session ElevenLabs, y compris la raison du transfert, n’atteint le flux. Pour informer l’humain qui prend l’appel, stockez vous-même le résumé sur le contact et laissez un flux de chuchotement à l’agent le lire :

  1. Exposez un point de terminaison qui appelle l’API UpdateContactAttributes d’Amazon Connect. Une Lambda minimale derrière une API HTTP suffit ; l’appelant doit être autorisé à utiliser connect:UpdateContactAttributes sur les contacts de l’instance :

    import json, os, boto3
    connect = boto3.client("connect")
    def handler(event, _context):
    if (event.get("headers") or {}).get("x-shared-secret") != os.environ["SHARED_SECRET"]:
    return {"statusCode": 401, "body": ""}
    body = json.loads(event.get("body") or "{}")
    connect.update_contact_attributes(
    InstanceId=os.environ["INSTANCE_ID"],
    InitialContactId=body["contact_id"],
    Attributes={"handoff_summary": body["summary"][:1000]},
    )
    return {"statusCode": 200, "body": json.dumps({"ok": True})}
  2. Donnez à l’agent un outil webhook qui effectue une requête POST vers ce point de terminaison avec contact_id renseigné à partir de la variable dynamique amazon_connect_contact_id et un summary rédigé par le modèle. Conservez le secret partagé dans un secret du Workspace et envoyez-le comme en-tête de requête. Dans le prompt système, indiquez à l’agent d’appeler d’abord cet outil et d’appeler Transférer vers un numéro seulement après son retour ; un modèle qui émet les deux appels dans le même tour met le transfert en concurrence avec le résumé. Avec cette instruction, lors de nos tests, l’attribut était présent sur le contact environ une seconde après la requête de l’agent, soit trois secondes avant qu’Amazon Connect ne reprenne le flux.

  3. Dans la branche Escalate du flux de contact, ajoutez un bloc Définir le flux de chuchotement avant Transférer vers la file , qui pointe vers un flux de chuchotement à l’agent dont l’ Invite de lecture lit $.Attributes.handoff_summary. Amazon Connect le lit à l’agent humain pendant que l’appelant entend le traitement de file, puis met les deux interlocuteurs en relation. Ne définissez pas à nouveau handoff_summary dans un bloc ultérieur du flux : une valeur vide remplacerait celle écrite par le point de terminaison.

Le même attribut est disponible dans un bloc Vérifier les attributs de contact pour prendre des décisions de routage. Le webhook après appel se déclenche après que le flux a déjà continué ; il convient donc aux mises à jour CRM plutôt qu’aux décisions de routage.

Traces

Amazon Connect exige que les agents externes envoient des données de trace pour chaque collaboration. Lorsqu’Amazon Connect s’abonne au traçage d’une session, ElevenLabs envoie une trace OpenTelemetry pour chaque tour de l’agent, contenant la transcription de l’appelant, la réponse de l’agent, chaque appel d’outil avec son résultat et le temps par plage. Amazon Connect stocke ces traces avec le contact ; consultez Traces des agents IA pour savoir comment les afficher. Les transcriptions et résultats d’outils de ces traces sont soumis aux mêmes paramètres de masquage que le reste de vos données de contact dans Amazon Connect. Vérifiez donc vos exigences de traitement des données avant d’activer l’intégration. Comme les webhooks après appel, les traces sont transmises à vos propres systèmes : les agents en mode zéro rétention les envoient toujours, car la rétention zéro régit ce qu’ElevenLabs stocke, et non ce que votre instance Amazon Connect reçoit.

Audio

Amazon Connect propose du PCM linéaire mono 16 bits à 8, 16 ou 24 kHz pour chaque session, et ElevenLabs accepte cette proposition. Les formats audio configurés pour l’agent ne sont donc pas utilisés pour les sessions Amazon Connect. L’interruption par l’appelant est détectée par ElevenLabs et signalée à Amazon Connect afin que la lecture mise en mémoire tampon soit immédiatement interrompue. Les entrées au clavier collectées par Amazon Connect sont transmises à l’agent sous forme de chiffres DTMF. Le marqueur de silence d’Amazon Connect est ignoré ; utilisez le délai d’expiration du tour de l’agent pour relancer un appelant silencieux.

Limites et fonctionnalités non prises en charge

  • Les outils client et l’outil système Lire une tonalité tactile du clavier ne sont pas pris en charge. Transférer vers un numéro fonctionne uniquement avec une règle de transfert Amazon Connect : l’agent ne peut pas composer un numéro de téléphone ou un URI SIP depuis un appel Amazon Connect, et le flux détermine la file qui reçoit un appelant transféré.
  • Les résultats de collecte de données ne sont pas renvoyés au flux, et Amazon Connect détermine les données de contact qu’il partage. Utilisez le webhook de démarrage de conversation indexé par amazon_connect_contact_id pour obtenir du contexte supplémentaire, un outil webhook qui appelle UpdateContactAttributes pour les données de routage, et le webhook après appel pour tout le reste.
  • Les remplacements de configuration tels que system__override_first_message ne peuvent pas être transmis depuis le flux. Renvoyez-les plutôt depuis le webhook de démarrage de conversation.
  • Les sessions vocales exigent un transfert immédiat. Le canal de chat Amazon Connect, le streaming texte et la collaboration en arrière-plan (delegateAgentConfiguration) ne sont pas pris en charge.
  • Les traces envoyées à Amazon Connect couvrent la transcription de l’appelant, les réponses de l’agent, les appels d’outils avec leurs résultats et le timing. Les paramètres d’appel d’outil ne sont pas inclus.
  • La prise en charge des agents tiers par Amazon Connect est disponible uniquement là où AWS l’a activée et peut entraîner des frais AWS supplémentaires.

Résolution des problèmes

  • L’erreur se produit dans AWS avant qu’une requête n’atteigne ElevenLabs. Consultez CloudTrail pour détecter AccessDenied sur wisdom:SendMessage depuis le rôle de service Lex : le rôle associé au bot nécessite les autorisations wisdom:CreateSession, wisdom:GetAssistant, wisdom:SendMessage et wisdom:GetNextMessage sur l’assistant et ses sessions.
  • Vérifiez que le profil de sécurité autorise l’application et qu’il est associé à la version publiée de l’agent d’orchestration référencée par le flux.
  • Vérifiez que la clé KMS et la stratégie de ressources du secret accordent l’accès à connect.amazonaws.com.
  • Amazon Connect laisse environ 20 secondes à la connexion WebSocket pour s’établir. Vérifiez que l’ AccessUrl est accessible depuis AWS : wss://, le bon ID d’agent et aucune liste d’autorisation réseau ne doit bloquer l’accès.
  • Si vous faites transiter la connexion via votre propre infrastructure, maintenez ce proxy actif. Une instance serverless inactive peut prendre plus de temps que la fenêtre de transfert, et Amazon Connect abandonne avant même qu’ElevenLabs ne reçoive la requête.
  • Vérifiez que les deux attributs de session sont définis dans le bloc Get customer input : x-amz-lex:q-in-connect:ai-agent-arn avec l’ARN publié et versionné de l’agent, et x-amz-lex:qic-audio-passthrough défini sur true.
  • Vérifiez que le profil de sécurité qui autorise l’application est associé à cette version de l’agent.
  • Consultez l’entrée du bloc dans le journal du flux : elle contient l’erreur rencontrée par Amazon Connect.
  • Vérifiez que l’AccessUrl utilise wss://, contient le bon ID d’agent et pointe vers la région où se trouve votre Workspace.
  • Vérifiez que la clé API est active, appartient au Workspace de l’agent et ne comporte aucune restriction IP.
  • Vérifiez que le transport Amazon Connect est activé pour votre Workspace.

Dans le bloc Lex, assurez-vous que la sortie Default mène au bloc qui compare $.Lex.SessionAttributes.Tool, et effectuez la comparaison avec les valeurs en casse de titre Escalate et Complete.

Vérifiez que le collaborateur est configuré avec audioStreamingEnabled défini sur true. Avec le streaming texte, Amazon Connect envoie des tours de parole textuels et attend des réponses textuelles, ce qu’ElevenLabs ne prend pas en charge ; les journaux ElevenLabs affichent INIT_SESSION carries no audio configuration.

Amazon Connect fournit les attributs système et les identifiants du contact listés ci-dessus. Les attributs de contact personnalisés définis dans le flux n’atteignent pas l’agent ; transmettez-les plutôt via le webhook d’initialisation de la conversation. Si le premier message ou le prompt de l’agent fait référence à une variable qui n’est jamais fournie, la session échoue au démarrage.