Saltar para o conteúdo

Guias

SIP

Quando o agente de voz e o simples reencaminhamento não chegam e pretende ligar um número ao seu próprio softphone ou sistema telefónico (PBX), precisa de um fornecedor de trunk SIP - a volai é um deles. Esta página é um guia passo a passo.

1Chamadas recebidas para o seu servidor SIP

Defina o encaminhamento do número para mode: "sip" e indique o seu sipUri - a partir daí a chamada vai diretamente para si, e não para o nosso agente nem para o reencaminhamento:

bash
curl -X PATCH "https://volai.eu/v1/numbers/+420601234567" \
  -H "Authorization: Bearer vk_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"routing": {"mode": "sip", "sipUri": "sip:rececao@o-seu-servidor.com"}}'

Só o minuto recebido é cobrado - 0,50 kr/min (≈ 0,02 EUR), sem agente adicional - a estrutura completa do pedido e os outros modos de encaminhamento estão na referência da API REST.

Autenticação na sua central

Primeiro enviamos a chamada para o seu servidor SIP como um INVITE sem autenticação para sipUri. Uma central que lhe responde com um pedido de autenticação (401/407) e recusa a chamada sem mais nunca a recebe nesta forma - não há ninguém que responda ao pedido. Por isso acrescente ao encaminhamento também sipUsername e sipPassword - preenchendo ambos, a nossa rede responde ao pedido (SIP digest) e marca o número chamado. Verificado com uma chamada real para o número SIP nativo da Vapi, que aceita credenciais independentemente do conteúdo. Se a sua própria central também estabelece a chamada, depende dela - tem de responder efetivamente ao INVITE com um pedido de autenticação e aceitar o nome de utilizador e a palavra-passe que indicar; não o garantimos para todas as centrais (nos testes falhou, por exemplo, com o domínio SIP da Twilio). Sem sipUsername e sipPassword, o encaminhamento mantém a forma atual, sem autenticação. As credenciais acrescentam-se assim:

bash
curl -X PATCH "https://volai.eu/v1/numbers/+420601234567" \
  -H "Authorization: Bearer vk_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"routing": {"mode": "sip", "sipUri": "sip:rececao@o-seu-servidor.com", "sipUsername": "rececao", "sipPassword": "supersecret123"}}'

Enviamos sempre o número chamado exatamente como aparece em sipUri antes do sinal @ - nunca acrescentamos nem retiramos um prefixo ou um zero inicial, pelo que a central de destino tem de tratar exatamente o que ali indicar.

Nem sipUsername nem sipPassword podem conter dois pontos, sinal @, espaços, aspas ou barra invertida, e cada um pode ter no máximo 64 caracteres.

Preencher apenas um dos dois é rejeitado - a API devolve "Please fill in both username and password, or leave both empty."

Dois pontos na parte do utilizador de sipUri (antes do sinal @) e uma porta no anfitrião (depois dos dois pontos a seguir ao servidor, por exemplo :5060) ainda não são suportados em conjunto com sipUsername e sipPassword - ambos devolvem o mesmo erro rígido. Sem credenciais, ambos continuam a funcionar sem alteração.

Exceção: um trunk SIP BYO da Vapi (endereço <credentialId>.sip.vapi.ai, ou <credentialId>.sip.eu.vapi.ai para uma organização na região da UE) não aceita credenciais. A Vapi reconhece as nossas chamadas pelo IP nos gateways do trunk e, com sipUsername e sipPassword preenchidos, a chamada nunca se estabelece, pelo que a API rejeita esse encaminhamento com o código de validação. O número SIP nativo da Vapi (sip:<name>@sip.vapi.ai) não é afetado.

Quem mais vê o nome de utilizador e a palavra-passe

O nome de utilizador e a palavra-passe viajam com a chamada para a nossa rede e ficam nos registos de encaminhamento - não é o único que os pode ver. Crie na sua central uma conta dedicada a nós, e não use a palavra-passe principal de administrador.

Atualizações parciais: um campo omitido mantém o valor guardado

Se o seu PATCH enviar apenas sipUri e omitir sipUsername e sipPassword , ambos os campos ficam inalterados - não precisa de os reenviar em cada alteração de sipUri. Um campo totalmente omitido do corpo mantém sempre o valor guardado; a autenticação só é apagada por uma cadeia vazia explícita em AMBOS os campos. A única exceção é a alteração do servidor: se alterar também a parte depois do sinal @, tem de enviar novamente a palavra-passe - nunca enviamos uma palavra-passe guardada para um servidor diferente daquele para o qual a indicou. Verifique o estado atual com o campo hasSipPassword da resposta.

A chamada não se estabeleceu? Autorize-nos por IP

A autenticação Sipa só funciona com um destino que desafie o INVITE e aceite as credenciais (verificado com o número SIP nativo da Vapi) - caso contrário a chamada não passa, quer preencha credenciais quer não. A nossa sinalização vem do intervalo 81.31.45.0/24, mais frequentemente de 81.31.45.51 e 81.31.45.56. Autorize todo esse intervalo na sua central e não precisará de credenciais - ela reconhece a chamada pelo endereço de origem, e não pelo nome de utilizador e palavra-passe.

