> This is a page from the ElevenLabs documentation. For a complete page index, fetch https://elevenlabs.io/docs/llms.txt. For the full documentation in a single file, fetch https://elevenlabs.io/docs/llms-full.txt.

# Amazon Connect

> **Warning**
>
> De Amazon Connect-integratie is beperkt beschikbaar. Ondersteuning voor externe AI-agents van Amazon Connect
> moet zijn ingeschakeld voor je AWS-account en het ElevenLabs-transport wordt per
> workspace ingeschakeld. Neem contact op met je ElevenLabs-contactpersoon voordat je klantverkeer routeert.

## Overzicht

De Amazon Connect-integratie verbindt een Amazon Connect-contactflow rechtstreeks met een agent in
ElevenAgents via het protocol voor externe AI-agents van Amazon Connect, een uitbreiding van het open
[A2A-protocol](https://a2a-protocol.org/). Amazon Connect beheert telefonie, routering en de wachtrij;
ElevenAgents beheert het gesprek. Er is geen SIP-trunk, Twilio-nummer of middleware vereist. AWS
documenteert de functie onder
[Agent-to-agent collaboration](https://docs.aws.amazon.com/connect/latest/adminguide/a2a-collaboration.html);
deze handleiding behandelt de ElevenLabs-specifieke aspecten en de AWS-stappen die nodig zijn om een ElevenLabs-agent te bereiken.

Dezelfde flow bedient inkomende gesprekken en uitgaande contacten die zijn gestart met `StartOutboundVoiceContact`.
Wanneer de ElevenLabs-agent klaar is, vervolgt Amazon Connect je contactflow en vertakt op basis van de
ontvangen uitkomst.

## Zo werkt de integratie

1. Een contactflow bereikt een blok **Get customer input** dat een Amazon Lex V2-bot aanroept met de
   intent `AMAZON.QInConnectIntent`.
2. De orkestratie-AI-agent van Amazon Connect draagt het gesprek direct over aan de
   externe applicatie die je voor ElevenLabs hebt geregistreerd.
3. Amazon Connect opent een WebSocket naar het ElevenLabs-endpoint in de `AccessUrl` van de applicatie,
   en verifieert met de API-sleutel die is opgeslagen in AWS Secrets Manager.
4. Amazon Connect geeft aan dat het kanaal van de beller actief is. Vervolgens wisselen Amazon Connect en ElevenLabs
   16-bits lineaire PCM-audio uit als A2A-berichten. Amazon Connect stelt de samplefrequentie voor en
   ElevenLabs neemt die over, dus er zijn geen wijzigingen aan het audioformaat nodig op de agent.
5. Wanneer de agent het gesprek beëindigt of de beller overdraagt aan een medewerker, beëindigt ElevenLabs de sessie met
   een `Complete`- of `Escalate`-uitkomst en gaat de flow verder vanaf het Lex-blok; zie
   [Overdragen aan een medewerker](#transferring-to-a-human).

## Vereisten

Controleer voordat je begint of je het volgende hebt:

1. Een Amazon Connect-instance op de Connect Customer-tier met ondersteuning voor externe AI-agents
   ingeschakeld voor het account en de Region.
2. Een Amazon Q in Connect-assistent die is gekoppeld aan de instance.
3. AWS-machtigingen om KMS-sleutels, Secrets Manager-secrets, AppIntegrations-applicaties,
   Connect-beveiligingsprofielen, Amazon Q in Connect AI-agents, Lex V2-bots en contactflows te maken.
4. Een ElevenLabs-workspace met het Amazon Connect-transport ingeschakeld.
5. Een ElevenLabs-agent en een speciale API-sleutel.
6. AWS CLI v2 en [awscurl](https://github.com/okigan/awscurl) (`pip install awscurl`) voor de
   aanroepen waarvan de requeststructuur nog niet in uitgebrachte CLI-versies staat.

> **Note**
>
> Houd elke AWS-resource in hetzelfde account en dezelfde Region als de Amazon Connect-instance. De stappen
> hieronder gebruiken de AWS CLI wanneer deze de aanroep ondersteunt en `awscurl` (een SigV4-ondertekende HTTP-request) wanneer
> dat niet zo is. Ze volgen AWS' [Set up collaboration with an external AI agent](https://docs.aws.amazon.com/connect/latest/adminguide/a2a-setup-external.html) en voegen de
> ElevenLabs-specifieke waarden toe.

## ElevenLabs configureren

#### Een agent maken of selecteren

Maak de agent in ElevenAgents. Geef de agent een eerste bericht als deze moet spreken zodra de
overdracht is voltooid; Amazon Connect speelt tijdens de sessie zelf niets af.

#### Gesprek beëindigen inschakelen

Schakel in **Agent → Tools → Systeemtools** **Gesprek beëindigen** in, zodat de agent de sessie kan afronden wanneer
het verzoek van de beller is afgehandeld. Amazon Connect vervolgt dan je flow met de uitkomst `Complete`.

#### Een overdrachtsregel voor Amazon Connect toevoegen (optioneel)

Als je de agent de beller wilt laten overdragen aan een medewerker, geef je deze de systeemtool **Overdragen naar nummer** met een
overdrachtsregel waarvan de providerconfiguratie `amazon_connect` is. De regel heeft geen bestemming: de
sessie eindigt met de uitkomst `Escalate` en je contactflow kiest de wachtrij. Overdrachtsregels worden
via de API geconfigureerd. Voeg de tool toe met een `PATCH` op de agent:

```bash
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"}}
            ]
          }]
        }
      }
    }}}}
  }'
```

Verzend het volledige object `built_in_tools` van de agent, inclusief tools die deze al heeft, zoals `end_call`.
De agent kiest de regel op basis van de `condition`; de optie die deze terugstuurt is de vaste token
`amazon_connect`, dus één Amazon Connect-regel per tool is voldoende. Telefoonnummers en SIP-URI's
geconfigureerd voor andere providers worden niet aangeboden tijdens Amazon Connect-gesprekken.

> **Note**
>
> Overdrachtsregels zijn een instelling die via de API wordt beheerd. Configureer en werk de tool **Overdragen naar nummer**
> van een agent die deze gebruikt via de API bij, zoals hierboven; de tooleditor van het dashboard werkt met de
> overdrachtslijst per nummer.

#### Een speciale API-sleutel maken

Maak een API-sleutel in dezelfde workspace als de agent en beperk deze tot ElevenAgents. Je slaat deze
in het volgende gedeelte op in AWS Secrets Manager; plak deze nergens anders.

#### Noteer de WebSocket-URL

Amazon Connect maakt verbinding met een URL die je agent-ID bevat:

| Omgeving       | AccessUrl                                                                                                             |
| -------------- | --------------------------------------------------------------------------------------------------------------------- |
| Standaard      | `wss://api.elevenlabs.io/v1/convai/conversation/amazon-connect/agent_7101k5zvyjhmfg983brhmhkd98n6`                    |
| Dataresidentie | `wss://api.<region>.residency.elevenlabs.io/v1/convai/conversation/amazon-connect/agent_7101k5zvyjhmfg983brhmhkd98n6` |

> **Info**
>
> Als je ElevenLabs-account zich in een geïsoleerde residencyomgeving bevindt, vervang je `<region>` door je
> regiocode. Zie [dataresidentie](/docs/nl/overview/administration/data-residency) voor de beschikbare
> regio's.

## Registreer de ElevenLabs-applicatie in AWS

Alles in deze sectie is een API-aanroep. Stel de waarden die je opnieuw gebruikt één keer in:

```bash
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
```

#### Maak een Amazon Q in Connect-assistent

Sla deze stap over als de instance al een assistent heeft. Maak er anders een en koppel deze
aan de instance:

```bash
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
```

Noteer de assistent-ID en ARN.

#### Sla de API-sleutel op

Amazon Connect leest de sleutel uit Secrets Manager met een eigen serviceprincipal. Het geheim
moet daarom worden versleuteld met een door de klant beheerde KMS-sleutel die `connect.amazonaws.com`
toegang verleent om te ontsleutelen. De standaard `aws/secretsmanager`-sleutel kan niet worden gebruikt.

**`kms-key-policy.json`**

```json title="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": "*"
    }
  ]
}
```

Sla de ElevenLabs API-sleutel op in een bestand, zodat deze nooit in je shellgeschiedenis verschijnt, en maak vervolgens
de sleutel en het geheim:

```bash
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
```

Verleen Amazon Connect leestoegang tot het geheim:

**`secret-resource-policy.json`**

```json title="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>"
    }
  ]
}
```

```bash
aws secretsmanager put-resource-policy --secret-id "$SECRET_ARN" \
  --resource-policy file://secret-resource-policy.json --region $AWS_REGION
```

![Secrets Manager-geheim versleuteld met de door de klant beheerde sleutel en het resourcebeleid voor
connect.amazonaws.com](/docs/_fern-img/3fc91a773575a547f3ac6d3a24d14cffac4535227057e4e8e4eb3ccfc71f27a0.webp)

#### Maak de externe applicatie

Registreer de ElevenLabs WebSocket-URL als een AppIntegrations-applicatie van het type `A2A_SERVER`.
`AuthConfig` is verplicht voor dit type.

**`create-application.json`**

```json title="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>"
  }
}
```

```bash
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"
```

Het antwoord bevat de `Id` en `Arn` van de applicatie. Exporteer deze als `APPLICATION_ID` en
`APPLICATION_ARN`. De Amazon Connect-console toont geen `A2A_SERVER`-applicaties, dus controleer dit
via de API:

```bash
aws appintegrations get-application --arn "$APPLICATION_ARN" --region $AWS_REGION
```

#### Koppel de applicatie aan je instance

```bash
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
```

#### Sta de applicatie toe in een beveiligingsprofiel

Het beveiligingsprofiel dat is gekoppeld aan de orkestratie-AI-agent moet de applicatie vermelden onder
de toegestane AI-agents, anders mislukt de overdracht tijdens de uitvoering.

```bash
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"
```

De beheerwebsite toont het profiel en de bijbehorende machtigingen, maar niet de toegestane AI-agents; die
zijn alleen zichtbaar via de API.

![Speciaal beveiligingsprofiel op de Amazon Connect-beheerwebsite met machtigingen om AI-agents te bekijken
](/docs/_fern-img/2d9c7dd52c77bfeefd3c4f5beb99681d578014c407cf37dbc7d2e2f457c40ee8.webp)

#### Maak en publiceer de orkestratie-AI-agent

De orkestratieagent draagt elk spraakgesprek onmiddellijk over aan de applicatie, met audio-
streaming ingeschakeld. Spraaksessies vereisen onmiddellijke overdracht; tekststreaming
(`audioStreamingEnabled` ingesteld op false) en `delegateAgentConfiguration` worden niet ondersteund door
ElevenLabs. Een orchestrator voor onmiddellijke audio-overdracht moet ook de gereserveerde tool `Complete`
van het type `RETURN_TO_CONTROL` declareren in `toolConfigurations`; zonder deze tool mislukt het create-request met
`An audio frontline orchestrator (with an audio immediate handoff) must configure the reserved
'Complete' RETURN_TO_CONTROL tool`.

**`create-ai-agent.json`**

```json title="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 }
        }
      ]
    }
  }
}
```

```bash
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
```

Publiceren geeft een ARN met versie terug (`<AI_AGENT_ARN>:1`); de contactflow verwijst hiernaar. Koppel
het beveiligingsprofiel aan zowel de agent zonder versie als de versiegebonden agent:

```bash
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
```

![Orkestratie-AI-agent in de AI-agentontwerper met het speciale beveiligingsprofiel
gekoppeld](/docs/_fern-img/3ade9397b18d3af79fc4f3ae63fef06cec9e17d59109e5c226d403339c32f052.webp)

## Bouw de contactflow

#### Maak de Lex-bot

1. Maak een Lex V2-bot waarvan de enige intent de ingebouwde `AMAZON.QInConnectIntent` is, geconfigureerd
   met je assistent-ARN. Voeg geen andere intents toe.
2. Schakel speech-to-speech in voor de botlocale. Bidirectionele audiostreaming werkt alleen met
   Sonic speech-to-speech-bots.
3. Sta toe dat de IAM-rol van de bot de assistent gebruikt. Zonder deze toestemming mislukt de overdracht binnen AWS met
   `HTTP 403` voordat een request ElevenLabs bereikt. Koppel een beleid als volgt:

**`lex-role-policy.json`**

```json title="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>/*"
    }
  ]
}
```

4. Bouw de bot, maak een versie en een alias, en koppel de alias aan de instance:

```bash
aws connect associate-bot --instance-id $INSTANCE_ID \
  --lex-v2-bot AliasArn=<LEX_ALIAS_ARN> --region $AWS_REGION
```

![Lijst met Lex V2-botintents met de Q in Connect-overdrachtsintentie en de ingebouwde fallback-
intent](/docs/_fern-img/6d857b4a57a6289c26249b80bad8181b68af5b7654db9ae0adbf0ea830091ca4.webp)

#### Voeg de assistent en het Lex-blok toe

Voeg in de flowontwerper deze blokken in deze volgorde toe:

1. **Logginggedrag instellen**: ingeschakeld. Via het flowlog controleer je de overdracht hieronder.
2. **Assistent verbinden**: selecteer je Amazon Q in Connect-assistent.
3. **Klantinvoer ophalen**: kies op het tabblad **Amazon Lex** voor **Een ARN invoeren** en plak de ARN van de
   botalias. Laat de text-to-speech-prompt als één spatie staan, zodat Amazon Connect vóór de overdracht
   niets afspeelt. Voeg onder **Sessieattributen** twee handmatig ingestelde attributen toe:

| Bestemmingssleutel                    | Waarde                                                   |
| ------------------------------------- | -------------------------------------------------------- |
| `x-amz-lex:q-in-connect:ai-agent-arn` | De versiegebonden ARN van de orkestratieagent (`...:1`). |
| `x-amz-lex:qic-audio-passthrough`     | `true`                                                   |

![Sessieattributen van het blok Klantinvoer ophalen: de versiegebonden ARN van de AI-agent en de audio-
passthrough-vlag](/docs/_fern-img/812e85e379bcf3eb422497d27fe7740da8e3482222ca858089ad1b4de2f92e4b.webp)

> **Note**
>
> `x-amz-lex:qic-audio-passthrough` regelt tijdens de prelaunchperiode van AWS het externe spraakpad.
> AWS geeft aan dat het attribuut niet langer nodig is zodra de functie openbaar is; het kan geen kwaad
> om het te laten staan.

#### Vertak op basis van de uitkomst

Amazon Connect toont de ElevenLabs-uitkomst in de flow als het attribuut `$.Lex.SessionAttributes.Tool`.
Voeg na het Lex-blok een blok **Contactattributen controleren** toe, stel **Namespace** in op
**Lex**, **Sleutel** op **Sessieattributen** en **Sessieattribuutsleutel** op `Tool`, voeg vervolgens voor elke
uitkomst één voorwaarde **Is gelijk aan** toe en leid **Geen overeenkomst** naar een foutprompt:

| Vertakking        | Betekenis                                                                                   | Voorgestelde route                          |
| ----------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------- |
| `Complete`        | De agent heeft het gesprek beëindigd, bijvoorbeeld met de tool **Gesprek beëindigen**.      | Verbinding verbreken                        |
| `Escalate`        | De agent vroeg om een persoon (zie [Overdragen aan een persoon](#transferring-to-a-human)). | Werkqueue instellen → Overdragen naar queue |
| Geen overeenkomst | Elke andere waarde.                                                                         | Prompt afspelen → Verbinding verbreken      |

![Blok Contactattributen controleren geconfigureerd voor het Lex-sessieattribuut Tool met voorwaarden Is gelijk aan
voor elke uitkomst](/docs/_fern-img/e73068b736d4023417602a17c480112a3d7f5617694390fc8a88f03c4b7855e1.webp)

> **Warning**
>
> Amazon Connect schrijft de uitkomst met een hoofdletter aan het begin (`Escalate`, `Complete`), niet als het type in hoofdletters
> dat via de verbinding wordt verzonden. Deze twee voorwaarden zijn dus alles wat het blok nodig heeft. Een sessie die
> na de overdracht mislukt, eindigt met het type `COMPLETE_WITH_ERROR`; het Lex-blok gebruikt dan de uitvoer
> **Fout**, of de vergelijking valt terug op **Geen overeenkomst**, dus leid beide naar de foutprompt.
> In een geëxporteerde flow is de uitvoer **Standaard** van het Lex-blok de overgang `NoMatchingCondition`;
> zorg dat deze naar het vergelijkingsblok leidt en niet naar een foutmelding.

![Contactflow met het blok Klantinvoer ophalen dat leidt naar een blok Contactattributen controleren dat
Escalate naar een queue stuurt, Complete naar verbreken en Geen overeenkomst naar een fout-
prompt](/docs/_fern-img/71e5a3ec507c431ff692545db58376e07db0605efb8bb42f4e17e709a1a0dedf.webp)

#### Publiceer en wijs toe

Publiceer de flow en wijs deze vervolgens toe aan een geclaimd telefoonnummer:

```bash
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
```

Start voor uitgaande gesprekken het contact met dezelfde flow. Amazon Connect belt de klant en
zet het beantwoorde gesprek door naar ElevenLabs:

```bash
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
```

## Test de integratie

#### Voer een gesprek

Bel het nummer. Het eerste bericht van de agent wordt enkele seconden afgespeeld nadat de flow het Lex-
blok bereikt; de overdracht binnen AWS duurt ongeveer drie seconden voordat ElevenLabs wordt gecontacteerd. Voer een
kort gesprek en neem afscheid: de agent roept **Gesprek beëindigen** aan, de ElevenLabs-sessie eindigt met
`Complete`, en je flow gaat verder vanaf het Lex-blok. Als je een overdrachtsregel hebt toegevoegd, vraag dan
in plaats daarvan om een persoon: de agent roept **Overdragen naar nummer** aan, de sessie eindigt met `Escalate`, en de
flow volgt die vertakking.

#### Controleer het gesprek in ElevenLabs

Open het gesprek in **Gesprekken**. De bron is Amazon Connect en op het tabblad **Clientgegevens**
staan de dynamische variabelen `amazon_connect_*` die de sessie heeft ontvangen.

![Tabblad Clientgegevens van een Amazon Connect-gesprek met de dynamische Amazon Connect-
variabelen](/docs/_fern-img/ced3be27e366822341940e3fa5f96c2cd7376b1e63e86ace2dac31d778039417.webp)

#### Controleer het flowlog in AWS

Wanneer logging is ingeschakeld, schrijft elk blok een item naar de flowloggroep van de instance. Het blok **Klantinvoer
ophalen** registreert de uitkomst die het van ElevenLabs heeft ontvangen:

```bash
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_]*"'
```

Verwacht `"Results": "Complete"`, of `"Results": "Escalate"` na een overdracht, voor het Lex-blok,
gevolgd door de blokken in die vertakking.

## Dynamische variabelen

Amazon Connect verzendt de systeemattributen van het contact bij elke sessie. ElevenLabs maakt deze,
samen met de sessie-ID's, beschikbaar als dynamische variabelen:

| Dynamische variabele                                         | Beschrijving                                                                        |
| ------------------------------------------------------------ | ----------------------------------------------------------------------------------- |
| `system__caller_id`                                          | Het telefoonnummer van de klant (het klanteindpunt van Amazon Connect).             |
| `system__called_number`                                      | Het Amazon Connect-telefoonnummer waarop het contact plaatsvindt (systeemeindpunt). |
| `system__call_id`                                            | De Amazon Connect-contact-ID.                                                       |
| `amazon_connect_system_attributes_channel`                   | Het contactkanaal, bijvoorbeeld `VOICE`.                                            |
| `amazon_connect_system_attributes_customer_endpoint_address` | Het klanteindpuntadres zoals verzonden door Amazon Connect.                         |
| `amazon_connect_system_attributes_system_endpoint_address`   | Het systeemeindpuntadres zoals verzonden door Amazon Connect.                       |
| `amazon_connect_interaction_mode`                            | De samenwerkingsmodus, bijvoorbeeld `HANDOFF`.                                      |
| `amazon_connect_contact_id`                                  | De Amazon Connect-contact-ID.                                                       |
| `amazon_connect_contact_arn`                                 | De volledige contact-ARN.                                                           |
| `amazon_connect_context_id`                                  | De A2A-sessie-ID (context-ID).                                                      |
| `amazon_connect_instance_id`                                 | De instance-ID.                                                                     |
| `amazon_connect_instance_arn`                                | De instance-ARN.                                                                    |

In Amazon Connect-sessies is `system__caller_id` altijd de klant en `system__called_number`
altijd het Amazon Connect-nummer, voor zowel inkomende als uitgaande contacten.

Elk ander lid van de contactcontext dat Amazon Connect verzendt, wordt op dezelfde manier beschikbaar gemaakt: geneste
namen worden met underscores samengevoegd en omgezet naar snake case onder het voorvoegsel `amazon_connect_`.
Aangepaste contactattributen die je in je flow instelt met **Contactattributen instellen**, maken geen deel uit van de
context die Amazon Connect momenteel verzendt, zelfs niet wanneer het beveiligingsprofiel van de AI-agent contact-
attributen mag bekijken; als AWS deze gaat opnemen, verschijnen ze automatisch onder hetzelfde voorvoegsel. Je
kunt niet kiezen welke contactgegevens Amazon Connect deelt; AWS geeft een vaste set context door.

Gebruik voor aanvullende context de
[webhook voor gespreksinitiatie](/docs/nl/eleven-agents/customization/personalization#conversation-initiation-webhooks).
Voor Amazon Connect-sessies wordt de webhook aangeroepen voordat de agent spreekt, met `caller_id` ingesteld op
het nummer van de klant, `called_number` ingesteld op het Amazon Connect-nummer en `call_id` ingesteld op de Amazon
Connect-contact-ID. Een Lambda in je flow kan contactattributen dus opslaan op basis van de contact-ID,
en de webhook kan ze teruggeven als dynamische variabelen en configuratieoverschrijvingen.

## Overdragen aan een persoon

Geef de agent de systeemtool **Overdragen naar nummer** met een `amazon_connect`-overdrachtsregel, zoals
weergegeven in [ElevenLabs configureren](#configure-elevenlabs). Wanneer aan de voorwaarde van de regel is voldaan, roept de agent
de tool aan en beëindigt ElevenLabs de sessie met de uitkomst `Escalate` en de reden die de
agent heeft opgegeven. De vertakking `Escalate` van je flow verwerkt het contact vervolgens met **Werkqueue instellen** en
**Overdragen naar queue**. De regel bevat geen bestemming, dus de queue wordt in de flow gekozen en niet door
de agent; queuebehandeling, whisperflows en agentselectie blijven in Amazon Connect.

De tool **Gesprek beëindigen** geeft de uitkomst `Complete`. Analyse na het gesprek en de webhook na het gesprek
worden na beide uitkomsten zoals gebruikelijk uitgevoerd.

### De menselijke agent een samenvatting geven

Amazon Connect maakt alleen de uitkomst beschikbaar voor je flow: `$.Lex.SessionAttributes.Tool` (en de Lex-
intentnaam) bevatten `Escalate`, en niets anders van de ElevenLabs-sessie, ook de overdrachtsreden niet,
bereikt de flow. Om de persoon die het gesprek aanneemt te informeren, sla je de samenvatting zelf op bij het contact
en laat je een agent-whisperflow deze voorlezen:

1. Maak een endpoint dat de `UpdateContactAttributes`-API van Amazon Connect aanroept. Een minimale Lambda
   achter een HTTP API volstaat; de aanroeper moet `connect:UpdateContactAttributes` mogen gebruiken voor de
   contacten van de instance:

   ```python
   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. Geef de agent een [webhooktool](/docs/nl/eleven-agents/customization/tools/webhook-tools) die een
   `POST` uitvoert naar dat endpoint met `contact_id` ingevuld vanuit de dynamische variabele `amazon_connect_contact_id`
   en een `summary` die het model schrijft. Bewaar het gedeelde geheim in een workspacegeheim en verstuur
   dit als requestheader. Geef de agent in de systeemprompt de instructie om deze tool eerst aan te roepen en
   **Overdragen naar nummer** pas aan te roepen nadat deze is teruggekeerd; een model dat beide aanroepen in één beurt
   uitvoert, laat de overdracht concurreren met de samenvatting. Met deze instructie stond het attribuut in onze tests
   ongeveer een seconde na het request van de agent op het contact, drie seconden voordat Amazon Connect
   de flow hervatte.

3. Voeg in de vertakking `Escalate` van de contactflow vóór **Overdragen naar queue** een blok **Whisperflow instellen**
   toe dat verwijst naar een agent-whisperflow waarvan **Prompt afspelen**
   `$.Attributes.handoff_summary` voorleest. Amazon Connect spreekt dit uit voor de menselijke agent terwijl de beller
   de queuebehandeling hoort, en verbindt vervolgens beide. Stel `handoff_summary` niet opnieuw in een later
   blok van de flow in: een lege waarde daar vervangt wat het endpoint heeft geschreven.

Hetzelfde attribuut is beschikbaar voor een blok **Contactattributen controleren** voor routeringsbeslissingen.
De webhook na het gesprek wordt geactiveerd nadat de flow al verder is gegaan, en is daarom geschikt voor CRM-updates
in plaats van routeringsbeslissingen.

## Traces

Amazon Connect
[vereist dat externe agents tracedata verzenden](https://docs.aws.amazon.com/connect/latest/adminguide/a2a-trace-enforcement.html)
voor elke samenwerking. Wanneer Amazon Connect zich abonneert op tracing voor de sessie, verzendt ElevenLabs
voor elke agentbeurt een OpenTelemetry-trace met het transcript van de beller, de reactie van de agent,
elke toolaanroep met het resultaat en de timing per span. Amazon Connect slaat deze traces op bij het
contact; zie
[AI-agenttraces](https://docs.aws.amazon.com/connect/latest/adminguide/ai-agent-traces.html) voor
informatie over hoe je deze kunt bekijken. Transcripten en toolresultaten in deze traces vallen onder dezelfde
redactie-instellingen als de rest van je contactgegevens in Amazon Connect. Controleer daarom je vereisten voor
gegevensverwerking voordat je de integratie inschakelt. Net als
[webhooks na het gesprek](/docs/nl/eleven-agents/workflows/post-call-webhooks) worden traces geleverd aan
je eigen systemen: agents in [zero retention mode](/docs/nl/eleven-agents/customization/privacy/zrm)
verzenden ze nog steeds, omdat zero retention bepaalt wat ElevenLabs opslaat en niet wat je Amazon
Connect-instance ontvangt.

## Audio

Amazon Connect stelt voor elke sessie 16-bits mono lineaire PCM op 8, 16 of 24 kHz voor en ElevenLabs
accepteert het voorstel. De geconfigureerde audioformaten van de agent worden dus niet gebruikt voor Amazon Connect-
sessies. Onderbreking door de beller wordt gedetecteerd door ElevenLabs en gemeld aan Amazon Connect, zodat gebufferde
afspeelcontent onmiddellijk wordt gewist. Toetsenbordinvoer die Amazon Connect verzamelt, wordt als DTMF-cijfers aan de agent
geleverd. De eigen stiltemarkering van Amazon Connect wordt genegeerd; gebruik de beurt-time-out van de agent om een stille
beller opnieuw te vragen.

## Beperkingen en niet-ondersteunde functies

* Clienttools en de systeemtool **Toetstoontje afspelen** worden niet ondersteund. **Overdragen naar
  nummer** werkt alleen via een Amazon Connect-overdrachtsregel: de agent kan vanuit een Amazon Connect-gesprek geen telefoonnummer
  of SIP-URI bellen en de flow bepaalt welke queue een geëscaleerde beller ontvangt.
* Resultaten van gegevensverzameling worden niet teruggestuurd naar de flow, en Amazon Connect bepaalt welke contact-
  gegevens het deelt. Gebruik voor aanvullende context de webhook voor gespreksinitiatie op basis van `amazon_connect_contact_id`,
  een webhooktool die `UpdateContactAttributes` aanroept voor routeringsgegevens, en de webhook na het gesprek
  voor al het overige.
* Configuratieoverschrijvingen zoals `system__override_first_message` kunnen niet vanuit de flow worden doorgegeven.
  Geef deze in plaats daarvan terug via de webhook voor gespreksinitiatie.
* Spraaksessies vereisen onmiddellijke overdracht. Het Amazon Connect-chatkanaal, tekststreaming en
  samenwerking op de achtergrond (`delegateAgentConfiguration`) worden niet ondersteund.
* Traces die naar Amazon Connect worden verzonden, omvatten het transcript van de beller, reacties van de agent, toolaanroepen
  met hun resultaten en timing. Parameters van toolaanroepen zijn niet opgenomen.
* Ondersteuning voor externe agents van Amazon Connect is alleen beschikbaar waar AWS deze heeft ingeschakeld en kan
  extra AWS-kosten met zich meebrengen.

## Problemen oplossen

#### De flow mislukt met 'A2A WebSocket upgrade ... failed (HTTP 403)'

* De fout treedt op binnen AWS voordat een request ElevenLabs bereikt. Controleer CloudTrail op
  `AccessDenied` voor `wisdom:SendMessage` vanuit de Lex-servicerol: de rol die aan de bot is gekoppeld,
  heeft `wisdom:CreateSession`, `wisdom:GetAssistant`, `wisdom:SendMessage` en
  `wisdom:GetNextMessage` nodig voor de assistent en de sessies daarvan.
* Controleer of het beveiligingsprofiel de applicatie toestaat en is gekoppeld aan de gepubliceerde
  versie van de orchestration agent waarnaar de flow verwijst.
* Controleer of de KMS-sleutel en het resourcebeleid van het secret `connect.amazonaws.com` toegang verlenen.

#### De flow mislukt met 'the hand-off to the target agent could not be completed'

* Amazon Connect geeft de WebSocket-verbinding ongeveer 20 seconden om tot stand te komen. Controleer of de
  `AccessUrl` bereikbaar is vanuit AWS: `wss://`, de juiste agent-ID en geen netwerk-allowlist die
  in de weg staat.
* Als je de verbinding via je eigen infrastructuur proxy't, houd die proxy dan warm. Een koude
  serverless-instance kan langer duren dan het hand-off-venster, waardoor Amazon Connect opgeeft voordat
  ElevenLabs het request ziet.

#### Het Lex-blok volgt de Error-tak en de beller hoort niets

* Controleer of beide sessieattributen zijn ingesteld in het blok **Get customer input**:
  `x-amz-lex:q-in-connect:ai-agent-arn` met de gepubliceerde agent-ARN met versie en
  `x-amz-lex:qic-audio-passthrough` ingesteld op `true`.
* Controleer of het beveiligingsprofiel dat de applicatie toestaat, is gekoppeld aan die agentversie.
* Lees de vermelding van het blok in het flowlogboek; deze bevat de fout die Amazon Connect heeft aangetroffen.

#### De sessie eindigt direct na het verbinden

* Controleer of de `AccessUrl` `wss://` gebruikt, de juiste agent-ID bevat en verwijst naar de regio
  waarin je workspace zich bevindt.
* Controleer of de API-sleutel actief is, bij de workspace van de agent hoort en geen IP-beperkingen heeft.
* Controleer of Amazon Connect-transport is ingeschakeld voor je workspace.

#### De beller hoort de foutmelding van de flow nadat de agent klaar is

Zorg er in het Lex-blok voor dat de uitvoer **Default** naar het blok leidt dat
`$.Lex.SessionAttributes.Tool` vergelijkt, en vergelijk met de waarden met hoofdletter `Escalate` en
`Complete`.

#### De agent spreekt nooit en de sessie eindigt na een paar seconden

Controleer of de collaborator is geconfigureerd met `audioStreamingEnabled` ingesteld op true. Met tekst-
streaming stuurt Amazon Connect tekstbeurten en verwacht het tekstreacties, wat ElevenLabs niet
ondersteunt; in de ElevenLabs-logboeken staat `INIT_SESSION carries no audio configuration`.

#### Dynamische variabelen ontbreken

Amazon Connect levert de hierboven vermelde systeemattributen en ID's van contacten. Aangepaste contact-
attributen die in de flow zijn ingesteld, bereiken de agent niet; geef ze in plaats daarvan door via de webhook
voor gespreksinitiatie. Als het eerste bericht of de prompt van de agent verwijst naar een variabele die nooit
wordt meegegeven, mislukt de sessie bij het opstarten.