Voximplant
Transmita chamadas do Voximplant para o ElevenAgents a partir de um cenário do VoxEngine usando Media Streams.
A integração com o Voximplant está disponível de forma limitada e é habilitada por workspace. Entre em contato com seu representante da ElevenLabs antes de encaminhar o tráfego de clientes.
Visão geral
A integração com o Voximplant conecta uma chamada em um cenário do VoxEngine diretamente a um agente no ElevenAgents por WebSocket, usando o Voximplant Media Streams. O Voximplant gerencia a telefonia: ele faz ou atende a chamada e decide o que acontece depois. O ElevenAgents gerencia a conversa. Não é necessário um tronco SIP nem middleware.
As chamadas de entrada e saída funcionam da mesma forma: assim que a chamada é conectada, o cenário abre um WebSocket por chamada para a ElevenLabs. Quando a conversa termina, a ElevenLabs envia ao cenário um único evento de decisão que informa se deve transferir a pessoa que ligou para um humano, encerrar a chamada ou tratar a chamada como um timeout.
Como a integração funciona
- Seu cenário do VoxEngine atende uma chamada de entrada ou faz uma chamada de saída.
- O cenário abre um WebSocket para o endpoint da ElevenLabs do seu agente, autenticando-se com uma chave de API da ElevenLabs como token bearer.
- O cenário inicia o stream de mídia com
call.sendMediaTo(), transmitindo quaisquercustomParameters. A ElevenLabs transforma cada parâmetro em uma variável dinâmica e responde com seu própriostart. - O Voximplant e a ElevenLabs trocam áudio PCM linear de 16 bits a 8 kHz em mensagens
media. - Quando a conversa termina, a ElevenLabs envia o restante da última frase do agente, um
evento personalizado
elevenlabs-decisione uma mensagemstop. Em seguida, o cenário fecha o WebSocket e age de acordo com a decisão.
Requisitos
Antes de começar, confira se você tem:
- Uma conta do Voximplant com um aplicativo, um número de telefone ou chamadas de saída e permissão para editar cenários.
- Um workspace da ElevenLabs com a integração com o Voximplant habilitada.
- Um agente da ElevenLabs e uma chave de API dedicada.
Configure a ElevenLabs
Crie ou selecione um agente
Crie o agente no ElevenAgents. Defina uma primeira mensagem se ele precisar falar assim que a chamada for conectada. Os formatos de áudio são definidos pela integração, portanto os formatos configurados do agente não são usados em chamadas do Voximplant.
Habilite Encerrar chamada
Em Agente → Ferramentas → Ferramentas do sistema, habilite Encerrar chamada para que o agente possa finalizar a conversa. O motivo informado pelo agente ao encerrar a chamada é enviado ao seu cenário com a decisão.
Adicione uma regra de transferência do Voximplant (opcional)
Para permitir que o agente transfira a pessoa que ligou para um humano, forneça a ele a ferramenta de sistema Transferir para número com uma
regra de transferência cuja configuração de provedor seja voximplant. A regra não tem destino: a
conversa termina com uma decisão transfer-to-agent, e seu cenário encaminha a pessoa que ligou. As regras de transferência
são configuradas pela API. Adicione a ferramenta com um PATCH no agente:
Envie o objeto built_in_tools completo do agente, incluindo as ferramentas que ele já possui, como end_call.
A opção que o agente retorna é o token fixo voximplant, portanto uma regra do Voximplant por ferramenta é
suficiente. Números de telefone e URIs SIP configurados para outros provedores não são oferecidos em chamadas do Voximplant.
As regras de transferência são uma configuração gerenciada pela API. Configure e atualize pela API a ferramenta Transferir para número de um agente que as utiliza, conforme acima; o editor de ferramentas do dashboard funciona com a lista de transferências por número.
Crie uma chave de API dedicada
Crie uma chave de API no mesmo workspace do agente e limite o escopo dela ao ElevenAgents. Para aceitar
conexões somente do Voximplant, restrinja os endereços IP permitidos da chave aos servidores de mídia do Voximplant,
listados pelo Voximplant em
https://api.voximplant.com/getMediaResources?with_mediaservers.
Anote a URL do WebSocket
O cenário se conecta a uma URL que contém o ID do seu agente:
Para fixar uma ramificação do agente, adicione ?branch_id=<branch_id>.
Se sua conta da ElevenLabs estiver em um ambiente isolado de residência de dados, substitua <region> pelo código da
sua região. Consulte residência de dados para ver as regiões
disponíveis.
Configure o Voximplant
Crie um aplicativo
No painel de controle do Voximplant, abra Applications
e clique em Create application. Dê um nome a ele, por exemplo, elevenlabs-agent, e clique em
Create.

