Hospedagem/VOICE/Documentação
ForHosting VOICE

Documentação

Uma página só, quatro trilhas. Comece por aqui, entregue as duas do meio a quem atende o telefone e a quem toca o negócio, e mande a última para quem escreve o código.

Para começar

A sua central em cinco minutos

Tudo o que está aqui embaixo já existe na sua conta. Nada disso precisa de instalador, de visita de técnico nem de um aparelho que você tenha que comprar.

  • Você já tem números e ramais. Eles nascem junto com a sua conta, com as credenciais SIP que cada aparelho precisa. Um ramal é uma pessoa ou um posto; um número é o que a gente de fora disca.
  • Aponte um número para algum lugar. Na aba Números você diz o que uma ligação que entra por ali deve fazer: tocar num ramal, tocar num grupo, abrir um menu, entrar numa fila ou seguir o seu horário.
  • Atenda pelo navegador. Abra a aba Telefone, libere o microfone, e essa aba vira um aparelho que funciona. Ligue para o teste de eco digitando *43 e você vai se ouvir de volta.
  • Depois ponha o seu horário e a sua caixa postal. Esses dois são o que impede uma ligação de se perder às sete da noite, e são as duas coisas que mais costumam faltar numa central recém-estreada.

Com pressa? Há cinco modelos de partida — um consultório, um escritório de advocacia, uma oficina, uma loja e uma linha residencial — que criam o seu horário, a sua rota de entrada e a caixa postal de fora do horário numa única requisição. Eles nunca passam por cima do que você já configurou.

Como se entra no seu painelpela API

O painel fica na sua página do VOICE e só aparece com uma sessão. Essa sessão é emitida pela sua área do cliente; aqui não se digita nada.

PassoO que faz
1Você entra na sua área do cliente, em elportaldelcliente.com.
2Escolhe «Administrar minha central» no menu da sua conta. Isso pede ao VOICE uma sessão em seu nome e leva você à sua página do VOICE com a credencial no fragmento do endereço.
3O painel substitui a página comercial. A credencial é apagada da barra de endereços antes de desenhar qualquer coisa, e expira sozinha.

Para quem for construir esse botão, este é o contrato inteiro:

POST /inquilinos/:inquilino/sesiones     # escopo sistema: só o portal pode emitir
{ "minutos": 15 }
→ { "clave": "pbx_ses_…", "caduca": "…", "ambito": "sesion", "minutos_max": 60 }

/pabx-virtual#t=<clave>&exp=<ISO>&v=<inquilino>

A credencial viaja no fragmento e não na query de propósito: um fragmento nunca é enviado a um servidor, então não acaba num cabeçalho Referer, nem nos registros de acesso, nem num intermediário do caminho. Expira em minutos, tem teto, e não consegue fabricar uma chave permanente.

Para quem atende o telefone

O painel, aba por abapela API

16 seções, as mesmas 16 nos oito idiomas. Tudo o que está aqui existe também na API.

AbaO que faz
ResumoComo vai a sua central agora mesmo: ligações de hoje, atendidas, em curso, o seu pico e quão alcançáveis os seus aparelhos têm estado.
Meus númerosOs seus números, e o que cada um faz quando toca.
MenusMenus de voz: digite 1 para vendas, e dentro de vendas outro menu.
RamaisPessoas e aparelhos, com regras por pessoa: siga-me, desvios, não perturbe, o que cada um pode discar e o porteiro.
TelefoneO telefone em si: discar, atender, transferir, estacionar e ver quem está em ligação.
FilasFilas com posição, espera medida, retorno de ligação, quem está de turno e quem atende o quê.
SalasSalas de conferência com senha, e quem está dentro neste momento.
Caixa postalRecados com transcrição, saudações, senha, lixeira e limite de tamanho.
DiretórioA lista de nomes que quem liga alcança soletrando no teclado.
RecepçãoA telefonista, as ligações estacionadas em tempo real, as janelas de manutenção e a tabela de códigos.
FiltrosLista negra, filtro de anônimos, avisos de quem insiste demais e tudo sobre quem pode chegar até você.
HoráriosHorário comercial, feriados e a chave de dia e noite.
MúsicaMúsica de espera e as faixas que cada fluxo toca.
ChamadasCada ligação com número, duração, caminho e gravação.
LinhasLinhas simultâneas: o que você tem garantido, o que está pegando emprestado e o seu pico.
ConsumoO que você consumiu neste mês, dia a dia.

O telefone dentro do navegadorligação real

Uma aba é um aparelho. Sem instalar aplicativo, sem comprar telefone de mesa e sem portar número nenhum: é um ramal da sua própria central, registrado a partir do navegador.

  • É um ramal de verdade. O navegador se registra na sua central igual a um telefone de mesa, e o áudio vai por uma conexão cifrada. Quem ligar para o seu número chega na aba, e a aba liga para fora.
  • A aba tem que estar aberta. Uma aba fechada é um telefone fora da tomada. Esse é o limite honesto de um telefone no navegador, e a razão de ele acompanhar um aparelho de mesa em vez de substituí-lo em todo lugar.
  • Você vê quem está em ligação.ligação real As luzes dos seus colegas se atualizam ao vivo — livre, tocando, falando —, então você sabe se há para quem passar antes de tentar passar.
  • Você pode mover uma ligação viva para outro aparelho.ainda sem exercitar «Tenho que sair e estou no meio de uma ligação»: a ligação passa para o seu celular sem desligar. É um botão e não um código de teclado de propósito — quem move uma ligação tem uma tela na frente.
  • Transferir, estacionar e gravar são os mesmos códigos de qualquer aparelho. São digitados, não clicados, então o que você aprende no telefone do navegador vale no telefone de mesa e no seu celular.

O telefone do navegador nunca grava no seu computador. Gravar acontece dentro da central, que é onde valem as regras de quem pode ser gravado e a quem é preciso avisar — veja «Gravar, e a lei».

Códigos que se digitam no aparelho

Mantemos os de sempre onde existe convenção (*72 desvio, *78 não perturbe, *97 caixa postal, *8 captura, *69 quem acabou de ligar). É todo o sentido de um código de teclado: a função já está no painel, e o código é o que faz quem digita *72 há vinte anos acreditar no painel.

Digitados com o telefone livre

