> 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**
>
> Amazon Connect-integrationen har begränsad tillgänglighet. Amazon Connects stöd för AI-agenter från
> tredje part måste vara aktiverat för ditt AWS-konto, och ElevenLabs-transporten aktiveras per
> arbetsyta. Kontakta din kontaktperson på ElevenLabs innan du dirigerar kundtrafik.

## Översikt

Amazon Connect-integrationen ansluter ett Amazon Connect-kontaktflöde direkt till en agent i
ElevenAgents via Amazon Connects protokoll för AI-agenter från tredje part, en utökning av det öppna
[A2A-protokollet](https://a2a-protocol.org/). Amazon Connect hanterar telefoni, dirigering och kön;
ElevenAgents hanterar konversationen. Ingen SIP trunk, inget Twilio-nummer eller mellanprogram krävs. AWS
dokumenterar funktionen under
[Agent-till-agent-samarbete](https://docs.aws.amazon.com/connect/latest/adminguide/a2a-collaboration.html);
den här guiden beskriver detaljerna för ElevenLabs och de AWS-steg som krävs för att nå en ElevenLabs-agent.

Samma flöde hanterar inkommande samtal och utgående kontakter som startas med `StartOutboundVoiceContact`.
När ElevenLabs-agenten avslutar fortsätter Amazon Connect ditt kontaktflöde och förgrenar utifrån det
resultat som den tog emot.

## Så fungerar integrationen

1. Ett kontaktflöde når ett **Get customer input**-block som anropar en Amazon Lex V2-bot med
   avsikten `AMAZON.QInConnectIntent`.
2. Amazon Connects orkestreringsagent för AI överlämnar omedelbart konversationen till
   tredjepartsapplikationen som du har registrerat för ElevenLabs.
3. Amazon Connect öppnar en WebSocket till ElevenLabs-slutpunkten i applikationens `AccessUrl`,
   och autentiserar med API-nyckeln som lagras i AWS Secrets Manager.
4. Amazon Connect signalerar att uppringarens kanal är aktiv, sedan utbyter Amazon Connect och ElevenLabs
   16-bitars linjärt PCM-ljud som A2A-meddelanden. Amazon Connect föreslår samplingsfrekvensen och
   ElevenLabs använder den, så inga ändringar av ljudformat krävs för agenten.
5. När agenten avslutar samtalet eller överlämnar uppringaren till en människa avslutar ElevenLabs sessionen med
   resultatet `Complete` eller `Escalate`, och flödet fortsätter från Lex-blocket. Se
   [Överföra till en människa](#transferring-to-a-human).

## Krav

Innan du börjar kontrollerar du att du har:

1. En Amazon Connect-instans på nivån Connect Customer där stöd för AI-agenter från tredje part är
   aktiverat för kontot och regionen.
2. En Amazon Q in Connect-assistent kopplad till instansen.
3. AWS-behörigheter för att skapa KMS-nycklar, Secrets Manager-hemligheter, AppIntegrations-applikationer,
   Connect-säkerhetsprofiler, Amazon Q in Connect AI-agenter, Lex V2-botar och kontaktflöden.
4. En ElevenLabs-arbetsyta där Amazon Connect-transporten är aktiverad.
5. En ElevenLabs-agent och en särskild API-nyckel.
6. AWS CLI v2 och [awscurl](https://github.com/okigan/awscurl) (`pip install awscurl`) för de
   anrop vars begärandeformat ännu inte finns i släppta CLI-versioner.

> **Note**
>
> Behåll alla AWS-resurser i samma konto och region som Amazon Connect-instansen. Stegen nedan
> använder AWS CLI där det stöder anropet och `awscurl` (en SigV4-signerad HTTP-begäran) där
> det inte gör det. De följer AWS:s [Konfigurera samarbete med en extern AI- agent](https://docs.aws.amazon.com/connect/latest/adminguide/a2a-setup-external.html) och lägger till
> ElevenLabs-specifika värden.

## Konfigurera ElevenLabs

#### Skapa eller välj en agent

Skapa agenten i ElevenAgents. Ge den ett första meddelande om den ska börja tala så snart
överlämningen är klar; Amazon Connect spelar inte upp något eget under sessionen.

#### Aktivera Avsluta samtal

I **Agent → Tools → System tools** aktiverar du **End call** så att agenten kan avsluta sessionen när
uppringarens begäran har lösts. Amazon Connect fortsätter sedan ditt flöde med resultatet `Complete`.

#### Lägg till en överföringsregel för Amazon Connect (valfritt)

För att låta agenten överlämna uppringaren till en människa ger du den systemverktyget **Transfer to number** med en
överföringsregel vars leverantörskonfiguration är `amazon_connect`. Regeln har ingen destination: sessionen
avslutas med resultatet `Escalate` och ditt kontaktflöde väljer kön. Överföringsregler
konfigureras via API:et. Lägg till verktyget med en `PATCH` på agenten:

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

Skicka agentens kompletta `built_in_tools`-objekt, inklusive verktyg som den redan har, såsom `end_call`.
Agenten väljer regeln med dess `condition`; alternativet som den returnerar är den fasta tokenen
`amazon_connect`, så en Amazon Connect-regel per verktyg räcker. Telefonnummer och SIP-URI:er
som konfigurerats för andra leverantörer erbjuds inte i Amazon Connect-samtal.

> **Note**
>
> Överföringsregler är en inställning som hanteras via API:et. Konfigurera och uppdatera **Transfer to number**-verktyget för
> en agent som använder dem via API:et, enligt ovan; dashboardens verktygsredigerare fungerar med
> överföringslistan per nummer.

#### Skapa en särskild API-nyckel

Skapa en API-nyckel i samma arbetsyta som agenten och begränsa den till ElevenAgents. Du lagrar
den i AWS Secrets Manager i nästa avsnitt; klistra inte in den någon annanstans.

#### Notera WebSocket-URL:en

Amazon Connect ansluter till en URL som innehåller ditt agent-ID:

| Miljö       | AccessUrl                                                                                                             |
| ----------- | --------------------------------------------------------------------------------------------------------------------- |
| Standard    | `wss://api.elevenlabs.io/v1/convai/conversation/amazon-connect/agent_7101k5zvyjhmfg983brhmhkd98n6`                    |
| Datahemvist | `wss://api.<region>.residency.elevenlabs.io/v1/convai/conversation/amazon-connect/agent_7101k5zvyjhmfg983brhmhkd98n6` |

> **Info**
>
> Om ditt ElevenLabs-konto finns i en isolerad miljö för datahemvist ersätter du `<region>` med din
> რეგიონkod. Se [datahemvist](/docs/sv/overview/administration/data-residency) för tillgängliga
> regioner.

## Registrera ElevenLabs-applikationen i AWS

Allt i det här avsnittet är ett API-anrop. Ange de värden du kommer att återanvända en gång:

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

#### Skapa en Amazon Q in Connect-assistent

Hoppa över det här steget om instansen redan har en assistent. Annars skapar du en och kopplar den
till instansen:

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

Notera assistentens ID och ARN.

#### Lagra API-nyckeln

Amazon Connect läser nyckeln från Secrets Manager med sin egen tjänsthuvudidentitet, så hemligheten
måste krypteras med en kundhanterad KMS-nyckel som ger `connect.amazonaws.com` åtkomst för
dekryptering. Standardnyckeln `aws/secretsmanager` kan inte användas.

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

Spara ElevenLabs API-nyckel i en fil så att den aldrig visas i ditt shell-historik, och skapa sedan
nyckeln och hemligheten:

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

Ge Amazon Connect läsåtkomst till hemligheten:

**`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-hemlighet krypterad med den kundhanterade nyckeln och dess resurspolicy för
connect.amazonaws.com](/docs/_fern-img/3fc91a773575a547f3ac6d3a24d14cffac4535227057e4e8e4eb3ccfc71f27a0.webp)

#### Skapa tredjepartsapplikationen

Registrera ElevenLabs WebSocket-URL som en AppIntegrations-applikation av typen `A2A_SERVER`.
`AuthConfig` är obligatoriskt för den här typen.

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

Svaret innehåller applikationens `Id` och `Arn`; exportera dem som `APPLICATION_ID` och
`APPLICATION_ARN`. Amazon Connect-konsolen listar inte `A2A_SERVER`-applikationer, så verifiera
med API:et:

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

#### Koppla applikationen till din instans

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

#### Tillåt applikationen i en säkerhetsprofil

Säkerhetsprofilen som är kopplad till orkestrerings-AI-agenten måste lista applikationen bland sina
tillåtna AI-agenter, annars misslyckas överlämningen vid körning.

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

Administrationswebbplatsen visar profilen och dess behörigheter, men inte de tillåtna AI-agenterna;
de visas endast via API:et.

![Dedikerad säkerhetsprofil på Amazon Connects administrationswebbplats med behörigheter för
AI-agentvyn](/docs/_fern-img/2d9c7dd52c77bfeefd3c4f5beb99681d578014c407cf37dbc7d2e2f457c40ee8.webp)

#### Skapa och publicera orkestrerings-AI-agenten

Orkestreringsagenten överlämnar varje röstsamtal till applikationen direkt, med ljudströmning
aktiverad. Röstsessioner kräver omedelbar överlämning; textströmning
(`audioStreamingEnabled` inställt på false) och `delegateAgentConfiguration` stöds inte av
ElevenLabs. En orkestrerare med omedelbar överlämning av ljud måste också deklarera det reserverade
verktyget `Complete` av typen `RETURN_TO_CONTROL` i `toolConfigurations`; utan det misslyckas
skapandeanropet med `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
```

Publicering returnerar en versionshanterad ARN (`<AI_AGENT_ARN>:1`); kontaktflödet refererar till
den. Koppla säkerhetsprofilen till både den oversionshanterade och den versionshanterade agenten:

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

![Orkestrerings-AI-agent i AI-agentdesignern med den dedikerade säkerhetsprofilen
kopplad](/docs/_fern-img/3ade9397b18d3af79fc4f3ae63fef06cec9e17d59109e5c226d403339c32f052.webp)

## Bygg kontaktflödet

#### Skapa Lex-boten

1. Skapa en Lex V2-bot vars enda intent är den inbyggda `AMAZON.QInConnectIntent`, konfigurerad
   med din assistent-ARN. Lägg inte till andra intents.
2. Aktivera tal-till-tal i botens språkinställning. Dubbelriktad ljudströmning fungerar endast med
   Sonic-tal-till-tal-botar.
3. Tillåt att botens IAM-roll använder assistenten. Utan detta misslyckas överlämningen i AWS med
   `HTTP 403` innan någon begäran når ElevenLabs. Lägg till en policy som denna:

**`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. Bygg boten, skapa en version och ett alias och koppla aliaset till instansen:

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

![Lista över intents i Lex V2-boten med Q in Connect-överlämningsintent och den inbyggda
fallback-intenten](/docs/_fern-img/6d857b4a57a6289c26249b80bad8181b68af5b7654db9ae0adbf0ea830091ca4.webp)

#### Lägg till assistenten och Lex-blocket

I flödesdesignern lägger du till dessa block i följande ordning:

1. **Ange loggningsbeteende**: aktiverat. Flödesloggen är hur du verifierar överlämningen nedan.
2. **Anslut assistent**: välj din Amazon Q in Connect-assistent.
3. **Hämta kundinmatning**: på fliken **Amazon Lex** väljer du **Ange en ARN** och klistrar in
   botaliasets ARN. Lämna Text to Speech-prompten som ett enda blanksteg så att Amazon Connect inte
   spelar upp något före överlämningen. Under **Sessionsattribut** lägger du till två attribut som
   anges manuellt:

| Målnyckel                             | Värde                                                      |
| ------------------------------------- | ---------------------------------------------------------- |
| `x-amz-lex:q-in-connect:ai-agent-arn` | Den versionshanterade orkestreringsagentens ARN (`...:1`). |
| `x-amz-lex:qic-audio-passthrough`     | `true`                                                     |

![Sessionsattribut för blocket Hämta kundinmatning: den versionshanterade AI-agentens ARN och
flaggan för ljudgenomsläpp](/docs/_fern-img/812e85e379bcf3eb422497d27fe7740da8e3482222ca858089ad1b4de2f92e4b.webp)

> **Note**
>
> `x-amz-lex:qic-audio-passthrough` styr tredjepartsröstvägen under AWS förlanseringsperiod.
> AWS uppger att attributet inte längre behövs när funktionen är offentlig; det är ofarligt att låta
> det vara kvar.

#### Förgrena utifrån resultatet

Amazon Connect visar ElevenLabs-resultatet för flödet som attributet `$.Lex.SessionAttributes.Tool`.
Lägg till ett block för **Kontrollera kontaktattribut** efter Lex-blocket, ange **Namnrymd** till
**Lex**, **Nyckel** till **Sessionsattribut** och **Sessionsattributnyckel** till `Tool`, och lägg
sedan till ett **Lika med**-villkor per resultat och dirigera **Ingen träff** till en felprompt:

| Gren        | Betydelse                                                                              | Föreslagen väg                  |
| ----------- | -------------------------------------------------------------------------------------- | ------------------------------- |
| `Complete`  | Agenten avslutade samtalet, till exempel med verktyget **Avsluta samtal**.             | Koppla från                     |
| `Escalate`  | Agenten bad om en människa (se [Överföra till en människa](#transferring-to-a-human)). | Ange arbetskö → Överför till kö |
| Ingen träff | Alla andra värden.                                                                     | Spela upp prompt → Koppla från  |

![Blocket Kontrollera kontaktattribut konfigurerat med Lex-sessionsattributet Tool och Lika med-
villkor för varje resultat](/docs/_fern-img/e73068b736d4023417602a17c480112a3d7f5617694390fc8a88f03c4b7855e1.webp)

> **Warning**
>
> Amazon Connect skriver resultatet med inledande versal (`Escalate`, `Complete`), inte som den
> versala avslutningstyp som skickas över anslutningen, så dessa två villkor är allt blocket behöver.
> En session som misslyckas efter överlämningen avslutas med typen `COMPLETE_WITH_ERROR`; Lex-blocket
> använder då utdata **Fel** eller jämförelsen faller tillbaka till **Ingen träff**, så dirigera båda
> till felprompten. I ett exporterat flöde är Lex-blockets utdata **Standard** dess
> `NoMatchingCondition`-övergång; se till att den leder till jämförelseblocket i stället för ett
> felmeddelande.

![Kontaktflöde där blocket Hämta kundinmatning leder till ett block för Kontrollera kontaktattribut
som dirigerar Escalate till en kö, Complete till frånkoppling och Ingen träff till en
felprompt](/docs/_fern-img/71e5a3ec507c431ff692545db58376e07db0605efb8bb42f4e17e709a1a0dedf.webp)

#### Publicera och tilldela

Publicera flödet och koppla sedan ett registrerat telefonnummer till det:

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

För utgående samtal startar du kontakten med samma flöde; Amazon Connect ringer kunden och
överlämnar det besvarade samtalet till 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
```

## Testa integrationen

#### Ring ett samtal

Ring numret. Agentens första meddelande spelas upp några sekunder efter att flödet når Lex-
blocket; överlämningen inom AWS tar ungefär tre sekunder innan ElevenLabs kontaktas. Ha ett kort
samtal och säg hej då: agenten anropar **Avsluta samtal**, ElevenLabs-sessionen avslutas med
`Complete` och ditt flöde fortsätter från Lex-blocket. Om du lade till en överföringsregel kan du
i stället be om en människa: agenten anropar **Överför till nummer**, sessionen avslutas med
`Escalate` och flödet tar den grenen.

#### Kontrollera samtalet i ElevenLabs

Öppna samtalet i **Conversations**. Dess källa är Amazon Connect och fliken **Klientdata** listar de
`amazon_connect_*` dynamiska variabler som sessionen tog emot.

![Fliken Klientdata för ett Amazon Connect-samtal med Amazon Connects dynamiska
variabler](/docs/_fern-img/ced3be27e366822341940e3fa5f96c2cd7376b1e63e86ace2dac31d778039417.webp)

#### Kontrollera flödesloggen i AWS

Med loggning aktiverad skriver varje block en post i instansens flödeslogggrupp. Blocket **Hämta
kundinmatning** registrerar resultatet som det tog emot från ElevenLabs:

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

Förvänta dig `"Results": "Complete"`, eller `"Results": "Escalate"` efter en överföring, för Lex-
blocket, följt av blocken i den grenen.

## Dynamiska variabler

Amazon Connect skickar kontaktens systemattribut med varje session. ElevenLabs exponerar dem,
tillsammans med sessionsidentifierarna, som dynamiska variabler:

| Dynamisk variabel                                            | Beskrivning                                                                    |
| ------------------------------------------------------------ | ------------------------------------------------------------------------------ |
| `system__caller_id`                                          | Kundens telefonnummer (Amazon Connects kundslutpunkt).                         |
| `system__called_number`                                      | Amazon Connect-telefonnumret som kontakten är ansluten till (systemslutpunkt). |
| `system__call_id`                                            | Amazon Connects kontakt-ID.                                                    |
| `amazon_connect_system_attributes_channel`                   | Kontaktkanalen, till exempel `VOICE`.                                          |
| `amazon_connect_system_attributes_customer_endpoint_address` | Kundslutpunktens adress som skickas av Amazon Connect.                         |
| `amazon_connect_system_attributes_system_endpoint_address`   | Systemslutpunktens adress som skickas av Amazon Connect.                       |
| `amazon_connect_interaction_mode`                            | Samarbetsläget, till exempel `HANDOFF`.                                        |
| `amazon_connect_contact_id`                                  | Amazon Connects kontakt-ID.                                                    |
| `amazon_connect_contact_arn`                                 | Kontaktens fullständiga ARN.                                                   |
| `amazon_connect_context_id`                                  | A2A-sessionens (kontextens) ID.                                                |
| `amazon_connect_instance_id`                                 | Instans-ID:t.                                                                  |
| `amazon_connect_instance_arn`                                | Instansens ARN.                                                                |

I Amazon Connect-sessioner är `system__caller_id` alltid kunden och `system__called_number` alltid
Amazon Connect-numret, både för inkommande och utgående kontakter.

Alla andra delar av kontaktkontexten som Amazon Connect skickar exponeras på samma sätt: kapslade
namn sammanfogas med understreck och konverteras till snake case under prefixet `amazon_connect_`.
Anpassade kontaktattribut som anges i flödet med **Ange kontaktattribut** ingår inte i den kontext
som Amazon Connect för närvarande skickar, även när AI-agentens säkerhetsprofil kan visa
kontaktattribut. Om AWS börjar inkludera dem visas de automatiskt under samma prefix. Du kan inte
välja vilka kontaktdata Amazon Connect delar; AWS skickar en fast uppsättning kontext.

Om du vill skicka ytterligare kontext använder du
[webhooken för samtalsinitiering](/docs/sv/eleven-agents/customization/personalization#conversation-initiation-webhooks).
För Amazon Connect-sessioner anropas webhooken innan agenten talar, med `caller_id` satt till
kundens nummer, `called_number` satt till Amazon Connect-numret och `call_id` satt till Amazon
Connects kontakt-ID. En Lambda i ditt flöde kan därför lagra kontaktattribut nycklade efter
kontakt-ID, och webhooken kan returnera dem som dynamiska variabler och konfigurationsåsidosättningar.

## Överföra till en människa

Ge agenten systemverktyget **Överför till nummer** med en `amazon_connect`-överföringsregel, enligt
[Konfigurera ElevenLabs](#configure-elevenlabs). När regelns villkor uppfylls anropar agenten
verktyget och ElevenLabs avslutar sessionen med resultatet `Escalate` och den anledning som agenten
angav. Flödets `Escalate`-gren hanterar sedan kontakten med **Ange arbetskö** och **Överför till kö**.
Regeln innehåller ingen destination, så kön väljs i flödet, inte av agenten; köhantering,
viskningsflöden och agentval stannar i Amazon Connect.

Verktyget **Avsluta samtal** ger resultatet `Complete`. Efteranalyssamtal och webhooken efter samtal
körs som vanligt efter båda resultaten.

### Ge den mänskliga agenten en sammanfattning

Amazon Connect exponerar endast resultatet för ditt flöde: `$.Lex.SessionAttributes.Tool` (och Lex-
intentnamnet) innehåller `Escalate`, och inget annat från ElevenLabs-sessionen, inte heller
överföringsorsaken, når flödet. Om du vill informera människan som tar samtalet måste du själv lagra
sammanfattningen på kontakten och låta ett agentviskningsflöde läsa upp den:

1. Exponera en slutpunkt som anropar Amazon Connects `UpdateContactAttributes` API. En minimal Lambda
   bakom ett HTTP API räcker; anroparen måste ha behörigheten `connect:UpdateContactAttributes` för
   instansens kontakter:

   ```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. Ge agenten ett [webhookverktyg](/docs/sv/eleven-agents/customization/tools/webhook-tools) som
   skickar `POST` till slutpunkten med `contact_id` ifyllt från den dynamiska variabeln
   `amazon_connect_contact_id` och en `summary` som modellen skriver. Behåll den delade hemligheten
   i en arbetsytehemlighet och skicka den som en begärandeheader. I systemprompten instruerar du
   agenten att anropa detta verktyg först och att anropa **Överför till nummer** först efter att det
   har returnerat; en modell som skickar båda anropen i samma tur låter överföringen konkurrera med
   sammanfattningen. Med den instruktionen fanns attributet på kontakten ungefär en sekund efter
   agentens begäran i våra tester, tre sekunder innan Amazon Connect återupptog flödet.

3. Lägg i kontaktflödets `Escalate`-gren till ett block för **Ange viskningsflöde** före **Överför till
   kö** som pekar på ett agentviskningsflöde vars **Spela upp prompt** läser
   `$.Attributes.handoff_summary`. Amazon Connect läser upp den för den mänskliga agenten medan
   uppringaren hör köhanteringen och kopplar sedan samman dem. Ange inte `handoff_summary` igen i ett
   senare block i flödet: ett tomt värde där ersätter det som slutpunkten skrev.

Samma attribut är tillgängligt för ett block för **Kontrollera kontaktattribut** vid routingbeslut.
Webhooken efter samtal utlöses efter att flödet redan har fortsatt, så den passar för CRM-uppdateringar
snarare än routingbeslut.

## Spårningar

Amazon Connect
[kräver att externa agenter skickar spårningsdata](https://docs.aws.amazon.com/connect/latest/adminguide/a2a-trace-enforcement.html)
för varje samarbete. När Amazon Connect prenumererar på spårning för sessionen skickar ElevenLabs en
OpenTelemetry-spårning för varje agenttur som innehåller uppringarens transkription, agentens svar,
varje verktygsanrop med resultat samt tidsangivelser per spann. Amazon Connect lagrar dessa
spårningar med kontakten; se
[AI-agentspårningar](https://docs.aws.amazon.com/connect/latest/adminguide/ai-agent-traces.html) för
hur du visar dem. Transkriptioner och verktygsresultat i dessa spårningar omfattas av samma
maskeringsinställningar som resten av dina kontaktdata i Amazon Connect, så granska dina krav för
uppgiftshantering innan du aktiverar integrationen. Precis som
[webhooks efter samtal](/docs/sv/eleven-agents/workflows/post-call-webhooks) levereras spårningar till
dina egna system: agenter i [nollagringsläge](/docs/sv/eleven-agents/customization/privacy/zrm)
skickar dem fortfarande, eftersom nolllagring styr vad ElevenLabs lagrar, inte vad din Amazon
Connect-instans tar emot.

## Ljud

Amazon Connect föreslår 16-bitars mono linjär PCM vid 8, 16 eller 24 kHz för varje session och
ElevenLabs använder förslaget, så agentens konfigurerade ljudformat används inte för Amazon
Connect-sessioner. Avbrott från uppringaren identifieras av ElevenLabs och rapporteras till Amazon
Connect så att buffrad uppspelning töms direkt. Knappsatsinmatning som samlas in av Amazon Connect
levereras till agenten som DTMF-siffror. Amazon Connects egen tystnadsmarkör ignoreras; använd
agentens turtidsgräns för att uppmana en tyst uppringare igen.

## Begränsningar och funktioner som inte stöds

* Klientverktyg och systemverktyget **Spela upp knappsatston** stöds inte. **Överför till nummer**
  fungerar endast genom en Amazon Connect-överföringsregel: agenten kan inte ringa ett telefonnummer
  eller en SIP-URI från ett Amazon Connect-samtal, och flödet avgör vilken kö som tar emot en
  eskalerad uppringare.
* Resultat från datainsamling returneras inte till flödet och Amazon Connect avgör vilka kontaktdata
  som delas. Använd webhooken för samtalsinitiering nycklad med `amazon_connect_contact_id` för
  ytterligare kontext, ett webhookverktyg som anropar `UpdateContactAttributes` för routningsdata och
  webhooken efter samtal för allt annat.
* Konfigurationsåsidosättningar som `system__override_first_message` kan inte skickas från flödet.
  Returnera dem från webhooken för samtalsinitiering i stället.
* Röstsessioner kräver omedelbar överlämning. Amazon Connects chattkanal, textströmning och
  samarbete i bakgrunden (`delegateAgentConfiguration`) stöds inte.
* Spårningar som skickas till Amazon Connect omfattar uppringarens transkription, agentens svar,
  verktygsanrop med resultat och tidsangivelser. Verktygsanropsparametrar ingår inte.
* Amazon Connects stöd för tredjepartsagenter är endast tillgängligt där AWS har aktiverat det och
  kan medföra ytterligare AWS-kostnader.

## Felsökning

#### Flödet misslyckas med 'A2A WebSocket upgrade ... failed (HTTP 403)'

* Felet uppstår inom AWS innan någon begäran når ElevenLabs. Kontrollera CloudTrail efter
  `AccessDenied` på `wisdom:SendMessage` från Lex-tjänstrollen: rollen som är kopplad till boten
  behöver `wisdom:CreateSession`, `wisdom:GetAssistant`, `wisdom:SendMessage` och
  `wisdom:GetNextMessage` för assistenten och dess sessioner.
* Bekräfta att säkerhetsprofilen tillåter applikationen och är kopplad till den publicerade
  versionen av orkestreringsagenten som flödet refererar till.
* Bekräfta att hemlighetens KMS-nyckel och resurspolicy ger `connect.amazonaws.com` åtkomst.

#### Flödet misslyckas med 'the hand-off to the target agent could not be completed'

* Amazon Connect ger WebSocket-anslutningen ungefär 20 sekunder att upprättas. Bekräfta att
  `AccessUrl` kan nås från AWS: `wss://`, rätt agent-ID och ingen nätverksbaserad tillåtelselista i
  vägen.
* Om du proxar anslutningen via din egen infrastruktur ska proxyn hållas varm. En kall
  serverlös instans kan ta längre tid än överlämningsfönstret, och Amazon Connect ger upp innan
  ElevenLabs ens ser begäran.

#### Lex-blocket följer sin Error-gren och den som ringer hör ingenting

* Bekräfta att båda sessionsattributen är inställda i blocket **Get customer input**:
  `x-amz-lex:q-in-connect:ai-agent-arn` med den publicerade, versionshanterade agentens ARN och
  `x-amz-lex:qic-audio-passthrough` inställd på `true`.
* Bekräfta att säkerhetsprofilen som tillåter applikationen är kopplad till den agentversionen.
* Läs blockets post i flödesloggen; den innehåller felet som Amazon Connect stötte på.

#### Sessionen avslutas direkt efter anslutning

* Bekräfta att `AccessUrl` använder `wss://`, innehåller rätt agent-ID och pekar på regionen
  där din workspace finns.
* Bekräfta att API-nyckeln är aktiv, tillhör agentens workspace och inte har några IP-begränsningar.
* Bekräfta att Amazon Connect-transporten är aktiverad för din workspace.

#### Den som ringer hör flödets felmeddelande när agenten är klar

Kontrollera i Lex-blocket att utdata från **Default** leder till blocket som jämför
`$.Lex.SessionAttributes.Tool`, och jämför med värdena `Escalate` och `Complete` med stor
begynnelsebokstav.

#### Agenten säger aldrig något och sessionen avslutas efter några sekunder

Bekräfta att medarbetaren är konfigurerad med `audioStreamingEnabled` inställd på true. Med text-
streaming skickar Amazon Connect textturer och förväntar sig textsvar, vilket ElevenLabs inte
stöder; ElevenLabs-loggarna visar `INIT_SESSION carries no audio configuration`.

#### Dynamiska variabler saknas

Amazon Connect tillhandahåller systemattributen och identifierarna för kontakten som anges ovan. Anpassade kontakt-
attribut som ställs in i flödet når inte agenten; skicka dem via webhooken för att initiera
konversationen i stället. Om agentens första meddelande eller prompt refererar till en variabel som aldrig
tillhandahålls, misslyckas sessionen vid start.