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

# Registrar chamadas do Twilio

> **Avançado**
>
> Este guia aborda um padrão de integração avançado para desenvolvedores que precisam ter controle total sobre sua
> infraestrutura do Twilio. Para uma configuração mais simples, considere usar a [integração nativa do Twilio](/docs/pt/eleven-agents/phone-numbers/twilio-integration/native-integration), que
> gerencia a configuração automaticamente.

## Quando usar cada abordagem

Antes de começar, entenda as diferenças entre a integração nativa e a abordagem de registrar chamada:

| Recurso                              | Integração nativa | Registrar chamada |
| ------------------------------------ | ----------------- | ----------------- |
| Facilidade de configuração           | Mais fácil        | Mais complexa     |
| Transferências de chamada            | Compatível        | Não compatível    |
| Lógica personalizada do Twilio       | Limitada          | Controle total    |
| Gerenciamento de números de telefone | Pela ElevenLabs   | Pelo Twilio       |

## Visão geral

O endpoint de registrar chamada permite usar sua própria infraestrutura do Twilio enquanto aproveita os agentes da ElevenLabs para a conversa. Em vez de importar seu número do Twilio para a ElevenLabs, você mantém controle total da configuração do Twilio e usa a API da ElevenLabs para registrar chamadas e receber [TwiML](https://www.twilio.com/docs/voice/twiml) para conectá-las aos seus agentes.

Esta abordagem é ideal quando você:

* Precisa manter sua infraestrutura e workflows existentes do Twilio
* Quer controle programático sobre o roteamento e tratamento de chamadas
* Tem fluxos de chamada complexos que exigem lógica personalizada do Twilio antes de conectar a um agente
* Precisa integrar agentes da ElevenLabs a um sistema de telefonia existente

## Como funciona

1. Seu servidor recebe uma chamada recebida ou inicia uma chamada de saída pelo Twilio
2. Seu servidor chama o endpoint de registrar chamada da ElevenLabs com os detalhes do agente e da chamada
3. A ElevenLabs retorna TwiML que conecta a chamada ao seu agente via WebSocket
4. Você retorna esse TwiML ao Twilio para estabelecer a conexão

> **Note**
>
> Ao usar o endpoint de registrar chamada, a funcionalidade de transferência de chamadas não está disponível, pois a ElevenLabs
> não tem acesso direto às credenciais da sua conta do Twilio.

## Pré-requisitos

* Uma [conta da ElevenLabs](https://elevenlabs.io)
* Um agente conversacional da ElevenLabs configurado ([crie um aqui](/docs/pt/eleven-agents/quickstart))
* Uma [conta do Twilio](https://www.twilio.com/try-twilio) com um número de telefone ativo
* Seu agente configurado com formato de áudio μ-law 8000 Hz (consulte a [configuração do agente](#agent-configuration))

## Configuração do agente

Antes de usar o endpoint de registrar chamada, configure seu agente para usar o formato de áudio correto compatível com o Twilio.

#### Configurar saída de TTS

1. Navegue até as configurações do seu agente
2. Acesse a seção Voice
3. Selecione "μ-law 8000 Hz" no menu suspenso

![](/docs/_fern-img/b37196c36051755fb0b10a99b393501ec11573f963c83b6b092e1b5926c6617f.webp)

#### Definir formato de entrada

1. Navegue até as configurações do seu agente
2. Acesse a seção Advanced
3. Selecione "μ-law 8000 Hz" para o formato de entrada

![](/docs/_fern-img/ec87531c38e26f2293b90126f1b91ee9acb4cc677c6f3e83a6e1b6029743d3f7.webp)

## Referência da API

O endpoint de registrar chamada aceita os seguintes parâmetros:

| Parâmetro                             | Tipo   | Obrigatório | Descrição                                            |
| ------------------------------------- | ------ | ----------- | ---------------------------------------------------- |
| `agent_id`                            | string | Sim         | O ID do agente que atenderá a chamada                |
| `from_number`                         | string | Sim         | O número de telefone de quem liga                    |
| `to_number`                           | string | Sim         | O número de telefone de destino                      |
| `direction`                           | string | Não         | Direção da chamada: `inbound` (padrão) ou `outbound` |
| `conversation_initiation_client_data` | object | Não         | Variáveis dinâmicas e substituições de configuração  |

O endpoint retorna TwiML, que você deve passar diretamente ao Twilio.

## Implementação

```python
import os
from fastapi import FastAPI, Request
from fastapi.responses import Response
from elevenlabs import ElevenLabs

app = FastAPI()

elevenlabs = ElevenLabs()
AGENT_ID = os.getenv("ELEVENLABS_AGENT_ID")

@app.post("/twilio/inbound")
async def handle_inbound_call(request: Request):
    form_data = await request.form()
    from_number = form_data.get("From")
    to_number = form_data.get("To")

    # Register the call with ElevenLabs
    twiml = elevenlabs.conversational_ai.twilio.register_call(
        agent_id=AGENT_ID,
        from_number=from_number,
        to_number=to_number,
        direction="inbound",
        conversation_initiation_client_data={
            "dynamic_variables": {
                "caller_number": from_number,
            }
        }
    )

    # Return the TwiML directly to Twilio
    return Response(content=twiml, media_type="application/xml")

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)
```

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

const app = express();
app.use(express.urlencoded({ extended: true }));

const elevenlabs = new ElevenLabsClient();
const AGENT_ID = process.env.ELEVENLABS_AGENT_ID;

// Handle incoming Twilio calls
app.post("/twilio/inbound", async (req, res) => {
  const { From: fromNumber, To: toNumber } = req.body;

  // Register the call with ElevenLabs
  const twiml = await elevenlabs.conversationalAi.twilio.registerCall({
    agentId: AGENT_ID,
    fromNumber,
    toNumber,
    direction: "inbound",
    conversationInitiationClientData: {
      dynamicVariables: {
        caller_number: fromNumber,
      },
    },
  });

  // Return the TwiML directly to Twilio
  res.type("application/xml").send(twiml);
});

app.listen(8000, () => {
  console.log("Server running on port 8000");
});
```

## Chamadas de saída

Para chamadas de saída, inicie a chamada pelo Twilio e direcione a URL do webhook para seu servidor, que então registra a chamada na ElevenLabs:

```python
from twilio.rest import Client
import os
from fastapi import Request
from fastapi.responses import Response
from elevenlabs import ElevenLabs

# Initialize clients
twilio_client = Client(
    os.getenv("TWILIO_ACCOUNT_SID"),
    os.getenv("TWILIO_AUTH_TOKEN")
)
elevenlabs = ElevenLabs()
AGENT_ID = os.getenv("ELEVENLABS_AGENT_ID")

def initiate_outbound_call(to_number: str):
    call = twilio_client.calls.create(
        from_=os.getenv("TWILIO_PHONE_NUMBER"),
        to=to_number,
        url="https://your-server.com/twilio/outbound"
    )
    return call.sid

@app.post("/twilio/outbound")
async def handle_outbound_webhook(request: Request):
    form_data = await request.form()
    from_number = form_data.get("From")
    to_number = form_data.get("To")

    twiml = elevenlabs.conversational_ai.twilio.register_call(
        agent_id=AGENT_ID,
        from_number=from_number,
        to_number=to_number,
        direction="outbound",
    )

    return Response(content=twiml, media_type="application/xml")
```

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

// Initialize clients
const twilioClient = new Twilio(process.env.TWILIO_ACCOUNT_SID, process.env.TWILIO_AUTH_TOKEN);
const elevenlabs = new ElevenLabsClient();
const AGENT_ID = process.env.ELEVENLABS_AGENT_ID;

// Initiate an outbound call
async function initiateOutboundCall(toNumber: string) {
  const call = await twilioClient.calls.create({
    from: process.env.TWILIO_PHONE_NUMBER,
    to: toNumber,
    url: "https://your-server.com/twilio/outbound",
  });
  return call.sid;
}

// Handle the Twilio webhook for outbound calls
app.post("/twilio/outbound", async (req, res) => {
  const { From: fromNumber, To: toNumber } = req.body;

  const twiml = await elevenlabs.conversationalAi.twilio.registerCall({
    agentId: AGENT_ID,
    fromNumber,
    toNumber,
    direction: "outbound",
  });

  res.type("application/xml").send(twiml);
});
```

## Personalização de conversas

Use o parâmetro `conversation_initiation_client_data` para passar variáveis dinâmicas e substituir a configuração do agente:

```json
{
  "agent_id": "your-agent-id",
  "from_number": "+1234567890",
  "to_number": "+0987654321",
  "direction": "inbound",
  "conversation_initiation_client_data": {
    "dynamic_variables": {
      "customer_name": "John Doe",
      "account_type": "premium",
      "order_id": "ORD-12345"
    }
  }
}
```

> **Info**
>
> Para mais informações sobre variáveis dinâmicas e substituições, consulte a documentação de [variáveis dinâmicas](/docs/pt/eleven-agents/customization/personalization/dynamic-variables) e
> [substituições](/docs/pt/eleven-agents/customization/personalization/overrides).

## Configuração do Twilio

Configure seu número de telefone do Twilio para apontar para seu servidor:

#### Criar uma URL pública

Para desenvolvimento local, use o [ngrok](https://ngrok.com) para expor seu servidor:

```bash
ngrok http 8000
```

#### Configurar seu número do Twilio

1. Acesse o [Console do Twilio](https://console.twilio.com)
2. Navegue até Phone Numbers > Manage > Active numbers
3. Selecione seu número de telefone
4. Em "Voice Configuration", defina a URL do webhook para o endpoint do seu servidor (por exemplo, `https://your-ngrok-url.ngrok.app/twilio/inbound`)
5. Defina o método HTTP como POST

![](/docs/_fern-img/510d09d492b0c6ac9966f8fe39a9da685df79e8108f6fbc55fe502f48f650084.webp)

## Limitações

Ao usar o endpoint de registrar chamada em vez da integração nativa:

* **Sem transferências de chamada**: a funcionalidade de transferência não está disponível porque a ElevenLabs não tem acesso às suas credenciais do Twilio
* **Configuração manual**: você precisa configurar os formatos de áudio e gerenciar o roteamento de TwiML por conta própria
* **Sem importação pelo painel**: números de telefone registrados dessa forma não aparecem no painel de números de telefone da ElevenLabs