2Credenciais SIP de um número

Obtenha as credenciais da linha com uma única chamada:

bash
curl "https://volai.eu/v1/numbers/+420601234567/sip" \
  -H "Authorization: Bearer vk_YOUR_KEY"
json
{
  "server": "sip.volai.cz",
  "username": "123456",
  "password": "a1b2c3d4e5f6",
  "outboundTrunkAddress": "sip.volai.cz",
  "port": 5060,
  "transport": "tcp",
  "inboundSignallingCidrs": ["81.31.45.0/24"]
}

Configuração num softphone (Zoiper, Linphone)

Ambas as aplicações pedem basicamente o mesmo, apenas com nomes diferentes - procure "Add account" / "SIP account":

CampoValor
Servidor / Domíniosip.volai.cz
Nome de utilizadorda resposta acima (username)
Palavra-passeda resposta acima (password)
TransporteTCP
Porta5060 (porta SIP predefinida - deixe em branco se o campo oferecer uma opção vazia)

O cliente pede que preencha um realm?

Deixe o campo vazio - a maioria dos clientes obtém o realm a partir do pedido de autenticação do servidor. O registo do seu cliente pode mostrar um domínio técnico pertencente à nossa rede, o que é esperado. Se o seu cliente exigir um realm como obrigatório, contacte o apoio.

Depois de guardar, o softphone deve registar-se (um ícone de estado "online"/"registado") e as chamadas para o número começarão a tocar diretamente nele.

3Chamadas efetuadas a partir de um cliente SIP

Depois de o softphone estar registado, pode marcar por si próprio através desta linha - não precisa de chamar nenhuma das nossas APIs, marca diretamente a partir do cliente como numa linha telefónica normal.

Os minutos saem do seu saldo volai

As chamadas efetuadas através de um cliente SIP são cobradas à mesma tarifa de uma chamada efetuada através da API - 0,92 kr/min (≈ 0,04 EUR) e debitadas do seu saldo - e não de uma conta SIP separada. As tarifas não incluem IVA, tal como toda a tabela de preços.

A ligação decorre diretamente entre o seu cliente e o servidor sip.volai.cz, e não através da nossa API, pelo que os minutos não podem ser bloqueados no momento exato da marcação. Uma chamada marcada diretamente a partir de um cliente SIP é cobrada retroativamente a partir dos registos de chamadas da rede - no mínimo 10 minutos depois de terminar, normalmente em meia hora. A chamada não aparece no seu saldo no momento da marcação. Os limites diários de chamadas e as verificações de saldo no momento da marcação não se aplicam a estas chamadas - só monitorizam as chamadas da API. Assim, o seu saldo pode descer abaixo de zero. Quando o saldo chega a zero, as novas ações faturáveis da API/MCP passam a ser rejeitadas (uma chamada exige um saldo de pelo menos 5 CZK). Quando o saldo ficar abaixo de zero, o acesso SIP da linha é desligado em poucos minutos, o reencaminhamento é desligado e recebe um e-mail; depois de carregar o saldo para pelo menos 5 CZK, tudo é retomado automaticamente e a palavra-passe mantém-se. Se a dívida não for regularizada no prazo de uma semana, o número é libertado de volta para o stock (o que termina permanentemente o acesso SIP). Por isso, vigie o seu saldo com antecedência, e não quando já está a zero.

Tem um agente de voz com IA, e não um softphone?

Este passo pressupõe um cliente que possa registar-se na linha (SIP REGISTER) - um softphone, uma central. Uma plataforma que apenas envia uma chamada autenticada uma vez, sem registo persistente (tipicamente agentes de voz com IA como o ElevenLabs), precisa de outra abordagem - veja Traga o seu próprio agente.

Utilize o endereço do trunk de saída da plataforma a partir do campo outboundTrunkAddress, e não o server acima - todos os detalhes nessa página.

4Limites

  • Um registo por linha - um conjunto de credenciais suporta um dispositivo registado de cada vez. Se iniciar sessão com um segundo cliente, o primeiro perderá provavelmente o registo - não conte com vários dispositivos em simultâneo na mesma linha.
  • Chamadas efetuadas a partir do seu próprio agente sim, peering completo de trunk não - as credenciais da linha permitem que o SEU cliente se registe connosco como telefone. As chamadas efetuadas a partir do seu próprio agente de voz (ElevenLabs ou outra plataforma) FUNCIONAM, no entanto, hoje - através do relay, veja Traga o seu próprio agente. Continua, porém, a não ser possível ligar a sua central como operador par com encaminhamento próprio para chamadas RECEBIDAS do exterior - para isso use o encaminhamento forward para o número da sua central.
  • Apenas voz - sem vídeo nem outras extensões SIP.