CódigoO que fazVerificado
*43Teste de eco. Grava o que você fala e devolve, e sabe dizer «não chegou nada».ainda sem exercitar
*44O mesmo, com atraso: entrega as palavras que estão se perdendo.ainda sem exercitar
*45Teste de teclado. Fala cada tecla conforme você digita.ainda sem exercitar
*46O estado da sua linha: registro, codec, endereço e latência.ainda sem exercitar
*60A hora e a data, ditas direito.bancada de testes
*62O seu consumo do mês (ligações e minutos; o valor, só com a cobrança ativa).pela API
*69Quem ligou para você por último, dito em voz alta e contando as perdidas — depois digite 1 para retornar.ainda sem exercitar
*72Desvio incondicional. Repete o número de volta para você.pela API
*73Cancela todos os desvios.pela API
*74Desvio em paralelo: o seu ramal e o número tocam ao mesmo tempo.pela API
*75Desvio quando você está ocupado.pela API
*76Desvio quando você não atende.pela API
*78Não perturbe ligado, com confirmação falada.pela API
*79Não perturbe desligado.pela API
*80Entra de turno em todas as suas filas.pela API
*81Sai de turno em todas as suas filas.pela API
*90Bloqueia um número (só # bloqueia o da última ligação recebida).ainda sem exercitar
*91Desbloqueia.ainda sem exercitar
*97A sua caixa postal, com a sua senha.bancada de testes
*98Grava a sua saudação.bancada de testes
*99Grava o seu nome — usado pela lista de nomes e pela sala de conferência.bancada de testes
*8Captura a ligação que está tocando na mesa ao lado.pela API
*66Modo: normal · almoço · fechado · feriado · automático.pela API
*411A lista de nomes.bancada de testes
*57Abre um processo de ligação mal-intencionada sobre a que você acabou de receber. A gravação deixa de expirar e ficam guardados a hora, o caminho e o áudio para uma denúncia. Não bloqueia quem ligou: isso quem decide é você.ainda sem exercitar
*85Me avise quando aquele ramal ficar livre.ainda sem exercitar
*86Cancela esse aviso.ainda sem exercitar
*82Escuta uma ligação da sua própria empresa. Nenhuma das duas partes ouve você.ainda sem exercitar
*83Sussurro: só o seu colega ouve você, o cliente não.ainda sem exercitar
*84Entra na ligação: os dois lados ouvem você.ainda sem exercitar
*88As ligações que ninguém retornou, ditas em voz alta — depois digite 1 para retornar a mais antiga.ainda sem exercitar
*47A central se explica sozinha: recita os próprios códigos, 9 para o seguinte, 0 para sair.ainda sem exercitar
70NPega a ligação estacionada na vaga N.pela API

Digitados durante uma conversa

CódigoO que fazVerificado
*1Grava esta ligação, agora. As duas partes são avisadas.pela API
*7Estaciona: quem ligou fica com música e o número da vaga é dito em voz alta.pela API
##<ext>#Transferência cega: você passa e desliga.ligação real
#<ext>#Transferir sem escolher o tipo. A central verifica se há alguém do outro lado e, se não houver, passa às cegas.ainda sem exercitar
*2<ext>#Transferência assistida: primeiro você fala com o colega.ainda sem exercitar

Durante a consulta, numa transferência assistida

CódigoO que fazVerificado
*1Completa a transferência.ainda sem exercitar
*0Cancela e volta para quem ligou.ainda sem exercitar
*3Põe os três na mesma ligação.ainda sem exercitar

Dentro de uma sala de conferência

CódigoO que fazVerificado
*6Qualquer um: silencia e abre o próprio microfone.pela API
*7Qualquer um: quantas pessoas estão na sala.pela API
*9Qualquer um: sair.pela API
*1Organizador: fecha a sala sem trocar a senha.pela API
*2Organizador: abre de novo.pela API
*3Organizador: começa ou para a gravação.pela API

Alguns códigos significam duas coisas e não se chocam: *1 numa conversa normal é «gravar agora», durante a consulta é «completar a transferência», e dentro de uma sala é «trancar a sala». São estados diferentes do mesmo telefone, tratados por código diferente.

Antes de confiar num aparelho novo: Telefones de mesa e adaptadores processam os próprios códigos de estrela e nunca os repassam. Se você digita um código e ouve silêncio e depois o tom de discar, o aparelho engoliu e a central não viu nada. Peça para a gente conferir um modelo novo contra a lista de hoje antes de distribuir.

A caixa postal de qualquer telefonebancada de testes

Digite *97, informe a sua senha, e a caixa inteira está ali — sem aplicativo e sem navegador. Foi escrita para o dono que liga de um celular emprestado.

Menu principal

TeclaO que faz
1Recados novos.
2Recados guardados.
4Saudações e o seu nome gravado.
5Trocar a sua senha.
0Sair para a telefonista.
9Desligar.

Enquanto um recado toca

TeclaO que faz
1Repetir.
2Guardar.
3Apagar. Depois digite 8 em cinco segundos para desfazer.
4Ligar de volta para essa pessoa.
6O próximo, deixando este como novo.
7Encaminhar para um colega com uma nota sua gravada na frente.

Menu de saudações

TeclaO que faz
1Gravar a saudação principal.
2Gravar o seu nome.
3Colocar uma saudação de férias.
4Tirar.

Atender a ligação em si

Um grupo de toque diz «que toque em vários lugares». Tudo o que está nesta lista faz algo que um grupo de toque não consegue.

  • Filas.pela API Uma fila sabe quantas pessoas estão na frente e quanto costuma demorar, então pode dizer. A espera é medida com as suas próprias ligações recentes, nunca inventada — com menos de três amostras não diz nada. Sem ninguém de turno, ninguém fica esperando.
  • Retorno de ligação a partir da fila.pela API É oferecido depois de um tempo de espera, e não é oferecido se a ligação vai ser atendida logo. O pedido sobrevive a um reinício, porque quem pede desliga, e o retorno entra na frente da fila — que foi o que se prometeu.
  • Salas de conferência.pela API Uma sala com o seu número e duas senhas: uma para entrar e outra para organizar. Ninguém precisa de conta em lugar nenhum. As entradas e saídas são anunciadas com o nome que cada um gravou.
  • A lista de nomes.bancada de testes Quem liga soletra um nome no teclado e é encaminhado. Cada palavra do nome é indexada em separado, porque aqui dois sobrenomes são o normal e buscar só pelo primeiro encontra meia empresa. Acentos e o ñ são normalizados, então «Muñoz» se acha digitando 686.
  • O zero para a telefonista.pela API Provavelmente a expectativa mais universal que existe sobre um telefone: conseguir chegar a uma pessoa. O zero desce em cascata da sua telefonista para a caixa postal geral e para dizer isso em voz alta — nunca um desligar mudo.
  • Estacionar e capturar.pela API Estacione uma ligação e ela espera com música numa vaga numerada enquanto você caminha até outra mesa. Qualquer um pega de volta digitando essa vaga. Capturar o telefone que toca ao seu lado é *8.

Para quem toca o negócio

Canais: garantia, empréstimo e devoluçãopela API

É a parte do produto que um teto fixo não sabe fazer, e vale entender antes de escolher o plano.

  • Garantidos. As ligações simultâneas que o seu plano vende. Cabem sempre, faça o que fizer a central, e ninguém tira de você.
  • Emprestados. Acima da sua garantia você usa o que a central tiver livre. Na maioria dos dias você vai estar aqui, e não custa nada a mais.
  • A reserva. Um colchão de canais que não se empresta a ninguém, para que qualquer um alcance a própria garantia a qualquer momento.
  • A devolução. Quando a central aperta, as ligações emprestadas podem ser devolvidas para proteger a garantia de outro. Só vale para contas que ativaram isso, nunca para uma ligação dentro de uma garantia, nunca para uma emergência e nunca em silêncio: a central fala antes de soltar.
  • Não dá para vender demais. A soma de todas as garantias mais a reserva tem que caber. A ativação confere e recusa um plano que não caiba, e é isso que faz a palavra «garantido» significar algo.
  • E dá para ver quando apertou. O congestionamento é informado por episódios com a sua hora, não como um total do mês. «Doze rejeições em trinta dias» se lê como ruído; «na terça passada, entre dez e onze, cinco pessoas ouviram ocupado» é algo sobre o que dá para decidir.

O que acontece quando algo quebra

Uma central se julga no dia em que falta luz, não no dia em que tudo funciona.

  • Mais de uma saída. A central chega ao mundo de fora por várias conexões independentes e escolhe entre elas sozinha. Você não configura isso nem vê acontecer.
  • «Funciona» se mede contra o que interessa. Uma conexão só entra no rodízio se alcança a internet E a rede telefônica. Conferir só a primeira é como uma central acaba sem linha com todas as luzes verdes.
  • Ela se recupera sozinha depois de uma falta de luz. Quando a luz volta, a central e os equipamentos de rede ligam ao mesmo tempo e nem sempre na ordem certa. Em vez de confiar nessa ordem, a central compara sem parar o que tem com o que deveria ter e se conserta — com um teto de quantas vezes pode tentar, para que um defeito de verdade seja escalado em vez de ficar em laço.
  • Ela não corta uma ligação para se consertar. Qualquer conserto que fosse interromper conversas espera até não haver nenhuma.

As gravações e os recados da caixa postal ficam guardados fora da central, então sobrevivem à própria máquina.

Planos e minutos

5 planos, de US$ 100 a US$ 300 por ano, e um número por licença. O minuto de entrada num número da Costa Rica é US$ 0,00.

PlanoSimultâneas, atéDelas, garantidasRamaisRetenção (dias)Por ano
VOICE I3133US$ 100
VOICE II4244US$ 150
VOICE III6366US$ 200
VOICE IV8488US$ 250
VOICE V105Sem limite28US$ 300

Minutos

DestinoPor minuto
Ligações recebidasUS$ 0,00
Costa Rica · fixoUS$ 0,03
Costa Rica · celularUS$ 0,08
América CentralUS$ 0,45
CaribeUS$ 0,55
Resto do mundoUS$ 2,30

Preços em dólares, impostos incluídos. A operadora mede as ligações para celular por segundo. Cada licença inclui 1 número; os números adicionais compartilham a mesma central, os mesmos fluxos e o mesmo painel.

Gravar, e a leipela API

Um áudio gravado é a voz de outras pessoas. Quem manda nisso é a Lei 8968 da Costa Rica, e o desenho sai daí, não do que seria cômodo.

  • Você decide o que é gravado.pela API Tudo, ou só certos ramais, ou só as ligações que entram por certo número. Ou nada, que é uma resposta legítima.
  • A retenção vem com o seu plano. As gravações são apagadas sozinhas quando dá o prazo: o do plano, ou 90 dias para as que são pedidas durante a ligação (com *1) e as de uma sala de conferência. A única exceção é uma gravação presa a um processo de ligação mal-intencionada, que deixa de expirar até você fechar o processo — e fechar devolve um prazo normal, nunca um «apague agora».
  • Compartilhar uma não é dar acesso. Um link assinado toca uma única gravação, expira sozinho e pode ser revogado. A pessoa para quem você manda nunca vê a sua conta.
  • Cada escuta fica anotada. Quem tocou qual gravação e quando. É a voz de outra pessoa: saber quem já ouviu faz parte de guardá-la.
  • Dá para classificar. Cliente, prospecto ou interno. Não há valor padrão de propósito: sem classificar é honesto, e uma etiqueta que a máquina chutou não se distingue depois de uma que uma pessoa escolheu.

As duas partes são sempre avisadas. Pedir à central que grave devolve junto a obrigação de anunciar: as duas coisas não se separam, porque separá-las é como alguém acaba gravado sem saber. Numa sala de conferência o aviso é feito a cada pessoa na hora de entrar.

Limites, proteção e desfazer

O que decide o tamanho de um dia ruim: uma credencial roubada, um erro no roteamento, um número que não para de ligar.

  • Um teto de gasto, diário e mensal.bancada de testes É o que impede uma credencial roubada de custar dinheiro. Alcançado o teto, as ligações param.
  • O que cada ramal pode discar.pela API Só internas, nacional, celular, ou tudo. O telefone do depósito não tem por que conseguir ligar para um número premium. As ligações de emergência nunca passam por aqui.
  • O preço antes de discar.pela API Pergunte quanto custaria um número e a resposta é calculada pela mesma maquinaria que vai cursar a ligação de verdade, não por uma tabela que poderia não ser a aplicada.
  • Um alarme de fraude que olha o comportamento.ainda sem exercitar Uma velocidade estranha, um país para o qual você nunca ligou, uma hora em que ninguém trabalha. Avisa e não corta: um falso positivo aqui não é um alerta chato, é uma ligação que não aconteceu. Ele precisa de dois sinais antes de dizer qualquer coisa, porque um alarme que dispara todo dia se aprende a ignorar.
  • Quem insiste demais é sinalizado.ainda sem exercitar O mesmo número cinco vezes em dois minutos não é um cliente insistente: é um discador automático. De fábrica só avisa; bloquear automaticamente é uma caixinha sua, porque um falso positivo custa um cliente que nunca mais consegue ligar.
  • Um processo para uma ligação mal-intencionada.ainda sem exercitar A hora, o caminho e o áudio, guardados juntos para uma denúncia. Abrir um não bloqueia quem liga: cada ligação nova é mais uma prova, e isso quem decide é você, não a gente.
  • Quão alcançáveis os seus aparelhos têm estado.pela API Não o nosso tempo no ar: o seu. E sempre mostra que parte do período foi de fato medida, porque um percentual que engole em silêncio as horas que ninguém olhou erra sempre para o lado cômodo.
  • O que mudou, quem mudou e como se desfaz.pela API «Ontem funcionava» é uma pergunta com resposta. Cada mudança de configuração fica anotada e pode ser revertida, e reverter confere que ninguém mais mexeu nesses campos no meio-tempo em vez de passar por cima em silêncio.

O que está desligado, e por quê

Um manual que só conta o que funciona obriga você a descobrir o resto sozinho, e sempre se descobre na pior hora. Esta lista é gerada a partir da própria chave, então não consegue descrever como desligado algo que já foi ligado.

O que fazPor quê
A caixa postal para o e-mailO áudio anexado, sem ter que ligar para a caixa. Precisa de uma credencial de correio para a caixa, e essa credencial ainda não existe.
A cobrança automática por minutoA medição funciona e cada ligação é medida; o que não está ligado é o desconto de um saldo pré-pago. Até lá, os minutos são faturados.
Endereço de reserva para os aparelhosPara que os telefones troquem sozinhos entre as duas entradas da central. Precisa de uma credencial do domínio com permissão de escrita; a que temos só lê.
O fax de entradaDetectar o tom e avisar você está construído, e está desligado de propósito: a detecção de fax escuta todas as ligações que entram, e um falso positivo derrubaria uma ligação de voz real. Fica desligado até haver um fax de verdade para medir.

Para quem integra

A APIpela API

O painel é mais um cliente desta API. Tudo o que você muda na mão dá para mudar por programa, com uma chave que é da sua conta.

curl -H "authorization: Bearer <clave>" \
  https://api.voice.forhosting.com/inquilinos/<cuenta>/numeros

Escopos

EscopoO que faz
sistemaAtivação, acima das contas. Uma destas não vai ser entregue a você.
inquilinoA sua conta, leitura e escrita. É a chave com a qual se integra.
lecturaA sua conta, só GET. Para painéis que não devem poder mudar nada.
sesionO mesmo alcance da sua chave de conta, mas expira em minutos. É a que o painel usa, para que um navegador nunca guarde uma credencial permanente.
dispositivoUm único aparelho de um único ramal, e expira em minutos. É a que o app do telefone leva: só alcança o que um telefone precisa, e só do seu próprio ramal.

Quando algo dá errado

CódigoO que faz
400A requisição está malformada, ou um valor não é dos que aceitamos. A mensagem diz qual.
401Sem chave, com uma chave desconhecida, ou com uma sessão que já expirou.
403A chave é boa, mas não pode fazer isso: dados de outra conta, uma rota de ativação, ou uma escrita com uma chave de só leitura.
404Isso não existe na sua conta.
405Essa rota existe, esse método não. Se distingue do 404 de propósito: economiza uma hora.
503 · 504Não deu para alcançar a central, ou ela não respondeu a tempo. Nunca se responde como «você não tem nada»: não conseguir olhar não é o mesmo que não haver nada.

Tudo o que a API pode responder quando diz não

São as cadeias exatas que a API devolve no campo error, lidas do próprio código-fonte da central. Elas saem em espanhol e aqui aparecem tal como são, de propósito: o que você precisa reconhecer é o que chega, não uma tradução. Um … marca o espaço onde entra um dado.

Todo erro traz um código estável. Decida pelo codigo, não pela mensagem. Ele sempre está lá: o que não declara um específico recebe o da sua classe, derivado do HTTP. O texto de error é para uma pessoa ler e pode ser reescrito; o código, não.

{ "error": "…", "codigo": "de_otra_cuenta" }
CódigoHTTPQuando você recebe
mala_peticion400A requisição está malformada, ou um valor não é dos que aceitamos. A mensagem diz qual.
no_autorizado401Sem chave, com uma desconhecida, ou com uma sessão vencida.
prohibido403A chave é boa, mas não pode fazer isto.
no_existe404Não há nada sobre o que agir.
metodo_no_permitido405A rota existe, esse verbo não. Distingue-se de uma rota inexistente de propósito: economiza uma hora.
conflicto409O estado da conta não permite isso agora.
precondicion_fallida412A condição que o seu pedido impôs (If-Match) já não se cumpre: o que pediu para mudar mudou desde que o leu.
ambito_insuficienteSua chave não alcança essa rota. O provisionamento é do portal, não seu.
audio_ilegibleO áudio chegou, mas não deu para ler: está danificado ou cortado. A mensagem diz o motivo.
audio_no_validoUma cadeia de áudio não é válida: só aceita áudios da própria central, sem caminhos, até 1000 caracteres e sem quebras de linha. A mensagem diz quais peças não aceita.
cambio_de_sistemaEssa alteração foi feita pelo seu provedor, ou mexe em algo que só ele altera: sua chave não pode desfazê-la.
canales_por_troncalA divisão de canais enviada no provisionamento não pode ser aceita, e nenhuma parte é salva. O detalhe diz o que está errado. Isso é do provisionamento, não da sua conta.
cedula_mal_formadaO número de identificação não tem a forma do seu tipo: uma cédula física tem 9 dígitos e uma cédula jurídica, 10.
central_no_disponibleNão dá para chegar à central agora. Tente de novo com espera crescente: sua requisição não tem nada de errado.
central_suspendidaA central está suspensa: enquanto estiver, não se autorizam telefones novos.
clase_de_servicioEsse valor não é uma das permissões de chamada que um ramal pode ter.
clave_sin_cuentaA chave não está vinculada a nenhuma conta.
consulta_no_validaUm parâmetro da consulta traz um valor que não aceitamos; por exemplo, um sim/não que não é 1/0 nem true/false.
cuenta_distintaEssa compra pertence a outra conta do portal. Uma compra não muda de dono.
cuenta_invalidaFalta a conta do portal, ou ela não tem o formato esperado.
cuenta_portal_en_usoEssa conta do portal já está vinculada a outra licença ou central. Cada uma tem a sua.
cuenta_suspendidaSua conta está suspensa: pode consultar, mas não alterar nada até ser reativada.
cupo_llenoO plano não admite mais ramais. Libere um ou passe para um plano maior.
cursor_no_validoO cursor de paginação não serve aqui: é de outra central, de outra lista ou de outros filtros. Peça a primeira página com os mesmos filtros.
de_otra_cuentaÉ de outra conta — ou não existe na sua. Os dois casos compartilham um código de propósito: distingui-los revelaria se existe.
demasiado_grandeO áudio passa do tamanho máximo (HTTP 413). A mensagem diz o limite.
duracionA saudação é curta ou longa demais. A mensagem diz quanto dura e qual é o limite.
es_titularEssa é a instalação titular: não é revogada nem suspensa; suspende-se a central.
estado_invalidoEsse estado não é dos que aceitamos. A mensagem diz quais valem.
extension_ajenaEsse ramal não pertence à sua central.
extension_de_la_tiendaEsse ramal é um lugar autorizado pela loja (uma licença, a titular ou um membro): não é apagado aqui; é revogado pelo app.
falta_confirmarApagar uma conta não pode ser desfeito: o pedido tem de trazer confirmar: 'suprimir'.
falta_credencialVocê não enviou nenhuma chave.
formato_no_soportadoO áudio não está num formato aceito (HTTP 415): AAC em MP4 (m4a), MP3, WAV ou Ogg.
garantia_no_cabeNão resta capacidade garantida para o que foi pedido. Não é uma falha: é o que impede vender o mesmo canal duas vezes. A mensagem diz quanto resta.
identidad_ajenaSó pode pedir permissão com um número da sua própria conta.
identidad_de_otroEsse número de identificação já está atribuído a outra licença. Para o mover, envie mover: true.
instalacion_invalidaO identificador da instalação não tem o formato esperado: de 8 a 128 letras, dígitos, ponto, hífen, dois-pontos ou sublinhado.
instalacion_sin_licenciaEssa instalação não é a desta licença nem a deste lugar. Cada licença, e cada lugar de uma central da loja, serve a um único telefone.
licencia_solo_appUma licença do app só tem o telefone da sua instalação: não admite outros aparelhos.
mensaje_con_enlaceA mensagem de um pedido de permissão não pode conter links.
mensaje_largoA mensagem de um pedido de permissão tem no máximo 140 caracteres.
misma_casaEsse número é da sua própria conta: entre as suas linhas não é preciso permissão.
nacionalUm feriado nacional não se altera nem se apaga. Para abrir nesse dia, crie uma exceção com cerrado:false.
no_editableEsse dado é alterado pelo seu provedor, não daqui.
no_es_de_la_tiendaEssa conta não foi comprada na loja: o seu cancelamento segue outro processo.
no_es_de_tiendaEssa central não foi comprada na loja: é administrada pelo portal.
no_existeNão há nada sobre o que agir.
no_pude_mirarCegueira, não diagnóstico: não foi possível perguntar à central (ARI caído, o banco, o contêiner). Não significa que esteja bem; significa que não se sabe.
permiso_no_existeEsse número não tem permissão para lhe ligar: não há nada para revogar.
plan_desconocidoEsse plano não está à venda. Os válidos são os publicados.
plan_legadoEsta central mantém o plano com que foi vendida. Para passá-la à escala atual é preciso pedir expressamente.
prueba_distintaUma central de teste não se torna real, nem uma real se torna de teste. Uma compra real tem sua própria referência.
reconfigurandoA central está trocando de enlace e ela mesma avisa. Dura segundos e é o correto, não uma falha. A janela expira sozinha em 3 minutos, para que um aviso esquecido não silencie o alarme de verdade.
ref_de_otro_tipoEssa referência é de uma licença e foi pedida como central, ou o contrário.
ref_invalidaA referência do portal não tem o formato esperado.
sesion_vieja_para_gastarA sessão tem mais de 15 minutos. Para uma operação que gasta saldo, como ligar ou juntar uma chamada, peça uma sessão nova.
sin_numero_voiceNão foi possível atribuir um número VOICE agora. Tente de novo em alguns segundos.
sin_registrarA falha de verdade: a operadora não nos tem registrados e por ali não entram chamadas. Esta sim merece acordar alguém.
solicitud_cerradaEsse pedido de permissão já não está pendente: foi aprovado, rejeitado, retirado ou expirou.
solicitud_no_existeEsse pedido de permissão não existe ou não é da sua conta.
solo_la_titularNuma central com várias pessoas, isto é decidido pela titular; um membro não pode.
solo_lecturaSua chave é somente leitura e isto gravaria.
tope_aparatosEsse ramal já tem todos os aparelhos que admite. Desvincule um antes de adicionar outro.
tunel_retiradoEsse endereço era o do túnel, retirado em 25-09-2026: a API vai direto à central. Chame a rota normal; o estado do caminho está em /_directo/salud.
url_no_permitidaEsse endereço não é aceito para um webhook: tem de ser https e público, nunca de uma rede privada.
version_distintaEsse ajuste mudou desde que o leu. Leia de novo, decida sobre o que há agora e escreva com a versão nova; o detalhe traz a versão atual e o que há.
ya_existeJá existe algo com esse nome ou número. Tente com outro, não com a mesma carga.
CódigoQuantasMensagem
400218
  • 'desde' tiene que ser una fecha ISO
  • 'dispositivo_id' va con 'extension_id'
  • 'en' tiene que ser una fecha ISO (la hora del portal)
  • 'extension_id' y 'numero' son excluyentes
  • 'hasta' como mucho a 30 días
  • 'hasta' es una fecha ISO-8601
  • 'hasta' es una fecha ISO-8601 futura
  • 'hasta' tiene que ser posterior a 'desde' (o al momento de abrirlo)
  • 'limite' es un entero de 1 a …
  • 'minutos' es un entero de 1 a …
  • 'minutos' y 'hasta' se excluyen: manda uno
  • 'modos' es un objeto {modo: {tipo, id}}
  • 'modos' no es un JSON válido
  • 'modos': '…' no lleva destino propio (…)
  • 'modos.…' necesita {tipo, id}
  • 'musica' es el nombre de una clase de música en espera (letras, cifras, - y _)
  • 'numero' no parece un número
  • 'paginar' es 1 o true
  • 'segmentos' lleva caracteres que no acepto
  • 'zona' es una zona horaria IANA (p. ej. America/Costa_Rica)
  • '…' es el desplazamiento de antes: al paginar, el cursor dice dónde seguir
  • '…' es sí o no (1/0 o true/false)
  • '…' es una fecha ISO-8601
  • '…' no es una clave de audio de la central
  • '…': como mucho 1000 caracteres y sin saltos de línea
  • '…': piezas de audio que no acepto —solo audios de la central, sin rutas—:
  • alert_info: máximo 200 caracteres
  • alert_info: no puede llevar saltos de línea
  • ambito: …
  • antelacion_horas: número de horas
  • avisar_el es posterior a la cita: no se puede recordar algo que ya pasó
  • bloque de más de 10.000: cárgalo en trozos
  • borrar una cuenta no se puede deshacer: mande confirmar: 'suprimir'
  • cada miembro necesita extension_id o externo
  • canales_garantizados y canales_max van los dos como mapa por troncal, o los dos como número: no se mezclan
  • canales_troncal no se escribe directo: mande canales_garantizados y canales_max como mapa por troncal
  • capacidad: falta 'tipo_cap' (p. ej. 'text.summarize')
  • categoria: …
  • categoría: …
  • cid_saliente: ese número no es de esta cuenta
  • clase_servicio: …
  • condicion: el caso … no dice qué variable mira
  • condicion: el caso … va a '…', que no es un destino
  • condicion: hace falta al menos un caso en 'casos'
  • consulta: 'url' debe empezar por http:// o https://
  • consulta: espera.aviso_cada_s no baja de 5 segundos
  • contesta: hace falta decir quién atiende ({tipo, id})
  • cuando: fecha ISO de la cita
  • cuenta_portal: la fila de central del portal (4 a 128 caracteres)
  • demasiadas piezas (máx. 24)
  • desde/hasta con formato 'HH:MM'
  • destino externo: número inválido
  • destino: …
  • dia: 0 (domingo) a 6 (sábado)
  • el alias debe tener al menos 3 dígitos
  • el alta ya no acepta canales como número suelto: mande canales_garantizados y canales_max como mapa por troncal {"trk_…": N} (las troncales las publica GET /sistema/canales)
  • el aviso de buzón admite hasta 5 teléfonos
  • el bloque debe tener números de la misma longitud
  • el cuerpo va vacío: manda los bytes del audio
  • el destino '…' necesita el id de un paso
  • el destino '…' necesita un id
  • el destino es de otro inquilino
  • el destino es el mismo número que se está retirando: quien oiga esto acaba de marcarlo
  • el disco no tiene ninguna pista activa con audio
  • el final del bloque es menor que el inicio
  • el guion necesita un nombre
  • el mapa de canales está vacío
  • el mensaje no puede llevar enlaces
  • el mensaje tiene como mucho 140 caracteres
  • el modo de aviso es 'tras' (uno detrás de otro) o 'a_la_vez'
  • el motor de llamadas no está listo
  • el número interno debe tener 3 o 4 dígitos
  • el número … está '…', no asignado
  • el precio (…) está por debajo del coste (…)
  • el saludo dura … s: como mucho … s
  • el saludo dura … s: como mínimo … s
  • el ámbito 'dispositivo' necesita extensión y dispositivo
  • el ámbito '…' necesita inquilino
  • el … no es de esta cuenta
  • el … no está asignado a este inquilino
  • entrada inválida
  • entrada.verificar: 'url' debe empezar por http:// o https://
  • entrada: exito.dest_tipo debe ser uno de …
  • entrada: falta 'exito.dest_tipo' (a dónde va cuando la entrada es válida)
  • entrada: falta 'texto' (lo que se le pide a quien llama)
  • entrada: max no pasa de 32 dígitos
  • es un feriado nacional: crea una excepción con cerrado:false
  • es un mantenimiento global: lo cierra quien opera la central
  • esa extensión es de otro inquilino
  • esa extensión no es de ese inquilino
  • esa extensión no es de este inquilino
  • esa extensión no es de su central
  • esa llamada no es de este inquilino
  • ese apunte no cambió ninguna columna: no hay nada que deshacer
  • ese dispositivo no es de esa extensión, o esa extensión no es de esta cuenta
  • ese guion lo usan …: …
  • ese número es de su propia cuenta: no hace falta permiso
  • ese turno lo usan: …
  • estado: 'activo' o 'suspendido'
  • estado: activa|suspendida
  • estado: …
  • estos campos los cambia su proveedor: …
  • estrategia: …
  • evento desconocido: …. Válidos: …
  • extensión inexistente o de otro inquilino
  • falta 'extension_id' o 'miembro_id'
  • falta 'extension_id' o 'numero'
  • falta 'inquilino'
  • falta 'modo' (null vuelve al automático)
  • falta 'motivo'
  • falta 'nombre'
  • falta 'numero'
  • falta 'prepago' (true o false)
  • falta 'q'
  • falta 'segmentos' o 'decir'
  • falta 'teclas' (los dígitos marcados)
  • falta 'texto'
  • falta 'titulo'
  • falta 'valor'
  • falta dispositivo_id: a qué aparato se mueve
  • falta el nombre
  • falta el número
  • falta el número nuevo (destino)
  • falta extension_id
  • falta inquilino, extensión o quién lo pide
  • falta la instalacion que rechaza
  • fecha: 'AAAA-MM-DD' (una vez) o '--MM-DD' (todos los años)
  • hace falta audio_clave o texto
  • hace falta extension_id o externo
  • hace falta la llamada o el número
  • hace falta miembro_id o extension_id
  • hacen falta 'de' (su número) y 'para' (el número al que quiere llamar)
  • hacen falta 'fecha' y 'nombre'
  • hay varias troncales nacionales con la misma prioridad y ninguna es la de por defecto:
  • hay … ruta(s) apuntando a este disco (…): cámbialas primero
  • horario inexistente o de otro inquilino
  • instalacion: el identificador de la instalación de la app, de 8 a 128 caracteres (letras, dígitos, . _ : -)
  • la búsqueda necesita al menos 2 caracteres
  • la clave de la sala y la del organizador no pueden ser la misma
  • la extensión que contesta no es de este inquilino
  • la extensión «…» es de otro inquilino
  • la extensión «…» no existe
  • la extensión … no existe
  • la garantía (…) no puede pasar del techo (…)
  • la garantía de este inquilino está repartida en … troncales:
  • la pausa «…» debe ir de 1 a 30 segundos
  • la referencia del portal: de 4 a 128 caracteres (letras, dígitos, . _ : -)
  • la tecla … no estaba definida
  • la troncal '…' no existe o no está activa
  • los días van de 0 (domingo) a 6 (sábado)
  • mapa de canales por troncal inválido
  • minutos: un número mayor que cero
  • modo: …
  • modo: … o null para volver al automático
  • modo_presion: firme|elastica|cede
  • nada que cambiar: campos aceptados = categoria, notas, troncal_id
  • no caben … canales garantizados en …: quedan …
  • no caben … canales garantizados: quedan … libres
  • no está archivada: no hay audio que analizar
  • no hay motor de audio
  • no pude leer ese audio: …
  • no pude originar la prueba: …
  • no se puede esperar a uno mismo
  • no sé marcar '…'
  • no sé marcar '…': para llamar fuera del país, ponga + o 00 delante
  • nombre: no puede quedar vacío
  • numero: 1..99
  • numero: hace falta el número que se quiere marcar
  • numero: hace falta un número marcable
  • número de sígueme inválido: …
  • número externo inválido
  • número externo inválido: …
  • número inválido: …
  • número no válido para devolver la llamada
  • número vacío
  • orden: …
  • paises debe ser una lista de prefijos
  • para '…' el rango es …-… (o usa 4 dígitos)
  • para ambito '…' hace falta ambito_id
  • patrón inválido
  • patrón inválido: …
  • plan desconocido: …
  • plan: … (la escalera publicada)
  • plantilla: …
  • prueba: true|false
  • rol: visitante|agente|sistema
  • se espera 'filas': el CDR del operador
  • se esperaba una lista de contactos
  • sólo el ámbito 'dispositivo' se ata a una extensión y a un dispositivo
  • sólo las consultas tienen secreto
  • sólo los ámbitos 'sesion' y 'dispositivo' admiten 'minutos'
  • tecla inválida: …
  • timbrado_s: un entero de 5 a 120
  • tipo: 'cedula_fisica' (9 dígitos) o 'cedula_juridica' (10)
  • tipo: …
  • transporte: …
  • un IVR sin saludo deja al llamante en silencio: pon saludo_texto o saludo_audio
  • una troncal sin host no puede activarse
  • una … no tiene esa forma
  • url debe empezar por http:// o https://
  • url inválida
  • vence: fecha ISO 8601 con zona (UTC)
  • «…» no es una frase que un guion pueda sustituir
  • «…» no es una hora válida
  • «…» no es una hora: se escribe HH:MM
  • «…» no parece un teléfono
  • «…» no vale como habilidad: letras, números, guion o guion bajo
  • «…» no vale: sólo dígitos, asterisco, almohadilla o una pausa tipo P2
  • … es un paso de tipo '…', no '…'
  • …: '…' no es posterior a '…'
  • …: '…-…' se solapa con '…'
  • …: de 4 a 8 dígitos
  • …: demasiado fácil de adivinar
  • …: el identificador de la instalación de la app, de 8 a 128 caracteres (letras, dígitos, . _ : -)
  • …: falta 'respaldo.dest_tipo'. Un paso sin respaldo cuelga al que llama
  • …: número inválido
  • …: respaldo.dest_tipo debe ser uno de …
  • …: texto de 1 a 120 caracteres
4011
  • falta la clave de API
40316
  • clave de chat inválida
  • enlace agotado
  • esa cuenta no es tuya
  • esa extensión está suspendida
  • esa extensión no es la de este aparato
  • ese aparato está suspendido: se reactiva desde el panel
  • ese cambio lo hizo su proveedor (o toca algo que sólo cambia su proveedor): no se puede deshacer desde la cuenta
  • ese cambio no es de esta cuenta
  • ese número no es suyo: solo puede pedir permiso con un número de su cuenta
  • esta clave es de solo lectura
  • esta clave no está atada a ninguna cuenta
  • esta cuenta está suspendida: solo se puede consultar
  • esta operación necesita una clave de sistema
  • esta operación no está abierta a la credencial de un aparato
  • esta sesión tiene más de 15 minutos: para gastar, pida una nueva
  • esto lo decide la titular de la central
40458
  • agente: no está en esta cola
  • agente: no existe en esta cuenta
  • audio_clave: no es un audio de esta cuenta (uno nuevo se sube con PUT …/saludos/:tipo/audio)
  • buzón: no existe en esta cuenta
  • dispositivo
  • el audio de ese saludo no está en la central
  • el audio no está disponible
  • el destino …:… no existe
  • el número … no es de esta central
  • el … no tiene ruta de entrada
  • el … no tiene ruta en esta cuenta
  • enlace
  • enlace caducado
  • enlace no válido o caducado
  • enlace revocado
  • esa central de la tienda no existe
  • esa central no existe
  • esa cita no existe en esta cuenta
  • esa extensión no existe en esta cuenta
  • esa frase no existe en este disco
  • esa grabación aún no está archivada
  • esa licencia no existe
  • esa pista no existe en este disco
  • esa solicitud no existe
  • ese disco no existe en esta cuenta
  • ese dispositivo no existe en esta cuenta
  • ese guion no existe
  • ese inquilino no existe
  • ese mensaje aún no está archivado
  • ese miembro no existe
  • ese número no tiene permiso
  • ese saludo es de texto: no tiene audio
  • ese timbre no existe o ya terminó
  • extensión
  • feriado
  • guion: no existe en esta cuenta
  • horario: no existe en esta cuenta
  • la central no está lista
  • la grabación ya no existe
  • llamada
  • mantenimiento
  • mensaje
  • mensaje: no es de este buzón
  • miembro: no está en esta rota
  • miembro: no está en este grupo
  • no está en la lista
  • no existe en esta cuenta
  • no existe … …
  • no pude traer el audio del archivo
  • provisión no válida
  • recurso desconocido
  • regla
  • saludo: no es de este buzón
  • sesión
  • … '…': no existe en esta cuenta
  • …: '…' no existe
  • …: no existe
  • …: no existe en esta cuenta
40943
  • a la titular no se la revoca: la central es suya
  • a la titular no se la suspende: se suspende la central
  • demasiados dispositivos en la extensión …
  • el menú se muerde la cola: …
  • el plan '…' permite … extensiones
  • el usuario SIP '…' ya existe
  • el … está asignado a …: libéralo primero
  • el … está enfriando hasta …: reasignarlo antes hace que el cliente nuevo reciba las llamadas del anterior. Usa forzar:true si asumes eso.
  • el … está retirado del servicio
  • el … tiene … llamada(s) en el CDR: retíralo, no lo borres
  • el … ya es marcable en este inquilino
  • el … ya está asignado a …
  • el … ya está en uso en este inquilino
  • el … ya tiene otra ruta: edita ésa en vez de duplicarla
  • el … ya tiene ruta: edítala en vez de crear otra
  • esa central es de otra cuenta del portal
  • esa central no es de la tienda
  • esa cuenta_portal es de una central del portal, no de una compra de la tienda: su baja es otro proceso
  • esa cédula ya es de otra licencia (mover: true para moverla)
  • esa extensión es un puesto autorizado desde la tienda: se revoca desde la app, no se borra aquí
  • esa licencia es de otra cuenta del portal: una compra no se cambia de dueño
  • esa provisión ya se usó
  • esa referencia es de una central, no de una licencia
  • esa referencia es de una licencia, no de una central
  • esa solicitud está …
  • ese mensaje no está en la papelera
  • ese número ya está en el inventario
  • esta central conserva la escalera con la que se vendió (plan '…' anterior al 18-oct):
  • esta extensión ya tiene … aparato(s) y su techo es …: desvincule uno antes
  • esto ya no es lo que dejó ese cambio: … se tocó después.
  • la central está suspendida: no se autorizan miembros
  • la cuenta_portal '…' ya es del inquilino …: cada licencia y cada central llevan su propia fila del portal
  • la fila …:… ya no existe. Deshacer un cambio no resucita lo borrado:
  • la troncal tiene garantías vendidas en … inquilino(s):
  • no quedan números libres en el rango …-…
  • no se pudo descifrar la provisión
  • no se puede borrar: le apuntan ….
  • provisión caducada
  • referencia inexistente
  • una licencia de la app sólo tiene el teléfono de su instalación: no admite aparatos SIP sueltos
  • ya existe
  • ya existe otro con ese valor
  • ya hay un feriado de esta cuenta el …: edítalo con PATCH

336 mensagens distintas em 407 pontos do código-fonte da central. Derivado a cada compilação: uma mensagem que muda lá muda aqui.

Hoje quase não há limite de ritmo. O único é uma espera de alguns segundos entre tentativas de abrir o telefone do navegador. Não há cota geral, e preferimos dizer a deixar você descobrir depois de ter construído em cima de uma suposição. Seja razoável, e se estiver planejando algo pesado, avise antes para medirmos junto com você em vez de depois de você.

Até onde dá para chegar

ÁreaEndpointsExemplos
Caixas postais15GET /buzones POST /buzones DELETE /buzones/:buz
Ramais13GET /extensiones POST /extensiones DELETE /extensiones/:ext
Quem lhe pode ligar de graça a partir da rede13GET /red/bloqueos DELETE /red/bloqueos/:numero PUT /red/bloqueos/:numero
Filas12GET /colas POST /colas DELETE /colas/:cola
Música de espera12GET /discos POST /discos DELETE /discos/:disco
Gravações9GET /grabaciones PUT /grabaciones/:grabacion/categoria DELETE /grabaciones/:grb
Grupos de toque8GET /grupos POST /grupos DELETE /grupos/:grp
Menus de voz8GET /ivrs POST /ivrs DELETE /ivrs/:ivr
Turnos de plantão8GET /turnos POST /turnos DELETE /turnos/:turno
Salas de conferência7GET /conferencias POST /conferencias DELETE /conferencias/:sala
Horários7GET /horarios POST /horarios DELETE /horarios/:hor
Avisos ao seu sistema7GET /webhooks POST /webhooks DELETE /webhooks/:whk
Passos de fluxo programável6GET /pasos POST /pasos DELETE /pasos/:pso
Feriados5GET /feriados POST /feriados DELETE /feriados/:fer
O que cada linha diz5GET /guiones POST /guiones DELETE /guiones/:gui
Recados5GET /mensajes DELETE /mensajes/:msg GET /mensajes/:msg
Rotas de entrada5GET /rutas POST /rutas DELETE /rutas/:ruta
Apelidos discáveis4GET /alias POST /alias DELETE /alias/:als
Lembretes de consulta4GET /citas POST /citas DELETE /citas/:cita
Os seus contatos4GET /contactos POST /contactos DELETE /contactos/:con
Chat junto com a voz4GET /conversaciones GET /conversaciones/:cnv POST /conversaciones/:cnv/cerrar
Aparelhos4DELETE /dispositivos/:disp POST /dispositivos/:disp/estado POST /dispositivos/:disp/provision
Processos de ligação mal-intencionada4GET /expedientes POST /expedientes GET /expedientes/:exp
Regras de gravação4GET /grabacion/decidir GET /grabacion/reglas PUT /grabacion/reglas
Registro de ligações4GET /llamadas GET /llamadas/:llamada GET /llamadas/csv
Números4GET /numeros DELETE /numeros/:numero/aviso-cambio GET /numeros/:numero/aviso-cambio
Linhas simultâneas3GET /canales GET /canales/episodios PUT /canales/modo
Histórico de mudanças e desfazer3GET /historial GET /historial/:cambio POST /historial/:cambio/revertir
Lista negra3GET /lista-negra POST /lista-negra DELETE /lista-negra/:neg
Janelas de manutenção3GET /mantenimientos POST /mantenimientos POST /mantenimientos/:mnt/cerrar
A sua conta e o estado dela2GET / PATCH /
Lista de nomes2GET /directorio GET /directorio/buscar
Links para compartilhar2GET /enlaces DELETE /enlaces/:token
Toques do app2GET /timbres/:timbre POST /timbres/:timbre/rechazar
Outras1GET /guiones/claves
Ligações estacionadas1GET /aparcadas
O que a sua chave pode fazer1GET /capacidades
Quem está ligando, e sobre o quê1GET /contexto
Quanto custaria uma ligação1GET /cotizar-llamada
Para onde dá para mandar uma ligação1GET /destinos
Quão alcançáveis estão os seus aparelhos1GET /disponibilidad
Extrato1GET /estado-cuenta
O canal ao vivo1POST /eventos/ticket
Instalações do app1DELETE /instalaciones/:instalacion
Ligações em curso1GET /llamadas-en-curso
Ligar com um clique1POST /llamar
Telefonista1PUT /operadora
Para onde esta casa liga1GET /paises
Modelos de partida1POST /plantilla
O que se pode discar1GET /politica-salida
Presença1GET /presencia
A central liga para você e reproduz algo1POST /probar-audio
Testar onde cairia uma ligação1GET /probar-entrada
Testar uma saída sem cursá-la1GET /probar-salida
Saldo1GET /saldo
Ligações que ninguém retornou1GET /sin-devolver
Unir dois números de fora1POST /unir
Quem fura a fila1GET /vips
O telefone no navegador1POST /webphone/sesion

304 endpoints no total, lidos da própria central em 2026-10-21.

Esta tabela é um resumo. A lista que não pode ficar velha é a que a central gera sobre si mesma: GET /api.

Cada endpoint, um a um

Lido do próprio roteador da central, portanto não pode descrever uma rota que não existe nem esquecer uma que existe. Aqui está apenas o âmbito da sua conta: as rotas de provisionamento são do portal e você não recebe uma chave que chegue até elas.

O que fazO que fazExemplo
GET /guiones/clavesQué frases admite un guion
GET /pela API
PATCH /Editar la ficha (el cliente, sus datos; plan y límites, el portal). Parcial; If-Match → 412pela API
GET /aliaspela API
POST /aliaspela API
DELETE /alias/:alspela API
PATCH /alias/:alspela API
GET /aparcadasLas llamadas aparcadas ahora mismo (#60)pela APIver
GET /buzonesligação real
POST /buzonesligação real
DELETE /buzones/:buzBorrar un buzón. If-Match opcional → 412ligação real
GET /buzones/:buzligação real
PATCH /buzones/:buzSaludo, correo, transcripción, duración máxima. Parcial; If-Match → 412pela API
GET /buzones/:buz/mensajesMensajes de un buzón. ?paginar=1 / ?cursor= → {elementos, siguiente}pela API
PUT /buzones/:buzon/clavePoner o quitar la clave del buzón (#10)bancada de testes
GET /buzones/:buzon/ocupacionCuántos mensajes hay y cuántos caben (#14)bancada de testes
GET /buzones/:buzon/papeleraLo borrado que todavía se puede recuperar (#15)bancada de testes
POST /buzones/:buzon/papelera/:mensaje/recuperarDeshacer un borrado (#15)bancada de testes
GET /buzones/:buzon/saludosLos saludos del buzón, por motivo (con su audio: duración, bytes, huella)bancada de testes
POST /buzones/:buzon/saludosPoner el saludo de un motivo (normal, ocupado, vacaciones…): de texto, o volver a un audio de la cuentabancada de testes
DELETE /buzones/:buzon/saludos/:saludobancada de testes
GET /buzones/:buzon/saludos/:saludo/audioEscuchar un saludo: WAV o MP3 (Accept), con Range y ETagbancada de testes
PUT /buzones/:buzon/saludos/:tipo/audioSubir el saludo de un motivo con la voz del cliente (bytes: m4a, mp3, wav u ogg; 1-90 s)bancada de testes
GET /canalespela API
GET /canales/episodiospela API
PUT /canales/modopela API
GET /capacidadesQué puede esta llave, qué campos edita cada ajuste y con qué límites, y qué hay en cada áreapela API
GET /citaspela API
POST /citasProgramar un recordatorio de cita por teléfonopela APIver
DELETE /citas/:citapela APIver
GET /citas/:citapela APIver
GET /colaspela APIver
POST /colasCrear una cola de espera con agentespela APIver
DELETE /colas/:colaBorrar una cola. If-Match opcional → 412pela API
GET /colas/:colapela APIver
PUT /colas/:colaEstrategia, tiempos, anuncios, música y destinos. PUT PARCIAL; If-Match → 412pela APIver
GET /colas/:cola/callbacksLas devoluciones de llamada pedidaspela APIver
GET /colas/:cola/estadoCuánta gente espera, quién está de turno y cuánto se tardapela API
GET /colas/:cola/habilidadesQué habilidades existen hoy en esta cola
POST /colas/:cola/miembrosAñadir un agente (extensión o número de fuera)pela API
DELETE /colas/:cola/miembros/:miembropela API
PUT /colas/:cola/miembros/:miembro/habilidadesLas etiquetas de un agente (#70)
POST /colas/turnoEntrar o salir de turno (lo mismo que *80 / *81)pela API
GET /conferenciaspela API
POST /conferenciasCrear una sala con número y clavepela APIver
DELETE /conferencias/:salapela API
GET /conferencias/:salapela APIver
PUT /conferencias/:salaCambiar la sala (las claves se cambian, no se leen)pela API
GET /conferencias/:sala/historialQuién estuvo y cuántopela API
POST /conferencias/:sala/invitarLlamar a alguien y meterlo en la salapela API
GET /contactospela API
POST /contactosAlta o importación masivapela API
DELETE /contactos/:conpela API
PUT /contactos/:contacto/vipMarcar o quitar el VIP de un contacto
GET /contextoQuién llama y de qué habló la última vezpela API
GET /conversacionesbancada de testes
GET /conversaciones/:cnvbancada de testes
POST /conversaciones/:cnv/cerrarbancada de testes
POST /conversaciones/:cnv/turnosbancada de testes
GET /cotizar-llamadaCuánto costaría llamar a ese número, antes de marcarlopela API
GET /destinosQué destinos se pueden elegir en esta cuentaligação real
GET /directorioQuién sale en el directorio por nombrebancada de testes
GET /directorio/buscarA quién encontraría el directorio con esas teclasbancada de testes
GET /discospela API
POST /discospela API
DELETE /discos/:discopela API
GET /discos/:discopela API
PATCH /discos/:discopela API
GET /discos/:disco/estadisticaspela API
GET /discos/:disco/frasespela API
PUT /discos/:disco/frasespela API
DELETE /discos/:disco/frases/:frasepela API
PUT /discos/:disco/pistaspela API
DELETE /discos/:disco/pistas/:pistapela API
GET /discos/:disco/probarpela API
GET /disponibilidadCuánto tiempo estuvo arriba cada extensiónpela API
DELETE /dispositivos/:dispRevocar una credencial (y colgar lo que ese aparato tenga en curso)aparelho real
POST /dispositivos/:disp/estadoSuspender o reactivar un dispositivoaparelho real
POST /dispositivos/:disp/provisionEmitir un token para configurar la app sin teclear la clavepela API
POST /dispositivos/:disp/rotarCambiar la clave de un dispositivoaparelho real
GET /enlacesbancada de testes
DELETE /enlaces/:tokenRevocar un enlace compartido por errorbancada de testes
GET /estado-cuentaEstado de cuenta: movimientos, consumo y lo pendiente de reportar, con su semántica (el disponible es del portal)pela API
POST /eventos/ticketTicket para mirar el canal de eventos en vivo (sin teléfono)pela APIver
GET /expedientesLos expedientes abiertos (#64)
POST /expedientesAbrir expediente sobre una llamada
GET /expedientes/:expUn expediente, con su llamada y su grabación
POST /expedientes/:exp/cerrarCerrar un expediente (la fila NUNCA se borra)
GET /extensionespela APIver
POST /extensionesAlta de extensión (crea buzón y credencial)pela APIver
DELETE /extensiones/:extBorrar una extensión. If-Match opcional → 412pela API
GET /extensiones/:extpela API
PATCH /extensiones/:extEditar una extensión. Parcial; If-Match → 412pela API
POST /extensiones/:ext/dispositivosAñadir un dispositivo (celular, computadora…)pela API
POST /extensiones/:ext/no-molestarpela API
GET /extensiones/:ext/reglasligação real
PUT /extensiones/:ext/reglasSígueme, desvío, no molestar y destino de fallo. PUT PARCIAL; If-Match → 412pela API
GET /extensiones/:extension/campLos avisos de desocupado que pidió esta extensión (#58)
DELETE /extensiones/:extension/camp/:objetivoCancelar un aviso de desocupado
POST /extensiones/:extension/moverMover la llamada en curso a otro aparato de la misma extensión (#57)
GET /extensiones/siguiente-librepela APIver
GET /feriadospela API
POST /feriadosFeriado propio o excepción a uno nacional (idempotente por fecha)pela API
DELETE /feriados/:ferBorrar un feriado de la cuenta. If-Match opcional → 412pela API
GET /feriados/:ferUn feriado de la cuenta o nacional, con su versión (ETag)pela API
PATCH /feriados/:ferNombre y cerrado de un feriado de la cuenta (la fecha ES el feriado). If-Match → 412pela API
GET /grabacion/decidir¿Se grabaría esta llamada? Y con qué avisopela API
GET /grabacion/reglaspela API
PUT /grabacion/reglasQué se graba y cuánto se guardapela API
DELETE /grabacion/reglas/:reglapela API
GET /grabacionesGrabaciones; desde/hasta son fechas. ?paginar=1 / ?cursor= → {elementos, siguiente}bancada de testes
PUT /grabaciones/:grabacion/categoriacliente | prospecto | interno, o nada (#68)
DELETE /grabaciones/:grbbancada de testes
GET /grabaciones/:grbFicha: transcripción, resumen, acuerdos y hablantesainda sem exercitar
GET /grabaciones/:grb/accesosQuién ha escuchado esta grabaciónbancada de testes
POST /grabaciones/:grb/analizarVolver a transcribir y resumirainda sem exercitar
GET /grabaciones/:grb/audioEl audio (queda auditado)bancada de testes
POST /grabaciones/:grb/enlaceEnlace firmado para compartir sin dar acceso a la cuentabancada de testes
GET /grabaciones/buscarBuscar por lo que se dijo dentro de las llamadasbancada de testes
GET /grupospela API
POST /grupospela API
DELETE /grupos/:grpBorrar un grupo. If-Match opcional → 412pela API
GET /grupos/:grppela API
PUT /grupos/:grpEstrategia, timbrado, fallo y miembros (si vienen, reemplazan la lista). Parcial; If-Match → 412pela API
POST /grupos/:grp/miembrospela API
DELETE /grupos/:grp/miembros/:miembropela API
GET /grupos/:grp/ordenEn qué orden sonaría ahora mismopela API
GET /guionesligação real
POST /guionesLos textos que dice una línealigação real
DELETE /guiones/:guiligação real
GET /guiones/:guiligação real
PATCH /guiones/:guiCambiar textos, nombre o voz declaradaligação real
GET /historialQué cambió en esta cuenta, quién y cuándopela APIver
GET /historial/:cambiopela APIver
POST /historial/:cambio/revertirDeshacer un cambio de configuraciónpela APIver
GET /horariospela API
POST /horariospela API
DELETE /horarios/:horBorrar un horario. If-Match opcional → 412pela API
GET /horarios/:horpela API
PUT /horarios/:horNombre, zona y tramos (si vienen, reemplazan la lista). Parcial; If-Match → 412pela API
GET /horarios/:hor/estado¿Abierto ahora? Y por quépela API
POST /horarios/:hor/manualInterruptor: abierto, cerrado, almuerzo o feriado, con caducidad; null vuelve al automáticopela API
DELETE /instalaciones/:instalacionDesvincular el teléfono de una instalación de la app (borra sus aparatos y cuelga sus llamadas)pela API
GET /ivrsligação real
POST /ivrsCrear un menú (detecta bucles al guardar)ligação real
DELETE /ivrs/:ivrBorrar un menú. If-Match opcional → 412ligação real
GET /ivrs/:ivrligação real
PUT /ivrs/:ivrSaludo, espera, reintentos, agotado y opciones (si vienen, reemplazan la lista). Parcial; If-Match → 412; ciclo → 409ligação real
GET /ivrs/:ivr/guionEl texto exacto que se va a decirpela API
DELETE /ivrs/:ivr/opciones/:teclaligação real
PUT /ivrs/:ivr/opciones/:teclaligação real
GET /lista-negrapela API
POST /lista-negraBloquear un número entrantepela API
DELETE /lista-negra/:negpela API
GET /llamadasRegistro de llamadas; desde/hasta son fechas (con la llave de un aparato, las de su extensión). ?paginar=1 / ?cursor= → {elementos, siguiente}ligação real
GET /llamadas-en-cursoLas llamadas del inquilino ahora mismo (vista de operadora)pela APIver
GET /llamadas/:llamadaligação real
GET /llamadas/csvExportar el CDRligação real
GET /llamadas/resumenTotales, atención y repartoligação real
POST /llamarTimbrar a la extensión y conectarla con un destinoligação real
GET /mantenimientospela APIver
POST /mantenimientosAvisar a quien llame de que hay un mantenimiento en cursopela APIver
POST /mantenimientos/:mnt/cerrarpela APIver
GET /mensajesBandeja de toda la cuenta (con la llave de un aparato, la de su extensión). ?paginar=1 / ?cursor= → {elementos, siguiente}pela API
DELETE /mensajes/:msgpela API
GET /mensajes/:msgpela API
GET /mensajes/:msg/audioEl audio del mensaje: WAV o MP3 (Accept), con Range y ETag; no lo marca leído y queda auditadopela API
POST /mensajes/:msg/leidopela API
GET /numerospela APIver
DELETE /numeros/:numero/aviso-cambioApagar el aviso de cambio y devolver la línea a su destinoainda sem exercitar
GET /numeros/:numero/aviso-cambioEstado del aviso de cambio de númeroainda sem exercitar
POST /numeros/:numero/aviso-cambioAnunciar que este número cambió y decir el nuevoainda sem exercitar
PUT /operadoraA dónde va el cero (#109)pela APIver
GET /paisesLa memoria del cortafuegos de fraude: a dónde llama esta casa (#65)
GET /pasosPasos de flujo del cliente
POST /pasosAlta de un paso de flujo
DELETE /pasos/:pso
GET /pasos/:pso
PUT /pasos/:pso
POST /pasos/:pso/rotar-secretoRotar el secreto con el que se firma la consulta
POST /plantillaAplicar una plantilla de arranque (horario + ruta + buzón)pela API
GET /politica-salidapela API
GET /presenciaPresencia de las extensiones de la cuenta, agregada por extensiónpela API
POST /probar-audioLlamarte y reproducirte una cadena de audio — la prueba de verdadligação real
GET /probar-entradaA dónde iría una llamada ahora mismoligação real
GET /probar-salidaSimular una salida sin cursarlaligação real
GET /red/bloqueosLos números bloqueadospela API
DELETE /red/bloqueos/:numeroDesbloquear un númeropela API
PUT /red/bloqueos/:numeroBloquear un número (cuelga sus llamadas de red en curso)pela API
GET /red/enviadasLas solicitudes que envié (pendiente | aprobada | no_aprobada)pela API
POST /red/enviadasPedir permiso para llamar gratis (202 siempre igual)pela API
DELETE /red/enviadas/:solRetirar una solicitud, o renunciar a un permiso concedidopela API
GET /red/permisosQuién me puede llamar gratispela API
DELETE /red/permisos/:numeroRevocar un permiso (la llamada en curso sigue; la siguiente ya no es gratis)pela API
GET /red/solicitudesLas solicitudes de llamada gratis que le llegaron (estado=pendiente)pela API
POST /red/solicitudes/:sol/aprobarAceptar: ese número llama gratis (en una central, la titular; extension_id = dónde suena)pela API
POST /red/solicitudes/:sol/bloquearRechazar y bloquear ese númeropela API
POST /red/solicitudes/:sol/rechazarRechazar (a quien pidió no se le avisa)pela API
GET /red/veredictoAntes de llamar: gratis | pago (con su tarifa) | solicitud | no_disponiblepela API
GET /rutasligação real
POST /rutasQué hace una llamada que entra por un númeroligação real
DELETE /rutas/:rutaBorrar una ruta de entrada. If-Match opcional → 412ligação real
GET /rutas/:rutaligação real
PATCH /rutas/:rutaDestino, horario, modos, saludo y grabación. Parcial; If-Match → 412ligação real
GET /saldoSaldo: el espejo local, los topes y el gasto, con su semántica (el disponible es del portal)bancada de testes
GET /sin-devolverLas perdidas que nadie ha devuelto, agrupadas por número (#67)
GET /timbres/:timbreEstado de un timbre de la app (conciliar al despertar)pela API
POST /timbres/:timbre/rechazarRechazar un timbre desde la app (antes o después de registrarse)pela API
GET /turnosLas rotas de guardia (#66)
POST /turnosCrear una rota de guardia
DELETE /turnos/:turnoBorrar una rota (falla si una ruta apunta a ella)
GET /turnos/:turnoUna rota, con quién está de guardia AHORA
PUT /turnos/:turnoCambiar una rota
POST /turnos/:turno/miembrosMeter a alguien en la rota, con su franja
DELETE /turnos/:turno/miembros/:miembroSacar a alguien de la rota
PUT /turnos/:turno/miembros/:miembroCambiar la franja de alguien
POST /unirLlamar a dos números externos y unirlosligação real
GET /vipsQuién se salta la fila de la cola (#61)
GET /webhookspela API
POST /webhookspela API
DELETE /webhooks/:whkpela API
PATCH /webhooks/:whkpela API
GET /webhooks/:whk/entregaspela API
POST /webhooks/:whk/probarMandar un evento de pruebapela API
POST /webhooks/:whk/rotarpela API
POST /webphone/sesionRegistrar el navegador o la app como teléfono de una extensión (la app manda su instalacion)pela API

Exemplos gravados

Não foram digitados. Foram gravados de uma execução real contra esta API, numa conta descartável que depois foi apagada — requisição, status e resposta, exatamente como trafegaram. Os identificadores de conta e de objeto são substituídos por marcadores; o resto não se toca. Um exemplo escrito prova o que quem o escreveu acreditava; um gravado prova o que a central fez.

24 de 226 rotas têm exemplo gravado, da execução de 2026-10-16. As demais estão listadas acima, mas ainda não foram exercitadas assim — preferimos mostrar o número a deixar você supor que são todas.

GET /inquilinos/:inquilino/aparcadas 200

Resposta

{
  "plazas": []
}

DELETE /inquilinos/:inquilino/citas/:id 200

Resposta

{
  "id": "<id>",
  "inquilino": "<cuenta>",
  "numero": "50688889999",
  "nombre": null,
  "cuando": "2026-10-16T22:44:57.219Z",
  "avisar_el": "2026-10-15T22:44:57.219Z",
  "guion": null,
  "estado": "cancelada",
  "intentos": 0,
  "ultimo_intento": null,
  "respondido_el": null,
  "nota": null,
  "creado": "2026-10-16T21:44:58.732Z",
  "actualizado": "2026-10-16T21:44:58.942Z"
}

GET /inquilinos/:inquilino/citas/:id 200

Resposta

{
  "id": "<id>",
  "inquilino": "<cuenta>",
  "numero": "50688889999",
  "nombre": null,
  "cuando": "2026-10-16T22:44:57.219Z",
  "avisar_el": "2026-10-15T22:44:57.219Z",
  "guion": null,
  "estado": "pendiente",
  "intentos": 0,
  "ultimo_intento": null,
  "respondido_el": null,
  "nota": null,
  "creado": "2026-10-16T21:44:58.732Z",
  "actualizado": "2026-10-16T21:44:58.732Z"
}

POST /inquilinos/:inquilino/citas 201

Requisição

{
  "numero": "50688889999",
  "cuando": "2026-10-16T22:44:57.219Z",
  "texto": "ensayo"
}

Resposta

{
  "id": "<id>",
  "inquilino": "<cuenta>",
  "numero": "50688889999",
  "nombre": null,
  "cuando": "2026-10-16T22:44:57.219Z",
  "avisar_el": "2026-10-15T22:44:57.219Z",
  "guion": null,
  "estado": "pendiente",
  "intentos": 0,
  "ultimo_intento": null,
  "respondido_el": null,
  "nota": null,
  "creado": "2026-10-16T21:44:58.732Z",
  "actualizado": "2026-10-16T21:44:58.732Z"
}

GET /inquilinos/:inquilino/colas/:id/callbacks 200

Resposta

[]

GET /inquilinos/:inquilino/colas/:id 200

Resposta

{
  "id": "<id>",
  "inquilino": "<cuenta>",
  "nombre": "Soporte",
  "numero": null,
  "estrategia": "todos",
  "timbrado_s": 20,
  "espera_max_s": 600,
  "decir_posicion": 1,
  "decir_espera": 1,
  "anuncio_cada_s": 30,
  "musica": "default",
  "callback": 1,
  "callback_min_espera_s": 45,
  "agotada_tipo": "buzon",
  "agotada_id": "<id>",
  "vacia_tipo": null,
  "vacia_id": null,
  "creado": "2026-10-16T21:44:57.230Z",
  "actualizado": "2026-10-16T21:44:57.230Z",
  "miembros": [],
  "estado": {
    "de_turno": 0,
    "miembros": 0,
    "espera_estimada_s": null,
    "callbacks_pendientes": 0,
    "atendidas_hoy": 0,
    "abandonos_hoy": 0
  }
}

PUT /inquilinos/:inquilino/colas/:id 200

Requisição

{
  "nombre": "Ya editada"
}

Resposta

{
  "id": "<id>",
  "inquilino": "<cuenta>",
  "nombre": "Ya editada",
  "numero": null,
  "estrategia": "todos",
  "timbrado_s": 20,
  "espera_max_s": 600,
  "decir_posicion": 1,
  "decir_espera": 1,
  "anuncio_cada_s": 30,
  "musica": "default",
  "callback": 1,
  "callback_min_espera_s": 45,
  "agotada_tipo": "buzon",
  "agotada_id": "<id>",
  "vacia_tipo": null,
  "vacia_id": null,
  "creado": "2026-10-16T21:44:59.058Z",
  "actualizado": "2026-10-16T21:44:59.287Z",
  "miembros": [],
  "estado": {
    "de_turno": 0,
    "miembros": 0,
    "espera_estimada_s": null,
    "callbacks_pendientes": 0,
    "atendidas_hoy": 0,
    "abandonos_hoy": 0
  }
}

GET /inquilinos/:inquilino/colas 200

Resposta

[
  {
    "id": "<id>",
    "inquilino": "<cuenta>",
    "nombre": "Soporte",
    "numero": null,
    "estrategia": "todos",
    "timbrado_s": 20,
    "espera_max_s": 600,
    "decir_posicion": 1,
    "decir_espera": 1,
    "anuncio_cada_s": 30,
    "musica": "default",
    "callback": 1,
    "callback_min_espera_s": 45,
    "agotada_tipo": "buzon",
    "agotada_id": "<id>",
    "vacia_tipo": null,
    "vacia_id": null,
    "creado": "2026-10-16T21:44:57.230Z",
    "actualizado": "2026-10-16T21:44:57.230Z",
    "version": "\"v1-73d179cfb86c534a9bfccc\""
  }
]

POST /inquilinos/:inquilino/colas 201

Requisição

{
  "nombre": "Soporte",
  "estrategia": "todos"
}

Resposta

{
  "id": "<id>",
  "inquilino": "<cuenta>",
  "nombre": "Soporte",
  "numero": null,
  "estrategia": "todos",
  "timbrado_s": 20,
  "espera_max_s": 600,
  "decir_posicion": 1,
  "decir_espera": 1,
  "anuncio_cada_s": 30,
  "musica": "default",
  "callback": 1,
  "callback_min_espera_s": 45,
  "agotada_tipo": "buzon",
  "agotada_id": "<id>",
  "vacia_tipo": null,
  "vacia_id": null,
  "creado": "2026-10-16T21:44:57.230Z",
  "actualizado": "2026-10-16T21:44:57.230Z",
  "miembros": [],
  "estado": {
    "de_turno": 0,
    "miembros": 0,
    "espera_estimada_s": null,
    "callbacks_pendientes": 0,
    "atendidas_hoy": 0,
    "abandonos_hoy": 0
  }
}

GET /inquilinos/:inquilino/conferencias/:id 200

Resposta

{
  "id": "<id>",
  "inquilino": "<cuenta>",
  "nombre": "Sala 1",
  "numero": null,
  "max_personas": 10,
  "esperar_organizador": 0,
  "anunciar_entradas": 1,
  "pedir_nombre": 1,
  "bloqueada": 0,
  "grabar": 0,
  "musica": "default",
  "activa": 1,
  "creado": "2026-10-16T21:44:57.733Z",
  "actualizado": "2026-10-16T21:44:57.733Z",
  "tiene_pin": false,
  "tiene_pin_organizador": false,
  "dentro": 0,
  "grabando": false
}

POST /inquilinos/:inquilino/conferencias 201

Requisição

{
  "nombre": "Sala 1",
  "clave": "<secreto>"
}

Resposta

{
  "id": "<id>",
  "inquilino": "<cuenta>",
  "nombre": "Sala 1",
  "numero": null,
  "max_personas": 10,
  "esperar_organizador": 0,
  "anunciar_entradas": 1,
  "pedir_nombre": 1,
  "bloqueada": 0,
  "grabar": 0,
  "musica": "default",
  "activa": 1,
  "creado": "2026-10-16T21:44:57.733Z",
  "actualizado": "2026-10-16T21:44:57.733Z",
  "tiene_pin": false,
  "tiene_pin_organizador": false
}

POST /inquilinos/:inquilino/eventos/ticket 201

Requisição

{}

Resposta

{
  "ticket": "<secreto>",
  "eventos": [
    "wss://<puerta>:<puerto>/eventos",
    "wss://<puerta>:<puerto>/eventos",
    "wss://<puerta>:<puerto>/eventos"
  ],
  "inquilino": "<cuenta>"
}

POST /inquilinos/:inquilino/extensiones/:id/credencial-dispositivo 201

Requisição

{
  "instalacion": "ejercicio-api-ventana-tranquila"
}

Resposta

{
  "id": "<id>",
  "clave": "<secreto>",
  "caduca": "2026-10-16T22:00:02.449Z",
  "segundos": 900,
  "ambito": "dispositivo",
  "vinculo": {
    "inquilino": "<cuenta>",
    "extension": "<id>",
    "dispositivo": "<id>"
  },
  "extension": {
    "id": "<id>",
    "numero": "100",
    "nombre": "Ejercicio API"
  },
  "dispositivo_nuevo": true,
  "minutos_max": 60,
  "resumen": "credencial de UN aparato de UNA extensión, que caduca; para la app móvil"
}

GET /inquilinos/:inquilino/extensiones/siguiente-libre 200

Resposta

{
  "numero": "100"
}

GET /inquilinos/:inquilino/extensiones 200

Resposta

[
  {
    "id": "<id>",
    "inquilino": "<cuenta>",
    "numero": "100",
    "nombre": "Ejercicio API",
    "correo": null,
    "cid_saliente": null,
    "timbrado_s": 25,
    "estado": "activa",
    "creado": "2026-10-16T21:45:00.167Z",
    "actualizado": "2026-10-16T21:45:00.167Z",
    "nombre_audio": null,
    "en_directorio": 1,
    "departamento": null,
    "version": "\"v1-a1a25e330e8bc32c8289ab\""
  }
]

POST /inquilinos/:inquilino/extensiones 201

Requisição

{
  "nombre": "Ejercicio API",
  "numero": "100"
}

Resposta

{
  "id": "<id>",
  "inquilino": "<cuenta>",
  "numero": "100",
  "nombre": "Ejercicio API",
  "correo": null,
  "cid_saliente": null,
  "timbrado_s": 25,
  "estado": "activa",
  "creado": "2026-10-16T21:45:00.167Z",
  "actualizado": "2026-10-16T21:45:00.167Z",
  "nombre_audio": null,
  "en_directorio": 1,
  "departamento": null,
  "reglas": {
    "extension_id": "<id>",
    "dnd": 0,
    "dnd_hasta": null,
    "sigueme": 0,
    "sigueme_numeros": [],
    "sigueme_modo": "tras",
    "sigueme_confirmar": 1,
    "sigueme_s": 20,
    "desvio_siempre": null,
    "desvio_ocupado": null,
    "desvio_nocontesta": null,
    "fallo_tipo": "buzon",
    "fallo_id": "<id>",
    "actualizado": "2026-10-16T21:45:00.168Z",
    "desvio_confirmar": 1,
    "screening": 0,
    "clase_servicio": "todo",
    "supervisar": 0,
    "transferencia_retorno": 0
  },
  "dispositivos": [
    {
      "id": "<id>",
      "etiqueta": "principal",
      "usuario_sip": "tf3zfmm96cfq100",
      "transporte": "udp",
      "estado": "activo",
      "ultimo_registro": null,
      "ultima_ip": null,
      "creado": "2026-10-16T21:45:00.168Z",
      "rotado": null,
      "instalacion": null
    }
  ],
  "buzon": {
    "id": "<id>",
    "inquilino": "<cuenta>",
    "extension_id": "<id>",
    "nombre": "Buzón de Ejercicio API",
    "saludo_texto": "Ha llamado a Ejercicio API. Deje su mensaje después del tono.",
    "saludo_audio": null,
    "correo": null,
    "enviar_correo": 1,
    "adjuntar": 1,
    "transcribir": 1,
    "max_s": 120,
    "creado": "2026-10-16T21:45:00.168Z",
    "actualizado": "2026-10-16T21:45:00.168Z",
    "max_mensajes": 50,
    "aviso_activo": 0,
    "aviso_numero": null,
    "revisar": 0,
    "ofrecer_operadora": 1,
    "guion": null,
    "aviso_numeros": null,
    "aviso_modo": "tras",
    "reintentar": 0,
    "reintentos_max": 2,
    "compartido": 0,
    "extensiones_acceso": null,
    "abrir_caso": 1,
    "tiene_pin": false
  },
  "credencial": {
    "id": "<id>",
    "usuario_sip": "tf3zfmm96cfq100",
    "clave": "<secreto>",
    "realm": "pbx.forhosting.com",
    "transporte": "udp"
  }
}

POST /inquilinos/:inquilino/historial/:id/revertir 201

Requisição

{}

Resposta

{
  "revertido": "<id>",
  "tabla": "colas",
  "fila_id": "<id>",
  "columnas": [
    "nombre"
  ],
  "fila": {
    "id": "<id>",
    "inquilino": "<cuenta>",
    "nombre": "Para editar",
    "numero": null,
    "estrategia": "todos",
    "timbrado_s": 20,
    "espera_max_s": 600,
    "decir_posicion": 1,
    "decir_espera": 1,
    "anuncio_cada_s": 30,
    "musica": "default",
    "callback": 1,
    "callback_min_espera_s": 45,
    "agotada_tipo": "buzon",
    "agotada_id": "<id>",
    "vacia_tipo": null,
    "vacia_id": null,
    "creado": "2026-10-16T21:44:59.058Z",
    "actualizado": "2026-10-16T21:44:59.671Z"
  }
}

GET /inquilinos/:inquilino/historial/:id 200

Resposta

{
  "id": "<id>",
  "inquilino": "<cuenta>",
  "tabla": "colas",
  "fila_id": "<id>",
  "columna_clave": "id",
  "antes": {
    "id": "<id>",
    "inquilino": "<cuenta>",
    "nombre": "Para editar",
    "numero": null,
    "estrategia": "todos",
    "timbrado_s": 20,
    "espera_max_s": 600,
    "decir_posicion": 1,
    "decir_espera": 1,
    "anuncio_cada_s": 30,
    "musica": "default",
    "callback": 1,
    "callback_min_espera_s": 45,
    "agotada_tipo": "buzon",
    "agotada_id": "<id>",
    "vacia_tipo": null,
    "vacia_id": null,
    "creado": "2026-10-16T21:44:59.058Z",
    "actualizado": "2026-10-16T21:44:59.058Z"
  },
  "despues": {
    "id": "<id>",
    "inquilino": "<cuenta>",
    "nombre": "Ya editada",
    "numero": null,
    "estrategia": "todos",
    "timbrado_s": 20,
    "espera_max_s": 600,
    "decir_posicion": 1,
    "decir_espera": 1,
    "anuncio_cada_s": 30,
    "musica": "default",
    "callback": 1,
    "callback_min_espera_s": 45,
    "agotada_tipo": "buzon",
    "agotada_id": "<id>",
    "vacia_tipo": null,
    "vacia_id": null,
    "creado": "2026-10-16T21:44:59.058Z",
    "actualizado": "2026-10-16T21:44:59.287Z"
  },
  "actor": "apikey:<id> primera clave de sistema (sistema)",
  "origen": "api",
  "revertido_de": null,
  "creado": "2026-10-16T21:44:59.287Z",
  "cambios": {
    "nombre": {
      "antes": "Para editar",
      "despues": "Ya editada"
    }
  }
}

GET /inquilinos/:inquilino/historial 200

Resposta

{
  "inquilino": "<cuenta>",
  "cambios": [
    {
      "id": "<id>",
      "tabla": "colas",
      "fila_id": "<id>",
      "actor": "apikey:<id> primera clave de sistema (sistema)",
      "origen": "api",
      "revertido_de": null,
      "creado": "2026-10-16T21:44:59.287Z",
      "cambios": {
        "nombre": {
          "antes": "Para editar",
          "despues": "Ya editada"
        }
      }
    }
  ]
}

GET /inquilinos/:inquilino/llamadas-en-curso 200

Resposta

{
  "activas": []
}

POST /inquilinos/:inquilino/mantenimientos/:id/cerrar 201

Requisição

{}

Resposta

{
  "id": "<id>",
  "inquilino": "<cuenta>",
  "motivo": "ensayo",
  "desde": "2026-10-16T21:44:58.365Z",
  "hasta": "2026-10-16T21:44:58.588Z",
  "avisar": 1,
  "activo": 0,
  "creado": "2026-10-16T21:44:58.365Z"
}

GET /inquilinos/:inquilino/mantenimientos 200

Resposta

[
  {
    "id": "<id>",
    "inquilino": "<cuenta>",
    "motivo": "ensayo",
    "desde": "2026-10-16T21:44:58.365Z",
    "hasta": null,
    "avisar": 1,
    "activo": 1,
    "creado": "2026-10-16T21:44:58.365Z"
  }
]

POST /inquilinos/:inquilino/mantenimientos 201

Requisição

{
  "motivo": "ensayo",
  "minutos": 5
}

Resposta

{
  "id": "<id>",
  "inquilino": "<cuenta>",
  "motivo": "ensayo",
  "desde": "2026-10-16T21:44:58.365Z",
  "hasta": null,
  "avisar": 1,
  "activo": 1,
  "creado": "2026-10-16T21:44:58.365Z"
}

GET /inquilinos/:inquilino/numeros 200

Resposta

[]

PUT /inquilinos/:inquilino/operadora 200

Requisição

{
  "destino": "buzon"
}

Resposta

{
  "operadora": null
}

DELETE /inquilinos/:inquilino 200

Resposta

{
  "borrado": "<cuenta>"
}

POST /inquilinos 201

Requisição

{
  "nombre": "Ejercicio API 2026-10-16T21:44:54"
}

Resposta

{
  "id": "<cuenta>",
  "nombre": "Ejercicio API 2026-10-16T21:44:54",
  "cuenta_portal": null,
  "cedula": null,
  "correo": null,
  "telefono": null,
  "plan": "zero",
  "zona": "America/Costa_Rica",
  "idioma": "es",
  "estado": "activo",
  "canales_max": 4,
  "notas": null,
  "creado": "2026-10-16T21:44:56.852Z",
  "actualizado": "2026-10-16T21:44:56.852Z",
  "canales_garantizados": 2,
  "modo_presion": "firme",
  "presion_canales": 1,
  "duracion_max_s": null,
  "operadora_tipo": null,
  "operadora_id": null,
  "filtro_anonimas": 0,
  "cdr_retencion_dias": null,
  "codigo_asunto_digitos": 0,
  "supervision_activa": 0,
  "canales_troncal": null,
  "limites": {
    "canales": 2,
    "canales_max": 4,
    "extensiones": 3,
    "retencion": 30,
    "tope_diario": 3,
    "tope_mensual": 25
  },
  "canales": {
    "existe": true,
    "garantizados": 2,
    "max": 4,
    "modo": "firme",
    "presion_canales": 1,
    "por_troncal": null
  }
}

Sessões: o navegador nunca guarda uma chave permanente

Uma credencial curta, com teto de 60 minutos, que não consegue fabricar uma permanente. Este é o contrato se você é quem constrói o botão.

  • Só o portal pode emitir uma. Emitir uma sessão exige uma chave de ativação, porque só o portal pode afirmar que atrás da requisição há um cliente com a sessão iniciada. O VOICE não sabe de senhas de cliente e não tem por que saber.
  • Ela nunca nasce sem prazo. Se ninguém pede uma duração, uma é aplicada. Um escopo que existe para expirar e que pudesse nascer eterno é pior do que não ter, porque as pessoas confiam nele.
  • Pedir mais tempo não adianta. Há um teto duro. Quem chama pedir oito horas não torna a credencial segura.
  • Ela não consegue se promover. A gestão de chaves vive inteira atrás do escopo de ativação, então uma sessão não consegue fabricar uma chave permanente. Isso é imposto no roteador, antes de qualquer manipulador.
  • Dá para encerrar antes da hora. O identificador volta na hora de emitir, justamente para que você possa revogá-la antes do prazo.

Avisos ao seu sistema (webhooks)pela API

Os seus sistemas ficam sabendo do que aconteceu em vez de perguntar a cada poucos segundos. 31 eventos, assinados, com reenvio, e nenhum cai em silêncio.

x-pbx-evento: llamada.entrante
x-pbx-marca:  1755300000
x-pbx-firma:  <hex>

{ "evento": "llamada.entrante", "inquilino": "…", "cuando": "…", "datos": { … } }

Cada entrega vai assinada: a assinatura cobre a marca de tempo e o corpo exato que você recebeu, então confira contra os bytes crus e não contra uma cópia serializada de novo. O segredo é mostrado uma única vez ao criar a assinatura, e pode ser girado sem parar as entregas.

Uma entrega que falha é reenviada depois de 10 · 30 · 60 · 300 · 900 · 3600 segundos, e cada tentativa tem 10 segundos. Uma assinatura que continua falhando é pausada depois de 20 falhas seguidas, em vez de ser descartada em silêncio — e você consegue ver todas as tentativas.

Os eventos

EventoQuando dispara
llamada.entranteEstá entrando uma ligação, com o número, a rota e para onde vai.
llamada.contestadaAlguém atendeu.
llamada.terminadaTerminou, com a duração e como acabou.
llamada.perdidaTocou e ninguém atendeu.
buzon.mensajeAlguém deixou um recado, com a transcrição.
grabacion.listaUma gravação terminou de processar e pode ser baixada.
grabacion.analizadaA transcrição, os falantes e o resumo dela estão prontos.
saldo.bajoO saldo está acabando.
tope.alcanzadoUm teto de gasto foi alcançado e as ligações pararam.
registro.anomaloUm registro de aparelho está com cara errada — várias credenciais do mesmo lugar, por exemplo.
canales.al_limiteVocê está perto do topo das suas linhas simultâneas.
cita.confirmadaAlguém confirmou a consulta pelo teclado.
cita.reagendarAlguém pediu outra data. É um pedido para uma pessoa, não algo que a central vá resolver sozinha.
cita.canceladaAlguém cancelou a consulta.
desvio.activadoUm desvio foi ativado.
desvio.recordatorioUm desvio continua ativado. O desvio esquecido é o defeito fantasma mais comum de uma central.
buzon.llenoUma caixa postal está cheia — daqui em diante recados se perderiam.
buzon.casi_llenoUma caixa postal está quase cheia, enquanto ainda dá tempo de fazer algo.
cola.vaciaNão há ninguém de turno numa fila.
cola.callbackAlguém pediu para ser chamado de volta em vez de esperar.
conferencia.entraAlguém entrou numa sala.
conferencia.saleAlguém saiu de uma sala.
canales.desalojoUma linha emprestada foi devolvida para proteger a garantia de alguém.
emergencia.marcadaAlguém discou o número de emergência de um ramal. A ligação nunca é atrasada por isso.
fax.entranteFoi detectado tom de fax numa ligação de entrada.
supervision.iniciadaAlguém escutou, sussurrou ou entrou numa ligação. É o que separa uma ferramenta de supervisão de uma escuta clandestina: poder responder «quem ouviu esta ligação, e quando».
fraude.sospechaUm padrão de comportamento com cara de fraude. Avisa; não corta.
filtro.insistenciaUm número está ligando vezes demais.
red.solicitud.nuevaOutra linha da rede pediu permissão para lhe ligar de graça.
red.solicitud.respondidaA sua conta aprovou ou rejeitou um pedido de permissão.
red.permiso.revocadoA sua conta retirou a um número a permissão de lhe ligar de graça.

O canal ao vivoligação real

Os avisos viajam em lotes e chegam em segundos. Tem coisa que precisa estar na tela agora: uma luz que diz que um colega está em ligação não pode chegar quinze segundos atrasada.

  • O que ele carrega. As ligações conforme acontecem, os recados novos e o estado da luz de cada ramal — que é o que faz um painel de luzes numa tela estar vivo de verdade.
  • Ele é de só leitura.pela API Dá para abrir um passe para o canal sem entregar um telefone: olhar o que acontece não deveria exigir uma credencial que também consegue mudar coisas.
  • Ele não substitui os avisos. O canal ao vivo é para uma tela que alguém está olhando. Se importa que o seu sistema fique sabendo, use um aviso: ele reenvia, e não depende de um socket aberto.

Referência

Como se leem os selos

Cada função desta página traz um selo dizendo como foi verificada. Publicamos também as que ainda não foram exercitadas, marcadas como tais, porque você descobrir sozinho é pior.

SeloO que fazQuantas
ligação realAlguém fez uma ligação de verdade e ela fez o que está escrito aqui.14
ligação de testeUma ligação real contra a central viva, com teclas digitadas de verdade — mas sem voz e sem ninguém ouvindo. Tudo o que depende de quem liga falar continua sem ser exercitado.3
aparelho realProvado com um aparelho real se registrando.1
pela APIExercitado pela API pública.47
bancada de testesExercitado na bancada de testes, contra uma cópia descartável do banco.13
ainda sem exercitarO código está lá e carrega, mas ninguém o rodou ainda.36

114 funções, contadas da própria central em 2026-09-19.

O selo é de uma função, não de uma linha solta: onde uma função cobre vários códigos, todos mostram o nível do grupo. Isso significa que um selo pode ficar CURTO em relação ao que de fato foi testado — nunca comprido, que é a única direção na qual estamos dispostos a errar numa página que você lê como uma promessa.

Glossário

As palavras que uma central telefônica usa e mais nada usa.

TermoO que faz
RamalUma pessoa ou um posto dentro da sua empresa, com um número curto que os outros discam. Não é um telefone: um ramal pode ter vários aparelhos.
Número (DID)O que a gente de fora disca para chegar até você. Um número aponta para algo — um ramal, um grupo, um menu — e isso quem decide é você.
Grupo de toqueVários ramais tocando pela mesma ligação. É simples, e não faz ideia de quem está esperando nem desde quando.
FilaUm grupo que ainda guarda a fila. Sabe a posição, a espera medida e quem está de turno, e pode oferecer um retorno de ligação.
Menu de voz (URA)«Digite 1 para vendas». Um menu pode ter menus dentro, e quem liga sempre pode voltar atrás ou chegar a uma pessoa.
Linha simultânea (canal)Uma conversa em curso. Dez canais são dez ligações ao mesmo tempo, tenha você os telefones que tiver.
Registro de ligação (CDR)Uma linha por ligação: quem, quando, quanto durou, por qual caminho e como acabou. É do que se constrói uma fatura.
Luz de ocupadoO indicador que diz se um colega está livre, tocando ou falando, sem precisar ligar para ele para descobrir.
Tons do teclado (DTMF)Os bipes que um telefone faz quando você aperta uma tecla. É assim que um menu, uma caixa postal e todos os códigos desta página ouvem você.
Siga-meO seu ramal toca também no seu celular, ou no lugar dele. É a função mais usada de qualquer central pequena.
EstacionarDeixar uma ligação esperando numa vaga numerada para que qualquer um, de qualquer telefone, pegue digitando essa vaga.
Transferência assistidaFalar com o colega antes de passar a ligação, com a possibilidade de pegar de volta.

Voltar ao VOICE