Guias
Agente próprio
Quer ligar a um número volai a sua própria plataforma de voz - o ElevenLabs Conversational AI no seu próprio workspace, o Vapi, o Retell ou até um IVR próprio em Asterisk/FreeSWITCH - em vez do agente integrado do volai? Esta página é um guia para os dois sentidos: chamadas recebidas e efetuadas. Nas chamadas efetuadas não paga ainda a sobretaxa de agente de 2,50 kr/min (≈ 0,10 EUR) - o agente é operado (e pago) por si, na sua plataforma.
Visão rápida
As chamadas recebidas configuram-se encaminhando o número para o endereço SIP da sua plataforma - sem mecânica nova. As chamadas efetuadas passam por uma ligação de relay de curta duração, porque a plataforma não consegue registar a linha de forma permanente como cliente SIP.
Vai precisar de: um número volai, uma chave de API (vk_...) e uma conta na sua plataforma (ElevenLabs, Vapi, central própria...).
1Quando usar agente próprio e quando o integrado
Os dois caminhos funcionam no mesmo número e com o mesmo saldo - diferem apenas em QUEM opera a lógica da conversa e no custo adicional:
| Critério | Agente integrado | Agente próprio |
|---|---|---|
| Quem conduz a conversa | Nós - um systemPrompt, a nossa voz e o nosso workspace ElevenLabs. | O próprio - qualquer plataforma, prompt próprio, voz própria, ferramentas próprias. |
| Configuração | Uma chamada a POST /v1/agents. | Credenciais SIP do número + configuração da sua plataforma (esta página). |
| Preço da chamada | 0,92 kr/min (≈ 0,04 EUR) efetuada, 0,50 kr/min (≈ 0,02 EUR) recebida | igual - 0,92 kr/min (≈ 0,04 EUR) efetuada, 0,50 kr/min (≈ 0,02 EUR) recebida |
| Sobretaxa de agente | + 2,50 kr/min (≈ 0,10 EUR) | nenhuma - paga apenas os minutos da chamada |
| Transcrição, resumo, deteção de atendedor | Sim, automaticamente. | Não - fica a cargo (ou não) da sua própria plataforma. |
Não paga a sobretaxa de agente, mas também não recebe de nós nada de graça - a sua plataforma (ElevenLabs, Vapi...) paga-a diretamente, segundo a tabela de preços dela. Nós faturamos apenas os minutos de chamada na linha volai, tal como com um cliente SIP ou com o agente integrado. Os preços são sem IVA, como toda a tabela de preços.
2Chamadas recebidas no agente próprio
Nenhuma mecânica nova - basta o encaminhamento existente mode: "sip" (igual ao de um softphone próprio, ver SIP) com o sipUri da sua plataforma. Para um número SIP-trunk do ElevenLabs registado no SEU próprio workspace, trata-se do endereço com o mesmo número que tem a sua linha volai:
curl -X PATCH "https://volai.cz/v1/numbers/+420601234567" \
-H "Authorization: Bearer vk_A_SUA_CHAVE" \
-H "Content-Type: application/json" \
-d '{"routing": {"mode": "sip", "sipUri": "sip:+420601234567@sip.rtc.elevenlabs.io"}}'E na sua conta ElevenLabs (Settings → Phone Numbers → Import → SIP trunk) registe este número com inbound_trunk_config:
{
"provider": "sip_trunk",
"phone_number": "+420601234567",
"label": "O meu agente",
"inbound_trunk_config": {
"allowed_addresses": ["81.31.45.0/24"],
"media_encryption": "allowed"
}
}allowed_addresses acima é o nosso intervalo de sinalização (81.31.45.0/24) - mais seguro do que o universal 0.0.0.0/0, que deixa entrar um INVITE de qualquer lado. Ambos deixam passar a chamada, mas numa importação sem credenciais a allowlist é a ÚNICA verificação - por isso indique o intervalo, não 0.0.0.0/0.
Utiliza uma plataforma diferente do ElevenLabs? O princípio é o mesmo - descubra nela o endereço SIP para onde deve chegar a chamada do seu número e indique-o em sipUri. No Vapi, o mesmo intervalo vai para o BYO trunk como gateways.
No Vapi, o endereço de encaminhamento é sip:<E164>@<credentialId>.sip.vapi.ai - o <credentialId> encontra-se no seu BYO SIP trunk no Vapi; uma organização na região da UE tem, em vez de sip.vapi.ai, o domínio sip.eu.vapi.ai. O sip.vapi.ai simples pertence aos números nativos do Vapi e não funciona para um número nosso. Deixe o nome de utilizador e a palavra-passe vazios no BYO trunk, o Vapi reconhece as nossas chamadas pelo IP nos gateways.
Em gateways, indique o intervalo como IP 81.31.45.0 e a máscara (netmask) 24 em separado. Com a máscara por omissão 32, o Vapi deixaria passar apenas um endereço e rejeitaria as nossas chamadas.
3Chamadas efetuadas a partir do agente próprio (relay)
Este é o sentido contrário - a sua plataforma efetua a chamada para fora. A maioria das plataformas de IA de voz (incluindo o ElevenLabs) não consegue registar de forma permanente uma linha telefónica como cliente SIP - limita-se a enviar uma chamada autenticada com as credenciais da sua linha. A rede telefónica não deixa passar essa chamada diretamente para o número de destino e, por isso, encaminha-a através de uma ligação de relay de curta duração:
Porquê relay e não marcação direta
A marcação direta do número de destino através do trunk não funciona por nenhum dos dois caminhos possíveis: para um número fora da nossa rede a chamada nem sequer chega a existir (a plataforma comunica a falha e não fica rasto em lado nenhum) e, para outro número volai na nossa rede, só se liga INTERNAMENTE como chamada anónima - nunca sai realmente da nossa rede, embora pareça uma chamada estabelecida. O relay é a única forma de a chamada realmente sair.
1. Configure a sua plataforma para a sua linha
Obtenha as credenciais SIP da sua linha:
curl "https://volai.cz/v1/numbers/+420601234567/sip" \
-H "Authorization: Bearer vk_A_SUA_CHAVE"{
"server": "sip.volai.cz",
"username": "123456",
"password": "a1b2c3d4e5f6",
"outboundTrunkAddress": "sip.volai.cz",
"port": 5060,
"transport": "tcp",
"inboundSignallingCidrs": ["81.31.45.0/24"]
}A resposta devolve server (para o REGISTER de um softphone, ver SIP) e outboundTrunkAddress SEPARADAMENTE - não são intermutáveis.
E defina outboundTrunkAddress - NÃO server - como trunk de saída da sua plataforma. No ElevenLabs trata-se do campo outbound_trunk_config do número de telefone em causa (Settings → Phone Numbers → o seu número → Outbound calling), exatamente neste formato:
{
"outbound_trunk_config": {
"address": "sip.volai.cz",
"transport": "tcp",
"media_encryption": "allowed",
"credentials": {
"username": "123456",
"password": "a1b2c3d4e5f6"
}
}
}Indique exatamente outboundTrunkAddress
O endereço do trunk de saída tem de ser exatamente o valor de outboundTrunkAddress da resposta - quer coincida com server, quer não. Um endereço diferente significa que a chamada não é encaminhada na rede e a plataforma comunica-o como 1011 sip request timed out - no histórico de chamadas não fica nada.
2. Crie a ligação de relay
Imediatamente antes da chamada (a ligação tem uma duração curta, ver os limites abaixo), chame:
curl -X POST https://volai.cz/v1/relay \
-H "Authorization: Bearer vk_A_SUA_CHAVE" \
-H "Content-Type: application/json" \
-d '{"to": "+420777123456", "from": "+420601234567"}'{
"id": "rl_4f2a91cd",
"sipName": "volai_relay_2",
"sipUri": "sip:volai_relay_2@sip.volai.cz",
"expiresAt": 1756111760000,
"callId": "c_9d4e2b7f"
}O número de destino indica-o a NÓS em to - a plataforma nunca o vê, recebe apenas o sipName simples da resposta.
3. Peça à plataforma que ligue para o sipName
O nome simples, não o SIP URI completo
O ElevenLabs, no campo to_number rejeita o SIP URI completo com a mensagem “SipCallTo should be a phone number or SIP user, not a full SIP URI” - por isso a resposta acima devolve sipName (o nome simples volai_relay_2) e sipUri (o completo sip:volai_relay_2@sip.volai.cz) SEPARADAMENTE. Em to_number só pertence o primeiro.
No ElevenLabs, isto significa chamar /v1/convai/sip-trunk/outbound-call com to_number definido diretamente como o sipName:
{
"agent_id": "agent_...",
"agent_phone_number_id": "phnum_...",
"to_number": "volai_relay_2"
}agent_id encontra-se no seu agente no ElevenLabs, agent_phone_number_id é o phone_number_id do número importado - devolve-o a resposta da importação ou pode lê-lo na lista Phone numbers.
Tem um cliente SIP próprio ou uma central em vez do ElevenLabs? Marque diretamente o sipUri completo, como uma chamada SIP normal - esta restrição aplica-se apenas às plataformas que querem um nome simples sem o prefixo sip: .
4. O que acontece a seguir
A rede telefónica aceita a chamada com o nome volai_relay_2, encaminha-a para o seu to e define como número visível de quem liga o seu from - quem recebe vê no ecrã a sua linha volai, não o nome interno do slot de relay (se o número tiver nomes de relay próprios - ver Faturação abaixo; caso contrário, quem recebe vê o número de demonstração do volai). Quando a chamada termina, o lease é libertado e os minutos são faturados como uma chamada efetuada normal - 0,92 kr/min (≈ 0,04 EUR), sem sobretaxa de agente.
A resposta sobre a marcação da chamada só chega depois de todo o toque (facilmente dezenas de segundos) - não é um erro, mas um timeout curto do seu lado pareceria nesse momento uma falha, embora a chamada esteja em curso.
4Resolução de problemas
As mensagens mais frequentes com um agente próprio e o que fazer:
| Mensagem | Causa | Solução |
|---|---|---|
| 1011 sip request timed out | O endereço do trunk de saída não é outboundTrunkAddress. | No ElevenLabs, defina outbound_trunk_config.address como outboundTrunkAddress da resposta com as credenciais SIP, não como server. |
| SipCallTo should be a phone number or SIP user, not a full SIP URI | to_number contém o sipUri completo em vez do nome simples. | Em to_number só pertence o sipName da resposta de POST /v1/relay. |
| A chamada termina logo na plataforma (no ElevenLabs failed), do nosso lado nada | Marcou o número de telefone diretamente, não através do relay. | Crie uma ligação de relay (POST /v1/relay) e ligue para o sipName devolvido. |
| max auth retry attempts reached for SIP invite | A plataforma não passou a autenticação: ou o nome de utilizador ou a palavra-passe do trunk de saída não coincidem, ou a chamada chegou como número de telefone em vez de sipName - a rede pede então outra autenticação, que a plataforma não consegue passar. | Copie o nome de utilizador e a palavra-passe exatamente das credenciais SIP do número (username, password). Em to_number indique apenas o sipName de POST /v1/relay e inicie a chamada através da API (POST /v1/convai/sip-trunk/outbound-call) ou da ferramenta MCP do ElevenLabs make_outbound_call, não por um formulário que só aceita números de telefone. O lease espera pela chamada apenas ttlSecs (por omissão 120 s). |
| 404 from_number_not_owned | from em POST /v1/relay não é um número volai seu. | Indique em from exatamente o número volai a partir do qual liga. |
| 400 relay_lease_limit | Neste número (1) ou conta (2) já está a decorrer um lease ativo. | Aguarde que o lease seja libertado ou cancele um que não esteja a ser usado (DELETE /v1/relay/{id}). |
| 503 capacity_busy | O pool partilhado de slots de relay está neste momento cheio. | Nada é cobrado - tente novamente daí a pouco. |
| A chamada recebida não toca | O número não está importado no ElevenLabs, allowed_addresses não deixa passar o nosso intervalo ou o encaminhamento não está guardado no volai. | Confirme os três passos acima; se a central pedir 401, preencha o nome de utilizador e a palavra-passe no encaminhamento. |
| Quem recebe vê o número volai em vez do seu | O número ainda não tem nomes de relay próprios. São criados logo após a compra e desta vez não correu bem. | A chamada seguinte repete a criação por si. Se quem recebe continuar a ver o número volai passada uma hora, escreva ao suporte. |
| Uma chamada repetida termina logo com recusa (SIP 603) | A plataforma voltou a marcar o mesmo sipName, tipicamente depois de uma chamada não atendida. Um lease liga apenas uma chamada. | Antes de cada tentativa, mesmo de uma repetição após chamada não atendida, crie um novo lease (POST /v1/relay) e desative a repetição automática na plataforma. |
5Faturação
Uma chamada efetuada através do relay é faturada ao mesmo preço de uma chamada efetuada normal - 0,92 kr/min (≈ 0,04 EUR) - sem qualquer sobretaxa de agente. Os preços são sem IVA, como toda a tabela de preços.
A simultaneidade é limitada (ver os limites abaixo): no máximo 1 chamada ativa por cada um dos seus números e no máximo 2 em simultâneo por conta.
Quem recebe só vê a sua linha volai se o número tiver nomes de relay (relayNames) próprios - o número recebe-os logo após a compra. Enquanto não os tiver, o lease passa para o pool partilhado e quem recebe vê o número de demonstração do volai. Se isto durar mais de uma hora, escreva ao suporte.
6Limites, quotas e segurança
O limite é de 1 lease ativo por cada um dos seus números e no máximo 2 por conta - uma salvaguarda deliberada para que um único cliente não ocupe todo o pool partilhado de slots de relay:
| O quê | Valor |
|---|---|
| Lease à espera da primeira chamada (pending) | 120 s por omissão, ttlSecs 15 a 300 s |
| Chamada em curso (active) | 15 minutos |
| Lease ativo por cada um dos seus números | no máximo 1 |
| Leases ativos por conta | no máximo 2 |
| Utilização do lease | de uso único - uma segunda chamada no mesmo lease é recusada, e uma repetição após chamada não atendida também precisa de um novo lease |
- from tem de ser um número volai seu - caso contrário
from_number_not_owned. Sem esta verificação seria possível fazer-se passar por uma linha alheia (caller ID spoofing). - As mesmas barreiras de uma chamada normal - lista de não chamar (vale apenas para chamadas, não para SMS), bloqueio automático de 30 dias após 3 tentativas falhadas para o mesmo número em 24 horas, linhas de tarifa especial, proteção contra ciclos entre números volai, bloqueio do número de destino e o limite geral de frequência de chamadas. Nada disto se pode contornar através do relay.
- Pool cheio -> 503 capacity_busy - os slots de relay são um limite de simultaneidade partilhado por TODA a plataforma, não apenas pela sua conta. Em caso de
capacity_busynada é cobrado, tente novamente daí a pouco. - A referência REST completa (códigos de erro,
GET/DELETEsobre os leases) encontra-se em REST API.
Cada erro da API inclui cause (quem o resolve) e action (o que fazer) - ver Formato dos erros na referência da REST API.
Relacionado
Servidor MCP
Ligue o Claude Code, o Codex CLI, o Codex desktop, o Cursor e outros editores de IA.
API REST
Referência completa de todos os endpoints: números, chamadas, SMS, números de telemóvel para SMS, agentes e os seus rascunhos, ferramentas, gravações, webhooks, lista de não contactar, relay, conta, tarefas, saldo, documentos, calendários e integrações.
Agente de voz
Prompt de sistema, ferramentas, passagem a uma pessoa, gravações e dados estruturados da chamada.
SIP
O seu próprio softphone, credenciais SIP, chamadas de saída através de um cliente SIP.