Armazene a chave de API como segredo
No aplicativo, abra Secrets e clique em Add secret. Nomeie-o como ELEVENLABS_API_KEY, cole
no campo Value a chave de API que você criou para o workspace do agente e clique em Add secret. O
cenário a lê com VoxEngine.getSecretValue(), portanto a chave nunca aparece no código do cenário.

Crie o cenário
Abra Scenarios, clique em Create scenario, nomeie-o como elevenlabs_agent, cole o código abaixo,
substitua o ID do agente em ELEVENLABS_URL e clique em Save. Ele atende uma chamada de entrada, a transmite
para o agente e age de acordo com a decisão quando a conversa termina. Para uma chamada de saída, abra
o WebSocket no manipulador CallEvents.Connected da chamada que você fez.

Encaminhe chamadas para o cenário
Abra Routing, clique em Create rule, dê um nome a ela e atribua o cenário elevenlabs_agent.
O padrão padrão .* envia todas as chamadas para o aplicativo por meio do cenário;
restrinja-o a um número de telefone se o aplicativo também atender outras chamadas. Para encaminhar um número de telefone,
anexe-o ao aplicativo em Numbers.

Faça uma chamada de teste
Você pode ligar para o aplicativo pelo navegador sem um número de telefone:
-
Abra Users, clique em Create user e crie um usuário com uma senha.

-
Em Routing, clique em Test tools e depois em Softphone. Entre como esse usuário, permita o acesso ao microfone, informe qualquer destino e ligue. O agente atende com sua primeira mensagem.
-
Quando a chamada terminar, abra Call history. Cada chamada lista uma conexão WebSocket ao lado da própria chamada. Clique em View log para ver a sessão.

O registro mostra a decisão enviada pela ElevenLabs, o fechamento do WebSocket e o que o cenário fez em seguida. Neste exemplo, a pessoa que ligou pediu para falar com alguém, então a decisão é
transfer-to-agentcom o motivo informado pelo agente.
Aja com base no evento elevenlabs-decision, não em MEDIA_ENDED. O Voximplant dispara MEDIA_ENDED após
cerca de um segundo sem áudio da ElevenLabs, o que pode acontecer no meio de uma conversa.
Variáveis dinâmicas
Cada chave em customParameters se torna uma variável dinâmica com o mesmo nome. Valores que não são
strings são convertidos em texto; por exemplo, true se torna "true". customParameters pode ser um
objeto ou uma string codificada em JSON. Chaves que começam com system__ ou integration__ são reservadas e
são descartadas.
Eventos de decisão
Quando a conversa termina, a ElevenLabs envia exatamente uma decisão antes da mensagem stop:
Se o cenário enviar stop ou fechar o WebSocket primeiro, por exemplo, porque a pessoa que ligou desligou,
a ElevenLabs não enviará nenhuma decisão.
Áudio
O Voximplant e a ElevenLabs trocam PCM linear mono de 16 bits a 8 kHz em ambas as direções. A ElevenLabs transmite o áudio do agente em um ritmo próximo ao tempo real, portanto, quando a pessoa que ligou interrompe o agente, no máximo cerca de 0,4 segundos da resposta interrompida ainda são reproduzidos.
Erros de autenticação
A ElevenLabs fecha o WebSocket com o código 1008 e o motivo bad auth token quando o cabeçalho
Authorization está ausente ou malformado, a chave de API é inválida ou não é permitida a partir do endereço IP
de conexão, a chave pertence a outro workspace ou o usuário da chave não pode acessar um
agente com autenticação habilitada.
Limitações e recursos não compatíveis
- Ferramentas de cliente e a ferramenta de sistema Reproduzir tom de tecla do teclado não são compatíveis. Transferir para número funciona apenas por meio de uma regra de transferência do Voximplant; o cenário decide para onde a pessoa que ligou vai.
- Substituições de configuração, como uma primeira mensagem diferente, não podem ser transmitidas pelo cenário; apenas variáveis dinâmicas podem.
- Os resultados da coleta de dados não são enviados ao cenário. Use o webhook pós-chamada para recebê-los.