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. 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.
ambito_insuficienteSua chave não alcança essa rota. O provisionamento é do portal, não seu.
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.
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_sin_respuestaA central não respondeu a tempo. Mesmo tratamento do anterior, e a mesma precaução: a gravação pode ter chegado ou não.
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.
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.
falta_credencialVocê não enviou nenhuma chave.
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.
no_editableEsse dado é alterado pelo seu provedor, não daqui.
no_existeNão há nada sobre o que agir.
protocolo_incorrectoEssa rota só fala WebSocket e você a pediu por HTTP comum.
solo_lecturaSua chave é somente leitura e isto gravaria.
ya_existeJá existe algo com esse nome ou número. Tente com outro, não com a mesma carga.
CódigoQuantasMensagem
400163
  • 'extension_id' y 'numero' son excluyentes
  • 'hasta' tiene que ser posterior a 'desde' (o al momento de abrirlo)
  • 'numero' no parece un número
  • 'segmentos' lleva caracteres que no acepto
  • 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
  • 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: …
  • 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
  • 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 aviso de buzón admite hasta 5 teléfonos
  • el bloque debe tener números de la misma longitud
  • 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 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 á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.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 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 turno lo usan: …
  • estado: 'activo' o 'suspendido'
  • estado: …
  • estos campos los cambia su proveedor: …
  • estrategia: rotativo|todos|menos_usada|orden
  • 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 'motivo'
  • falta 'nombre'
  • falta 'numero'
  • 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 nuevo (destino)
  • falta extension_id
  • falta inquilino, extensión o quién lo pide
  • 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
  • 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 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 originar la prueba: …
  • no se puede esperar a uno mismo
  • no sé marcar '…'
  • 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: …
  • plantilla: …
  • 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: …
  • tipo: …
  • transporte: …
  • un IVR sin saludo deja al llamante en silencio: pon saludo_texto o saludo_audio
  • una troncal sin host no puede activarse
  • url debe empezar por http:// o https://
  • url inválida
  • «…» 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 '…'
  • …: de 4 a 8 dígitos
  • …: demasiado fácil de adivinar
  • …: falta 'respaldo.dest_tipo'. Un paso sin respaldo cuelga al que llama
  • …: número inválido
  • …: respaldo.dest_tipo debe ser uno de …
4011
  • falta la clave de API
40311
  • 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 no es de esta cuenta
  • esta clave es de solo lectura
  • esta clave no está atada a ninguna cuenta
  • esta operación necesita una clave de sistema
  • esta operación no está abierta a la credencial de un aparato
40443
  • agente: no está en esta cola
  • agente: no existe en esta cuenta
  • buzón: no existe en esta cuenta
  • dispositivo
  • 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 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 pista no existe en este disco
  • ese disco no existe en esta cuenta
  • ese dispositivo no existe en esta cuenta
  • ese guion no existe
  • ese mensaje aún no está archivado
  • extensión
  • feriado
  • 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 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
  • …: no existe
  • …: no existe en esta cuenta
40925
  • 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 ruta: edítala en vez de crear otra
  • esa provisión ya se usó
  • ese mensaje no está en la papelera
  • ese número ya está en el inventario
  • esto ya no es lo que dejó ese cambio: … se tocó después.
  • 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
  • ya existe
  • ya existe otro con ese valor

243 mensagens distintas em 289 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 postais13GET /buzones POST /buzones DELETE /buzones/:buz
Ramais13GET /extensiones POST /extensiones DELETE /extensiones/:ext
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
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
Feriados3GET /feriados POST /feriados DELETE /feriados/:fer
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
Outras1GET /guiones/claves
Ligações estacionadas1GET /aparcadas
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
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
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

269 endpoints no total, lidos da própria central em 2026-09-04.

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)pela 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/:buzligação real
GET /buzones/:buzligação real
PATCH /buzones/:buzSaludo, correo, transcripción, duración máximapela API
GET /buzones/:buz/mensajespela 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 motivobancada de testes
POST /buzones/:buzon/saludosPoner el saludo de un motivo (normal, ocupado, vacaciones…)bancada de testes
DELETE /buzones/:buzon/saludos/:saludobancada de testes
GET /canalespela API
GET /canales/episodiospela API
PUT /canales/modopela 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/:colapela API
GET /colas/:colapela APIver
PUT /colas/:colapela 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 credencialaparelho 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-cuentapela 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 API
POST /extensionesAlta de extensión (crea buzón y credencial)pela API
DELETE /extensiones/:extpela API
GET /extensiones/:extpela API
PATCH /extensiones/:extpela 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 fallopela 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 API
GET /feriadospela API
POST /feriadosFeriado propio o excepción a uno nacionalpela API
DELETE /feriados/:ferpela 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 /grabacionesbancada 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/:grppela API
GET /grupos/:grppela API
PUT /grupos/:grppela 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/:horpela API
GET /horarios/:horpela API
PUT /horarios/:horpela API
GET /horarios/:hor/estado¿Abierto ahora? Y por quépela API
POST /horarios/:hor/manualForzar abierto o cerrado, con vuelta automáticapela API
GET /ivrsligação real
POST /ivrsCrear un menú (detecta bucles al guardar)ligação real
DELETE /ivrs/:ivrligação real
GET /ivrs/:ivrligação real
PUT /ivrs/:ivrligaçã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 /llamadasligaçã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 cuentapela API
DELETE /mensajes/:msgpela API
GET /mensajes/:msgpela API
GET /mensajes/:msg/audiopela API
POST /mensajes/:msg/leidopela API
GET /numerospela API
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
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 /rutasligação real
POST /rutasQué hace una llamada que entra por un númeroligação real
DELETE /rutas/:rutaligação real
GET /rutas/:rutaligação real
PATCH /rutas/:rutaligação real
GET /saldobancada de testes
GET /sin-devolverLas perdidas que nadie ha devuelto, agrupadas por número (#67)
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 como teléfono de una extensiónpela 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.

20 de 204 rotas têm exemplo gravado, da execução de 2026-09-04. 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-09-04T21:11:53.507Z",
  "avisar_el": "2026-09-03T21:11:53.507Z",
  "guion": null,
  "estado": "cancelada",
  "intentos": 0,
  "ultimo_intento": null,
  "respondido_el": null,
  "nota": null,
  "creado": "2026-09-04T20:11:54.131Z",
  "actualizado": "2026-09-04T20:11:54.445Z"
}

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

