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

# SMS OTP-verifiering

![Agentkonversation som samlar in ett telefonnummer, en OTP-kod och lyckad verifiering](/docs/_fern-img/97201c6fdad0c63900236b52726c867d3ff9405fdbd30725858f384653c95803.webp)

## Översikt

Den här guiden visar hur du integrerar [Twilio Verify](https://www.twilio.com/docs/verify/api) med din ElevenLabs-agent så att du kan skicka en OTP till en uppringares telefonnummer och verifiera koden som personen läser upp under ett pågående röstsamtal.

Du får lära dig hur du:

* Skapar en Twilio Verify-tjänst och Base64-kodar dina uppgifter för autentisering.
* Konfigurerar två webhook-verktyg (`send_SMS_verification` och `check_SMS_verification`) i [dashboarden](https://elevenlabs.io/app/agents), med [Agents CLI](/docs/sv/eleven-agents/operate/cli) eller med [ElevenLabs API](/docs/sv/api-reference/introduction).
* Autentiserar båda webhook-anropen med en `Authorization`-header med ett hemligt värde.
* Aktiverar systemverktyget [`skip_turn`](/docs/sv/eleven-agents/customization/tools/system-tools/skip-turn) så att agenten väntar när uppringaren ännu inte har fått koden.

## Förutsättningar

* Ett Twilio-konto med [Twilio Verify](https://www.twilio.com/docs/verify/api) aktiverat. Om Verify inte är tillgängligt i din Twilio Console kan du begära åtkomst via [Twilio support](https://support.twilio.com/) eller ditt Twilio-kontoteam.
* Om ditt Twilio-konto är i [testläge](https://www.twilio.com/docs/guides/how-to-use-your-free-trial-account) måste mottagarens telefonnummer vara ett verifierat nummerpresentations-ID i Twilio.

#### Logga in på Twilio Console

Öppna [Twilio Console](https://console.twilio.com/).

#### Skapa en Authenticate-tjänst (Verify)

Välj **Add +** i vänstersidofältet och skapa en **Authenticate**-tjänst (Verify).

#### Namnge tjänsten

Ge den ett beskrivande namn (till exempel `ElevenLabs OTP`).

#### Kopiera Verify Service SID

Öppna tjänstens sida **Settings** och kopiera **Verify Service SID**. Den börjar med `VA` och skiljer sig från ditt Account SID.

> **Warning**
>
> **Vanligt misstag**: Använd ditt **Verify Service SID** (`VA...`) från Authenticate-tjänsten (Verify) i verktygs-URL:erna nedan. Lägg inte ditt **Account SID** (`AC...`) i sökvägen. Verify API förväntar sig tjänstens SID i URL:en; om du använder Account SID uppstår `4xx`-fel för ogiltiga parametrar.

Du kan använda Twilio API Explorer i konsolen för att testa förfrågningar innan du kopplar dem till din agent.

### Koda in autentiseringsuppgifter och konfigurera webhook-verktyg

#### Koda Twilio-autentiseringsuppgifter för Basic-autentisering

Twilio Verify använder HTTP Basic-autentisering med ditt **Account SID** som användarnamn och **Auth Token** som lösenord. Du hittar båda under **Account Info** på startsidan i [Twilio Console](https://console.twilio.com/).

Base64-koda `ACCOUNT_SID:AUTH_TOKEN` i ditt skal (separerade med kolon, utan mellanslag):

```bash
printf '%s' 'YOUR_ACCOUNT_SID:YOUR_AUTH_TOKEN' | base64
```

Kopiera utdata. Det fullständiga värdet för rubriken `Authorization` består av ordet `Basic`, ett enkelt mellanslag och Base64-strängen. Spara det som en verktygshemlighet i nästa steg.

```text
Basic dkFDxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx==
```

#### Konfigurera verktygen \`send\_SMS\_verification\` och \`check\_SMS\_verification\`

`send_SMS_verification` anropar Twilio Verify för att skicka en SMS-OTP. `check_SMS_verification` skickar in siffrorna som uppringaren säger. Båda kräver samma Verify Service SID och samma `Authorization`-hemlighet.

#### Lägg till via kontrollpanelen

### send\_SMS\_verification

![Agentsamtal som samlar in ett telefonnummer, en OTP-kod och lyckad verifiering](/docs/_fern-img/9d72a753674c17481e99ea871b1b178cd7791f2da1ec3491ad4786c3fbc9a84e.webp)

Välj **Add Tool** i avsnittet **Agent** i agentinställningarna och välj **Webhook**.

| Fält        | Värde                                                                         |
| ----------- | ----------------------------------------------------------------------------- |
| Namn        | `send_SMS_verification`                                                       |
| Beskrivning | Skickar en OTP-verifieringskod via SMS till det angivna telefonnumret         |
| Metod       | `POST`                                                                        |
| URL         | `https://verify.twilio.com/v2/Services/YOUR_VERIFY_SERVICE_SID/Verifications` |

Ersätt `YOUR_VERIFY_SERVICE_SID` med `VA...`-SID:t från det första steget.

**Autentiseringsrubrik:** Lägg till `Authorization` som typen **Secret** under **Headers** och klistra in det fullständiga värdet (`Basic ` plus Base64). Se [Webhook-verktyg](/docs/sv/eleven-agents/customization/tools/webhook-tools).

**Brödtextparametrar:** Ange **Content type** till **URL-encoded** (`application/x-www-form-urlencoded`). Lägg till parametrar med **LLM Prompt** som värdetyp:

| Datatyp  | Identifierare | Beskrivning                                                             |
| -------- | ------------- | ----------------------------------------------------------------------- |
| `string` | `To`          | Uppringarens telefonnummer i E.164-format (till exempel `+14155552671`) |
| `string` | `Channel`     | Leveranskanal; använd `sms`                                             |

### check\_SMS\_verification

Lägg till ett andra webhook-verktyg:

| Fält        | Värde                                                                             |
| ----------- | --------------------------------------------------------------------------------- |
| Namn        | `check_SMS_verification`                                                          |
| Beskrivning | Kontrollerar om OTP-koden som uppringaren anger är giltig                         |
| Metod       | `POST`                                                                            |
| URL         | `https://verify.twilio.com/v2/Services/YOUR_VERIFY_SERVICE_SID/VerificationCheck` |

Använd samma Verify Service SID och samma `Authorization`-hemlighet som för `send_SMS_verification`.

**Brödtextparametrar:** **URL-encoded**. Lägg till `To` (E.164) och `Code` (OTP-siffror) med **LLM Prompt**.

#### Lägg till via CLI

> **Note**
>
> Skapa en [workspace-hemlighet](/docs/sv/api-reference/workspace/secrets/create) vars värde är den fullständiga rubriken `Authorization` (`Basic ` plus Base64). Ange hemlighets-ID:t i JSON-koden nedan som `YOUR_SECRET_ID`.

#### Lägg till verktygskonfigurationsfiler

Spara sändverktyget som `tool_configs/send_SMS_verification.json` (ersätt `YOUR_VERIFY_SERVICE_SID` med ditt `VA...`-SID):

```json
{
  "type": "webhook",
  "name": "send_SMS_verification",
  "description": "Sends an OTP verification code via SMS to the provided phone number",
  "api_schema": {
    "url": "https://verify.twilio.com/v2/Services/YOUR_VERIFY_SERVICE_SID/Verifications",
    "method": "POST",
    "content_type": "application/x-www-form-urlencoded",
    "request_headers": {
      "Authorization": { "secret_id": "YOUR_SECRET_ID" }
    },
    "request_body_schema": {
      "type": "object",
      "description": "Twilio Verify start verification parameters",
      "required": ["To", "Channel"],
      "properties": {
        "To": {
          "type": "string",
          "description": "Caller phone number in E.164 format (for example +14155552671)"
        },
        "Channel": {
          "type": "string",
          "constant_value": "sms"
        }
      }
    }
  }
}
```

Spara kontrollverktyget som `tool_configs/check_SMS_verification.json`:

```json
{
  "type": "webhook",
  "name": "check_SMS_verification",
  "description": "Checks whether the OTP code provided by the caller is valid",
  "api_schema": {
    "url": "https://verify.twilio.com/v2/Services/YOUR_VERIFY_SERVICE_SID/VerificationCheck",
    "method": "POST",
    "content_type": "application/x-www-form-urlencoded",
    "request_headers": {
      "Authorization": { "secret_id": "YOUR_SECRET_ID" }
    },
    "request_body_schema": {
      "type": "object",
      "description": "Twilio Verify verification check parameters",
      "required": ["To", "Code"],
      "properties": {
        "To": {
          "type": "string",
          "description": "Same caller number in E.164 format"
        },
        "Code": {
          "type": "string",
          "description": "The OTP digits the caller provided"
        }
      }
    }
  }
}
```

#### Registrera verktygen

```bash
elevenlabs tools add "send_SMS_verification" --type "webhook" --config-path ./tool_configs/send_SMS_verification.json
elevenlabs tools add "check_SMS_verification" --type "webhook" --config-path ./tool_configs/check_SMS_verification.json
```

#### Koppla verktygen till din agent

Redigera `agent_configs/<agent-name>.json`. Under `conversation_config.agent.prompt` anger du `tool_ids` så att båda verktygen inkluderas (använd ID:na från `tools.json` eller från `elevenlabs agents tools list`). Pusha sedan:

```bash
elevenlabs agents push --agent "<agent-name>"
```

#### Lägg till via API

> **Note**
>
> Skapa en [workspace-hemlighet](/docs/sv/api-reference/workspace/secrets/create) som innehåller det fullständiga rubrikvärdet `Basic ...` och skicka sedan dess ID som `secret_id` i `request_headers`.

```python
from elevenlabs import ElevenLabs, ToolRequestModel

elevenlabs = ElevenLabs()

send_sms = elevenlabs.conversational_ai.tools.create(
    request=ToolRequestModel(
        tool_config={
            "type": "webhook",
            "name": "send_SMS_verification",
            "description": "Sends an OTP verification code via SMS to the provided phone number",
            "api_schema": {
                "url": "https://verify.twilio.com/v2/Services/YOUR_VERIFY_SERVICE_SID/Verifications",
                "method": "POST",
                "content_type": "application/x-www-form-urlencoded",
                "request_headers": {
                    "Authorization": {"secret_id": "YOUR_SECRET_ID"},
                },
                "request_body_schema": {
                    "type": "object",
                    "description": "Twilio Verify start verification parameters",
                    "required": ["To", "Channel"],
                    "properties": {
                        "To": {
                            "type": "string",
                            "description": "Caller phone number in E.164 format (for example +14155552671)",
                        },
                        "Channel": {
                            "type": "string",
                            "constant_value": "sms",
                        },
                    },
                },
            },
        }
    )
)

check_sms = elevenlabs.conversational_ai.tools.create(
    request=ToolRequestModel(
        tool_config={
            "type": "webhook",
            "name": "check_SMS_verification",
            "description": "Checks whether the OTP code provided by the caller is valid",
            "api_schema": {
                "url": "https://verify.twilio.com/v2/Services/YOUR_VERIFY_SERVICE_SID/VerificationCheck",
                "method": "POST",
                "content_type": "application/x-www-form-urlencoded",
                "request_headers": {
                    "Authorization": {"secret_id": "YOUR_SECRET_ID"},
                },
                "request_body_schema": {
                    "type": "object",
                    "description": "Twilio Verify verification check parameters",
                    "required": ["To", "Code"],
                    "properties": {
                        "To": {
                            "type": "string",
                            "description": "Same caller number in E.164 format",
                        },
                        "Code": {
                            "type": "string",
                            "description": "The OTP digits the caller provided",
                        },
                    },
                },
            },
        }
    )
)

elevenlabs.conversational_ai.agents.update(
    agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
    conversation_config={
        "agent": {
            "prompt": {
                "tool_ids": [send_sms.id, check_sms.id],
            },
        },
    },
)
```

```typescript
import { ElevenLabsClient } from "@elevenlabs/elevenlabs-js";

const elevenlabs = new ElevenLabsClient();

const sendSms = await elevenlabs.conversationalAi.tools.create({
  toolConfig: {
    type: "webhook",
    name: "send_SMS_verification",
    description: "Sends an OTP verification code via SMS to the provided phone number",
    apiSchema: {
      url: "https://verify.twilio.com/v2/Services/YOUR_VERIFY_SERVICE_SID/Verifications",
      method: "POST",
      contentType: "application/x-www-form-urlencoded",
      requestHeaders: {
        Authorization: { secretId: "YOUR_SECRET_ID" },
      },
      requestBodySchema: {
        type: "object",
        description: "Twilio Verify start verification parameters",
        required: ["To", "Channel"],
        properties: {
          To: {
            type: "string",
            description: "Caller phone number in E.164 format (for example +14155552671)",
          },
          Channel: {
            type: "string",
            constantValue: "sms",
          },
        },
      },
    },
  },
});

const checkSms = await elevenlabs.conversationalAi.tools.create({
  toolConfig: {
    type: "webhook",
    name: "check_SMS_verification",
    description: "Checks whether the OTP code provided by the caller is valid",
    apiSchema: {
      url: "https://verify.twilio.com/v2/Services/YOUR_VERIFY_SERVICE_SID/VerificationCheck",
      method: "POST",
      contentType: "application/x-www-form-urlencoded",
      requestHeaders: {
        Authorization: { secretId: "YOUR_SECRET_ID" },
      },
      requestBodySchema: {
        type: "object",
        description: "Twilio Verify verification check parameters",
        required: ["To", "Code"],
        properties: {
          To: {
            type: "string",
            description: "Same caller number in E.164 format",
          },
          Code: {
            type: "string",
            description: "The OTP digits the caller provided",
          },
        },
      },
    },
  },
});

await elevenlabs.conversationalAi.agents.update("agent_7101k5zvyjhmfg983brhmhkd98n6", {
  conversationConfig: {
    agent: {
      prompt: {
        toolIds: [sendSms.id, checkSms.id],
      },
    },
  },
});
```

> **Note**
>
> Om du konfigurerar **`Channel`** som ett LLM-fyllt fält i kontrollpanelen, lägg till instruktioner i systemprompten så att modellen alltid skickar `sms`. CLI- och API-exemplen ovan låser `sms` med `constant_value` / `constantValue`, så modellen väljer inte kanal.

#### Aktivera systemverktyget \`skip\_turn\`

Uppringare behöver ofta en stund för att ta emot SMS:et innan de kan läsa upp koden. Utan `skip_turn` kan agenten prata över pausen eller upprepa uppmaningar.

#### Lägg till via kontrollpanelen

Välj **Add Tool** i **Tools**, välj **System tool** och aktivera **Skip turn**. Ingen ytterligare konfiguration krävs.

#### Lägg till via CLI

I `agent_configs/<agent-name>.json`, under `conversation_config.agent.prompt`, anger du `built_in_tools.skip_turn` till `null` (standardvärden) så att Skip turn aktiveras och kör sedan:

```bash
elevenlabs agents push --agent "<agent-name>"
```

#### Lägg till via API

```python
from elevenlabs import ElevenLabs

elevenlabs = ElevenLabs()

elevenlabs.conversational_ai.agents.update(
    agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
    conversation_config={
        "agent": {
            "prompt": {
                "built_in_tools": {
                    "skip_turn": None,
                },
            },
        },
    },
)
```

```typescript
import { ElevenLabsClient } from "@elevenlabs/elevenlabs-js";

const elevenlabs = new ElevenLabsClient();

await elevenlabs.conversationalAi.agents.update("agent_7101k5zvyjhmfg983brhmhkd98n6", {
  conversationConfig: {
    agent: {
      prompt: {
        builtInTools: {
          skipTurn: null,
        },
      },
    },
  },
});
```

Om du redan har angett `tool_ids` när du skapade webhook-verktygen, sammanfoga `built_in_tools` med samma `prompt`-objekt i stället för att ersätta det.

Lägg till vägledning i systemprompten så att modellen vet när den ska anropa verktyget, till exempel:

```text
When the caller indicates they are still waiting to receive the OTP code — for example,
"hold on", "I haven't received it yet", or "give me a second" — use the skip_turn tool
to wait silently rather than speaking. Do not repeat the prompt or ask for the code again
until the caller indicates they are ready.
```

Mer information finns i [Skip turn](/docs/sv/eleven-agents/customization/tools/system-tools/skip-turn).

#### Orkestrera flödet i systemprompten

Använd en systemprompt som tydligt ordnar verktygen i följd, till exempel:

```text
You are a secure verification agent. When you need to verify a caller's identity:

1. Ask for their phone number if you do not already have it.
2. Standardize the number to E.164 for tool calls: a leading plus, country code, then digits only, no spaces (for example +14155552671).
3. Call send_SMS_verification with their number and Channel set to "sms".
4. Tell the caller: "I've sent a verification code to your phone. Please read it out when you're ready."
5. If the caller says they haven't received the code yet or asks for a moment, use skip_turn to wait silently.
6. Once the caller provides the code, call check_SMS_verification with their number and the code.
7. If the response status is "approved", proceed with the verified flow.
8. If the code is invalid, let the caller know and offer to resend.
```

## Felsökning

### Twilio `60200` — Ogiltig parameter (HTTP 400)

Twilio kan returnera en brödtext som denna när förfrågnings-URL:en eller brödtexten inte stämmer överens med vad Verify API förväntar sig:

```json
{
  "code": 60200,
  "message": "Invalid parameter",
  "more_info": "https://www.twilio.com/docs/errors/60200",
  "status": 400
}
```

**Detta ska du kontrollera:** Sökvägen måste använda ditt **Verify Service SID** (`VA...`) från inställningarna för Authenticate-tjänsten (Verify). Att ange ditt **Account SID** (`AC...`) i `.../Services/{Sid}/...` är en vanlig orsak till `60200`. Se Twilios dokumentation om [60200](https://www.twilio.com/docs/errors/60200) för andra fall med ogiltiga parametrar.

### Twilio `20003` — Autentiseringsfel — Inga autentiseringsuppgifter angavs (HTTP 401)

När rubriken `Authorization` saknas, är felaktigt formaterad eller inte skickas kan Twilio svara med:

```json
{
  "code": 20003,
  "message": "Authentication Error - No credentials provided",
  "more_info": "https://www.twilio.com/docs/errors/20003",
  "status": 401
}
```

**Detta ska du kontrollera:** Verktyget måste skicka en `Authorization`-rubrik vars värde är hela `Basic <base64>`-strängen (inklusive ordet `Basic` och ett enkelt mellanslag före Base64-utdata). Base64-indata måste vara exakt `ACCOUNT_SID:AUTH_TOKEN` utan extra mellanslag eller radbrytningar. Kontrollera att hemligheten är kopplad till den här rubriken i båda webhook-verktygen. Se [20003](https://www.twilio.com/docs/errors/20003).

### Andra problem

* **Nummer nekas i testläge:** Öppna [Verified phone numbers](https://console.twilio.com/us1/develop/phone-numbers/manage/verified) i Twilio Console och kontrollera att mottagarens nummer finns med innan du testar.
* **Agenten pratar över uppringaren:** Kontrollera att **Skip turn** är aktiverat och att systemprompten instruerar modellen att använda `skip_turn` när uppringaren behöver tid.