Resposta

{
  "id": "<id>",
  "inquilino": "<cuenta>",
  "numero": "50688889999",
  "nombre": null,
  "cuando": "2026-09-04T21:11:53.507Z",
  "avisar_el": "2026-09-03T21:11:53.507Z",
  "guion": null,
  "estado": "pendiente",
  "intentos": 0,
  "ultimo_intento": null,
  "respondido_el": null,
  "nota": null,
  "creado": "2026-09-04T20:11:54.131Z",
  "actualizado": "2026-09-04T20:11:54.131Z"
}

POST /inquilinos/:inquilino/citas 201

Requisição

{
  "numero": "50688889999",
  "cuando": "2026-09-04T21:11:53.507Z",
  "texto": "ensayo"
}

Resposta

{
  "id": "<id>",
  "inquilino": "<cuenta>",
  "numero": "50688889999",
  "nombre": null,
  "cuando": "2026-09-04T21:11:53.507Z",
  "avisar_el": "2026-09-03T21:11:53.507Z",
  "guion": null,
  "estado": "pendiente",
  "intentos": 0,
  "ultimo_intento": null,
  "respondido_el": null,
  "nota": null,
  "creado": "2026-09-04T20:11:54.131Z",
  "actualizado": "2026-09-04T20:11:54.131Z"
}

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": null,
  "vacia_tipo": null,
  "vacia_id": null,
  "creado": "2026-09-04T20:11:52.214Z",
  "actualizado": "2026-09-04T20:11:52.214Z",
  "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": null,
  "vacia_tipo": null,
  "vacia_id": null,
  "creado": "2026-09-04T20:11:54.606Z",
  "actualizado": "2026-09-04T20:11:54.771Z",
  "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": null,
    "vacia_tipo": null,
    "vacia_id": null,
    "creado": "2026-09-04T20:11:52.214Z",
    "actualizado": "2026-09-04T20:11:52.214Z"
  }
]

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": null,
  "vacia_tipo": null,
  "vacia_id": null,
  "creado": "2026-09-04T20:11:52.214Z",
  "actualizado": "2026-09-04T20:11:52.214Z",
  "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-09-04T20:11:52.847Z",
  "actualizado": "2026-09-04T20:11:52.847Z",
  "tiene_pin": false,
  "tiene_pin_organizador": false,
  "dentro": 0,
  "grabando": false
}

POST /inquilinos/:inquilino/conferencias 201

Requisição

{
  "nombre": "Sala 1",
  "clave": "4321"
}

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-09-04T20:11:52.847Z",
  "actualizado": "2026-09-04T20:11:52.847Z",
  "tiene_pin": false,
  "tiene_pin_organizador": false
}

POST /inquilinos/:inquilino/eventos/ticket 201

Requisição

{}

Resposta

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

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": null,
    "vacia_tipo": null,
    "vacia_id": null,
    "creado": "2026-09-04T20:11:54.606Z",
    "actualizado": "2026-09-04T20:11:55.256Z"
  }
}

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": null,
    "vacia_tipo": null,
    "vacia_id": null,
    "creado": "2026-09-04T20:11:54.606Z",
    "actualizado": "2026-09-04T20:11:54.606Z"
  },
  "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": null,
    "vacia_tipo": null,
    "vacia_id": null,
    "creado": "2026-09-04T20:11:54.606Z",
    "actualizado": "2026-09-04T20:11:54.771Z"
  },
  "actor": "apikey:<id> primera clave de sistema (sistema)",
  "origen": "api",
  "revertido_de": null,
  "creado": "2026-09-04T20:11:54.777Z",
  "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-09-04T20:11:54.777Z",
      "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-09-04T20:11:53.637Z",
  "hasta": "2026-09-04T20:11:53.969Z",
  "avisar": 1,
  "activo": 0,
  "creado": "2026-09-04T20:11:53.637Z"
}

GET /inquilinos/:inquilino/mantenimientos 200

Resposta

[
  {
    "id": "<id>",
    "inquilino": "<cuenta>",
    "motivo": "ensayo",
    "desde": "2026-09-04T20:11:53.637Z",
    "hasta": null,
    "avisar": 1,
    "activo": 1,
    "creado": "2026-09-04T20:11:53.637Z"
  }
]

POST /inquilinos/:inquilino/mantenimientos 201

Requisição

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

Resposta

{
  "id": "<id>",
  "inquilino": "<cuenta>",
  "motivo": "ensayo",
  "desde": "2026-09-04T20:11:53.637Z",
  "hasta": null,
  "avisar": 1,
  "activo": 1,
  "creado": "2026-09-04T20:11:53.637Z"
}

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-09-04T20:11:51"
}

Resposta

{
  "id": "<cuenta>",
  "nombre": "Ejercicio API 2026-09-04T20:11:51",
  "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-09-04T20:11:51.932Z",
  "actualizado": "2026-09-04T20:11:51.932Z",
  "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,
  "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
  }
}

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

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

112 funções, contadas da própria central em 2026-08-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