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
*43e 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.
| Passo | O que faz |
|---|---|
| 1 | Você entra na sua área do cliente, em elportaldelcliente.com. |
| 2 | Escolhe «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. |
| 3 | O 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.
| Aba | O que faz |
|---|---|
| Resumo | Como 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úmeros | Os seus números, e o que cada um faz quando toca. |
| Menus | Menus de voz: digite 1 para vendas, e dentro de vendas outro menu. |
| Ramais | Pessoas e aparelhos, com regras por pessoa: siga-me, desvios, não perturbe, o que cada um pode discar e o porteiro. |
| Telefone | O telefone em si: discar, atender, transferir, estacionar e ver quem está em ligação. |
| Filas | Filas com posição, espera medida, retorno de ligação, quem está de turno e quem atende o quê. |
| Salas | Salas de conferência com senha, e quem está dentro neste momento. |
| Caixa postal | Recados com transcrição, saudações, senha, lixeira e limite de tamanho. |
| Diretório | A lista de nomes que quem liga alcança soletrando no teclado. |
| Recepção | A telefonista, as ligações estacionadas em tempo real, as janelas de manutenção e a tabela de códigos. |
| Filtros | Lista negra, filtro de anônimos, avisos de quem insiste demais e tudo sobre quem pode chegar até você. |
| Horários | Horário comercial, feriados e a chave de dia e noite. |
| Música | Música de espera e as faixas que cada fluxo toca. |
| Chamadas | Cada ligação com número, duração, caminho e gravação. |
| Linhas | Linhas simultâneas: o que você tem garantido, o que está pegando emprestado e o seu pico. |
| Consumo | O 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ódigo | O que faz | Verificado |
|---|---|---|
*43 | Teste de eco. Grava o que você fala e devolve, e sabe dizer «não chegou nada». | ainda sem exercitar |
*44 | O mesmo, com atraso: entrega as palavras que estão se perdendo. | ainda sem exercitar |
*45 | Teste de teclado. Fala cada tecla conforme você digita. | ainda sem exercitar |
*46 | O estado da sua linha: registro, codec, endereço e latência. | ainda sem exercitar |
*60 | A hora e a data, ditas direito. | bancada de testes |
*62 | O seu consumo do mês (ligações e minutos; o valor, só com a cobrança ativa). | pela API |
*69 | Quem ligou para você por último, dito em voz alta e contando as perdidas — depois digite 1 para retornar. | ainda sem exercitar |
*72 | Desvio incondicional. Repete o número de volta para você. | pela API |
*73 | Cancela todos os desvios. | pela API |
*74 | Desvio em paralelo: o seu ramal e o número tocam ao mesmo tempo. | pela API |
*75 | Desvio quando você está ocupado. | pela API |
*76 | Desvio quando você não atende. | pela API |
*78 | Não perturbe ligado, com confirmação falada. | pela API |
*79 | Não perturbe desligado. | pela API |
*80 | Entra de turno em todas as suas filas. | pela API |
*81 | Sai de turno em todas as suas filas. | pela API |
*90 | Bloqueia um número (só # bloqueia o da última ligação recebida). | ainda sem exercitar |
*91 | Desbloqueia. | ainda sem exercitar |
*97 | A sua caixa postal, com a sua senha. | bancada de testes |
*98 | Grava a sua saudação. | bancada de testes |
*99 | Grava o seu nome — usado pela lista de nomes e pela sala de conferência. | bancada de testes |
*8 | Captura a ligação que está tocando na mesa ao lado. | pela API |
*66 | Modo: normal · almoço · fechado · feriado · automático. | pela API |
*411 | A lista de nomes. | bancada de testes |
*57 | Abre 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 |
*85 | Me avise quando aquele ramal ficar livre. | ainda sem exercitar |
*86 | Cancela esse aviso. | ainda sem exercitar |
*82 | Escuta uma ligação da sua própria empresa. Nenhuma das duas partes ouve você. | ainda sem exercitar |
*83 | Sussurro: só o seu colega ouve você, o cliente não. | ainda sem exercitar |
*84 | Entra na ligação: os dois lados ouvem você. | ainda sem exercitar |
*88 | As ligações que ninguém retornou, ditas em voz alta — depois digite 1 para retornar a mais antiga. | ainda sem exercitar |
*47 | A central se explica sozinha: recita os próprios códigos, 9 para o seguinte, 0 para sair. | ainda sem exercitar |
70N | Pega a ligação estacionada na vaga N. | pela API |
Digitados durante uma conversa
| Código | O que faz | Verificado |
|---|---|---|
*1 | Grava esta ligação, agora. As duas partes são avisadas. | pela API |
*7 | Estaciona: 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ódigo | O que faz | Verificado |
|---|---|---|
*1 | Completa a transferência. | ainda sem exercitar |
*0 | Cancela e volta para quem ligou. | ainda sem exercitar |
*3 | Põe os três na mesma ligação. | ainda sem exercitar |
Dentro de uma sala de conferência
| Código | O que faz | Verificado |
|---|---|---|
*6 | Qualquer um: silencia e abre o próprio microfone. | pela API |
*7 | Qualquer um: quantas pessoas estão na sala. | pela API |
*9 | Qualquer um: sair. | pela API |
*1 | Organizador: fecha a sala sem trocar a senha. | pela API |
*2 | Organizador: abre de novo. | pela API |
*3 | Organizador: 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
| Tecla | O que faz |
|---|---|
1 | Recados novos. |
2 | Recados guardados. |
4 | Saudações e o seu nome gravado. |
5 | Trocar a sua senha. |
0 | Sair para a telefonista. |
9 | Desligar. |
Enquanto um recado toca
| Tecla | O que faz |
|---|---|
1 | Repetir. |
2 | Guardar. |
3 | Apagar. Depois digite 8 em cinco segundos para desfazer. |
4 | Ligar de volta para essa pessoa. |
6 | O próximo, deixando este como novo. |
7 | Encaminhar para um colega com uma nota sua gravada na frente. |
Menu de saudações
| Tecla | O que faz |
|---|---|
1 | Gravar a saudação principal. |
2 | Gravar o seu nome. |
3 | Colocar uma saudação de férias. |
4 | Tirar. |
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.
| Plano | Simultâneas, até | Delas, garantidas | Ramais | Retenção (dias) | Por ano |
|---|---|---|---|---|---|
| VOICE I | 3 | 1 | 3 | 3 | US$ 100 |
| VOICE II | 4 | 2 | 4 | 4 | US$ 150 |
| VOICE III | 6 | 3 | 6 | 6 | US$ 200 |
| VOICE IV | 8 | 4 | 8 | 8 | US$ 250 |
| VOICE V | 10 | 5 | Sem limite | 28 | US$ 300 |
Minutos
| Destino | Por minuto |
|---|---|
| Ligações recebidas | US$ 0,00 |
| Costa Rica · fixo | US$ 0,03 |
| Costa Rica · celular | US$ 0,08 |
| América Central | US$ 0,45 |
| Caribe | US$ 0,55 |
| Resto do mundo | US$ 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 faz | Por quê |
|---|---|
| A caixa postal para o e-mail | O á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 minuto | A 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 aparelhos | Para 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 entrada | Detectar 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
| Escopo | O que faz |
|---|---|
sistema | Ativação, acima das contas. Uma destas não vai ser entregue a você. |
inquilino | A sua conta, leitura e escrita. É a chave com a qual se integra. |
lectura | A sua conta, só GET. Para painéis que não devem poder mudar nada. |
sesion | O 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. |
dispositivo | Um ú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ódigo | O que faz |
|---|---|
400 | A requisição está malformada, ou um valor não é dos que aceitamos. A mensagem diz qual. |
401 | Sem chave, com uma chave desconhecida, ou com uma sessão que já expirou. |
403 | A 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. |
404 | Isso não existe na sua conta. |
405 | Essa rota existe, esse método não. Se distingue do 404 de propósito: economiza uma hora. |
503 · 504 | Nã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ódigo | HTTP | Quando você recebe |
|---|---|---|
mala_peticion | 400 | A requisição está malformada, ou um valor não é dos que aceitamos. A mensagem diz qual. |
no_autorizado | 401 | Sem chave, com uma desconhecida, ou com uma sessão vencida. |
prohibido | 403 | A chave é boa, mas não pode fazer isto. |
no_existe | 404 | Não há nada sobre o que agir. |
metodo_no_permitido | 405 | A rota existe, esse verbo não. Distingue-se de uma rota inexistente de propósito: economiza uma hora. |
conflicto | 409 | O estado da conta não permite isso agora. |
precondicion_fallida | 412 | A 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_insuficiente | Sua chave não alcança essa rota. O provisionamento é do portal, não seu. | |
audio_ilegible | O áudio chegou, mas não deu para ler: está danificado ou cortado. A mensagem diz o motivo. | |
audio_no_valido | Uma 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_sistema | Essa alteração foi feita pelo seu provedor, ou mexe em algo que só ele altera: sua chave não pode desfazê-la. | |
canales_por_troncal | A 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_formada | O 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_disponible | Não dá para chegar à central agora. Tente de novo com espera crescente: sua requisição não tem nada de errado. | |
central_suspendida | A central está suspensa: enquanto estiver, não se autorizam telefones novos. | |
clase_de_servicio | Esse valor não é uma das permissões de chamada que um ramal pode ter. | |
clave_sin_cuenta | A chave não está vinculada a nenhuma conta. | |
consulta_no_valida | Um 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_distinta | Essa compra pertence a outra conta do portal. Uma compra não muda de dono. | |
cuenta_invalida | Falta a conta do portal, ou ela não tem o formato esperado. | |
cuenta_portal_en_uso | Essa conta do portal já está vinculada a outra licença ou central. Cada uma tem a sua. | |
cuenta_suspendida | Sua conta está suspensa: pode consultar, mas não alterar nada até ser reativada. | |
cupo_lleno | O plano não admite mais ramais. Libere um ou passe para um plano maior. | |
cursor_no_valido | O 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_grande | O áudio passa do tamanho máximo (HTTP 413). A mensagem diz o limite. | |
duracion | A saudação é curta ou longa demais. A mensagem diz quanto dura e qual é o limite. | |
es_titular | Essa é a instalação titular: não é revogada nem suspensa; suspende-se a central. | |
estado_invalido | Esse estado não é dos que aceitamos. A mensagem diz quais valem. | |
extension_ajena | Esse ramal não pertence à sua central. | |
extension_de_la_tienda | Esse ramal é um lugar autorizado pela loja (uma licença, a titular ou um membro): não é apagado aqui; é revogado pelo app. | |
falta_confirmar | Apagar uma conta não pode ser desfeito: o pedido tem de trazer confirmar: 'suprimir'. | |
falta_credencial | Você não enviou nenhuma chave. | |
formato_no_soportado | O áudio não está num formato aceito (HTTP 415): AAC em MP4 (m4a), MP3, WAV ou Ogg. | |
garantia_no_cabe | Nã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_ajena | Só pode pedir permissão com um número da sua própria conta. | |
identidad_de_otro | Esse número de identificação já está atribuído a outra licença. Para o mover, envie mover: true. | |
instalacion_invalida | O 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_licencia | Essa 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_app | Uma licença do app só tem o telefone da sua instalação: não admite outros aparelhos. | |
mensaje_con_enlace | A mensagem de um pedido de permissão não pode conter links. | |
mensaje_largo | A mensagem de um pedido de permissão tem no máximo 140 caracteres. | |
misma_casa | Esse número é da sua própria conta: entre as suas linhas não é preciso permissão. | |
nacional | Um feriado nacional não se altera nem se apaga. Para abrir nesse dia, crie uma exceção com cerrado:false. | |
no_editable | Esse dado é alterado pelo seu provedor, não daqui. | |
no_es_de_la_tienda | Essa conta não foi comprada na loja: o seu cancelamento segue outro processo. | |
no_es_de_tienda | Essa central não foi comprada na loja: é administrada pelo portal. | |
no_existe | Não há nada sobre o que agir. | |
no_pude_mirar | Cegueira, 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_existe | Esse número não tem permissão para lhe ligar: não há nada para revogar. | |
plan_desconocido | Esse plano não está à venda. Os válidos são os publicados. | |
plan_legado | Esta central mantém o plano com que foi vendida. Para passá-la à escala atual é preciso pedir expressamente. | |
prueba_distinta | Uma central de teste não se torna real, nem uma real se torna de teste. Uma compra real tem sua própria referência. | |
reconfigurando | A 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_tipo | Essa referência é de uma licença e foi pedida como central, ou o contrário. | |
ref_invalida | A referência do portal não tem o formato esperado. | |
sesion_vieja_para_gastar | A 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_voice | Não foi possível atribuir um número VOICE agora. Tente de novo em alguns segundos. | |
sin_registrar | A falha de verdade: a operadora não nos tem registrados e por ali não entram chamadas. Esta sim merece acordar alguém. | |
solicitud_cerrada | Esse pedido de permissão já não está pendente: foi aprovado, rejeitado, retirado ou expirou. | |
solicitud_no_existe | Esse pedido de permissão não existe ou não é da sua conta. | |
solo_la_titular | Numa central com várias pessoas, isto é decidido pela titular; um membro não pode. | |
solo_lectura | Sua chave é somente leitura e isto gravaria. | |
tope_aparatos | Esse ramal já tem todos os aparelhos que admite. Desvincule um antes de adicionar outro. | |
tunel_retirado | Esse 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_permitida | Esse endereço não é aceito para um webhook: tem de ser https e público, nunca de uma rede privada. | |
version_distinta | Esse 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_existe | Já existe algo com esse nome ou número. Tente com outro, não com a mesma carga. |
| Código | Quantas | Mensagem |
|---|---|---|
400 | 218 |
|
401 | 1 |
|
403 | 16 |
|
404 | 58 |
|
409 | 43 |
|
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
| Área | Endpoints | Exemplos |
|---|---|---|
| Caixas postais | 15 | GET /buzones POST /buzones DELETE /buzones/:buz |
| Ramais | 13 | GET /extensiones POST /extensiones DELETE /extensiones/:ext |
| Quem lhe pode ligar de graça a partir da rede | 13 | GET /red/bloqueos DELETE /red/bloqueos/:numero PUT /red/bloqueos/:numero |
| Filas | 12 | GET /colas POST /colas DELETE /colas/:cola |
| Música de espera | 12 | GET /discos POST /discos DELETE /discos/:disco |
| Gravações | 9 | GET /grabaciones PUT /grabaciones/:grabacion/categoria DELETE /grabaciones/:grb |
| Grupos de toque | 8 | GET /grupos POST /grupos DELETE /grupos/:grp |
| Menus de voz | 8 | GET /ivrs POST /ivrs DELETE /ivrs/:ivr |
| Turnos de plantão | 8 | GET /turnos POST /turnos DELETE /turnos/:turno |
| Salas de conferência | 7 | GET /conferencias POST /conferencias DELETE /conferencias/:sala |
| Horários | 7 | GET /horarios POST /horarios DELETE /horarios/:hor |
| Avisos ao seu sistema | 7 | GET /webhooks POST /webhooks DELETE /webhooks/:whk |
| Passos de fluxo programável | 6 | GET /pasos POST /pasos DELETE /pasos/:pso |
| Feriados | 5 | GET /feriados POST /feriados DELETE /feriados/:fer |
| O que cada linha diz | 5 | GET /guiones POST /guiones DELETE /guiones/:gui |
| Recados | 5 | GET /mensajes DELETE /mensajes/:msg GET /mensajes/:msg |
| Rotas de entrada | 5 | GET /rutas POST /rutas DELETE /rutas/:ruta |
| Apelidos discáveis | 4 | GET /alias POST /alias DELETE /alias/:als |
| Lembretes de consulta | 4 | GET /citas POST /citas DELETE /citas/:cita |
| Os seus contatos | 4 | GET /contactos POST /contactos DELETE /contactos/:con |
| Chat junto com a voz | 4 | GET /conversaciones GET /conversaciones/:cnv POST /conversaciones/:cnv/cerrar |
| Aparelhos | 4 | DELETE /dispositivos/:disp POST /dispositivos/:disp/estado POST /dispositivos/:disp/provision |
| Processos de ligação mal-intencionada | 4 | GET /expedientes POST /expedientes GET /expedientes/:exp |
| Regras de gravação | 4 | GET /grabacion/decidir GET /grabacion/reglas PUT /grabacion/reglas |
| Registro de ligações | 4 | GET /llamadas GET /llamadas/:llamada GET /llamadas/csv |
| Números | 4 | GET /numeros DELETE /numeros/:numero/aviso-cambio GET /numeros/:numero/aviso-cambio |
| Linhas simultâneas | 3 | GET /canales GET /canales/episodios PUT /canales/modo |
| Histórico de mudanças e desfazer | 3 | GET /historial GET /historial/:cambio POST /historial/:cambio/revertir |
| Lista negra | 3 | GET /lista-negra POST /lista-negra DELETE /lista-negra/:neg |
| Janelas de manutenção | 3 | GET /mantenimientos POST /mantenimientos POST /mantenimientos/:mnt/cerrar |
| A sua conta e o estado dela | 2 | GET / PATCH / |
| Lista de nomes | 2 | GET /directorio GET /directorio/buscar |
| Links para compartilhar | 2 | GET /enlaces DELETE /enlaces/:token |
| Toques do app | 2 | GET /timbres/:timbre POST /timbres/:timbre/rechazar |
| Outras | 1 | GET /guiones/claves |
| Ligações estacionadas | 1 | GET /aparcadas |
| O que a sua chave pode fazer | 1 | GET /capacidades |
| Quem está ligando, e sobre o quê | 1 | GET /contexto |
| Quanto custaria uma ligação | 1 | GET /cotizar-llamada |
| Para onde dá para mandar uma ligação | 1 | GET /destinos |
| Quão alcançáveis estão os seus aparelhos | 1 | GET /disponibilidad |
| Extrato | 1 | GET /estado-cuenta |
| O canal ao vivo | 1 | POST /eventos/ticket |
| Instalações do app | 1 | DELETE /instalaciones/:instalacion |
| Ligações em curso | 1 | GET /llamadas-en-curso |
| Ligar com um clique | 1 | POST /llamar |
| Telefonista | 1 | PUT /operadora |
| Para onde esta casa liga | 1 | GET /paises |
| Modelos de partida | 1 | POST /plantilla |
| O que se pode discar | 1 | GET /politica-salida |
| Presença | 1 | GET /presencia |
| A central liga para você e reproduz algo | 1 | POST /probar-audio |
| Testar onde cairia uma ligação | 1 | GET /probar-entrada |
| Testar uma saída sem cursá-la | 1 | GET /probar-salida |
| Saldo | 1 | GET /saldo |
| Ligações que ninguém retornou | 1 | GET /sin-devolver |
| Unir dois números de fora | 1 | POST /unir |
| Quem fura a fila | 1 | GET /vips |
| O telefone no navegador | 1 | POST /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 faz | O que faz | Exemplo |
|---|---|---|
GET /guiones/claves | Qué 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 /alias | pela API | |
POST /alias | pela API | |
DELETE /alias/:als | pela API | |
PATCH /alias/:als | pela API | |
GET /aparcadas | Las llamadas aparcadas ahora mismo (#60)pela API | ver |
GET /buzones | ligação real | |
POST /buzones | ligação real | |
DELETE /buzones/:buz | Borrar un buzón. If-Match opcional → 412ligação real | |
GET /buzones/:buz | ligação real | |
PATCH /buzones/:buz | Saludo, correo, transcripción, duración máxima. Parcial; If-Match → 412pela API | |
GET /buzones/:buz/mensajes | Mensajes de un buzón. ?paginar=1 / ?cursor= → {elementos, siguiente}pela API | |
PUT /buzones/:buzon/clave | Poner o quitar la clave del buzón (#10)bancada de testes | |
GET /buzones/:buzon/ocupacion | Cuántos mensajes hay y cuántos caben (#14)bancada de testes | |
GET /buzones/:buzon/papelera | Lo borrado que todavía se puede recuperar (#15)bancada de testes | |
POST /buzones/:buzon/papelera/:mensaje/recuperar | Deshacer un borrado (#15)bancada de testes | |
GET /buzones/:buzon/saludos | Los saludos del buzón, por motivo (con su audio: duración, bytes, huella)bancada de testes | |
POST /buzones/:buzon/saludos | Poner el saludo de un motivo (normal, ocupado, vacaciones…): de texto, o volver a un audio de la cuentabancada de testes | |
DELETE /buzones/:buzon/saludos/:saludo | bancada de testes | |
GET /buzones/:buzon/saludos/:saludo/audio | Escuchar un saludo: WAV o MP3 (Accept), con Range y ETagbancada de testes | |
PUT /buzones/:buzon/saludos/:tipo/audio | Subir el saludo de un motivo con la voz del cliente (bytes: m4a, mp3, wav u ogg; 1-90 s)bancada de testes | |
GET /canales | pela API | |
GET /canales/episodios | pela API | |
PUT /canales/modo | pela API | |
GET /capacidades | Qué puede esta llave, qué campos edita cada ajuste y con qué límites, y qué hay en cada áreapela API | |
GET /citas | pela API | |
POST /citas | Programar un recordatorio de cita por teléfonopela API | ver |
DELETE /citas/:cita | pela API | ver |
GET /citas/:cita | pela API | ver |
GET /colas | pela API | ver |
POST /colas | Crear una cola de espera con agentespela API | ver |
DELETE /colas/:cola | Borrar una cola. If-Match opcional → 412pela API | |
GET /colas/:cola | pela API | ver |
PUT /colas/:cola | Estrategia, tiempos, anuncios, música y destinos. PUT PARCIAL; If-Match → 412pela API | ver |
GET /colas/:cola/callbacks | Las devoluciones de llamada pedidaspela API | ver |
GET /colas/:cola/estado | Cuánta gente espera, quién está de turno y cuánto se tardapela API | |
GET /colas/:cola/habilidades | Qué habilidades existen hoy en esta cola | |
POST /colas/:cola/miembros | Añadir un agente (extensión o número de fuera)pela API | |
DELETE /colas/:cola/miembros/:miembro | pela API | |
PUT /colas/:cola/miembros/:miembro/habilidades | Las etiquetas de un agente (#70) | |
POST /colas/turno | Entrar o salir de turno (lo mismo que *80 / *81)pela API | |
GET /conferencias | pela API | |
POST /conferencias | Crear una sala con número y clavepela API | ver |
DELETE /conferencias/:sala | pela API | |
GET /conferencias/:sala | pela API | ver |
PUT /conferencias/:sala | Cambiar la sala (las claves se cambian, no se leen)pela API | |
GET /conferencias/:sala/historial | Quién estuvo y cuántopela API | |
POST /conferencias/:sala/invitar | Llamar a alguien y meterlo en la salapela API | |
GET /contactos | pela API | |
POST /contactos | Alta o importación masivapela API | |
DELETE /contactos/:con | pela API | |
PUT /contactos/:contacto/vip | Marcar o quitar el VIP de un contacto | |
GET /contexto | Quién llama y de qué habló la última vezpela API | |
GET /conversaciones | bancada de testes | |
GET /conversaciones/:cnv | bancada de testes | |
POST /conversaciones/:cnv/cerrar | bancada de testes | |
POST /conversaciones/:cnv/turnos | bancada de testes | |
GET /cotizar-llamada | Cuánto costaría llamar a ese número, antes de marcarlopela API | |
GET /destinos | Qué destinos se pueden elegir en esta cuentaligação real | |
GET /directorio | Quién sale en el directorio por nombrebancada de testes | |
GET /directorio/buscar | A quién encontraría el directorio con esas teclasbancada de testes | |
GET /discos | pela API | |
POST /discos | pela API | |
DELETE /discos/:disco | pela API | |
GET /discos/:disco | pela API | |
PATCH /discos/:disco | pela API | |
GET /discos/:disco/estadisticas | pela API | |
GET /discos/:disco/frases | pela API | |
PUT /discos/:disco/frases | pela API | |
DELETE /discos/:disco/frases/:frase | pela API | |
PUT /discos/:disco/pistas | pela API | |
DELETE /discos/:disco/pistas/:pista | pela API | |
GET /discos/:disco/probar | pela API | |
GET /disponibilidad | Cuánto tiempo estuvo arriba cada extensiónpela API | |
DELETE /dispositivos/:disp | Revocar una credencial (y colgar lo que ese aparato tenga en curso)aparelho real | |
POST /dispositivos/:disp/estado | Suspender o reactivar un dispositivoaparelho real | |
POST /dispositivos/:disp/provision | Emitir un token para configurar la app sin teclear la clavepela API | |
POST /dispositivos/:disp/rotar | Cambiar la clave de un dispositivoaparelho real | |
GET /enlaces | bancada de testes | |
DELETE /enlaces/:token | Revocar un enlace compartido por errorbancada de testes | |
GET /estado-cuenta | Estado de cuenta: movimientos, consumo y lo pendiente de reportar, con su semántica (el disponible es del portal)pela API | |
POST /eventos/ticket | Ticket para mirar el canal de eventos en vivo (sin teléfono)pela API | ver |
GET /expedientes | Los expedientes abiertos (#64) | |
POST /expedientes | Abrir expediente sobre una llamada | |
GET /expedientes/:exp | Un expediente, con su llamada y su grabación | |
POST /expedientes/:exp/cerrar | Cerrar un expediente (la fila NUNCA se borra) | |
GET /extensiones | pela API | ver |
POST /extensiones | Alta de extensión (crea buzón y credencial)pela API | ver |
DELETE /extensiones/:ext | Borrar una extensión. If-Match opcional → 412pela API | |
GET /extensiones/:ext | pela API | |
PATCH /extensiones/:ext | Editar una extensión. Parcial; If-Match → 412pela API | |
POST /extensiones/:ext/dispositivos | Añadir un dispositivo (celular, computadora…)pela API | |
POST /extensiones/:ext/no-molestar | pela API | |
GET /extensiones/:ext/reglas | ligação real | |
PUT /extensiones/:ext/reglas | Sígueme, desvío, no molestar y destino de fallo. PUT PARCIAL; If-Match → 412pela API | |
GET /extensiones/:extension/camp | Los avisos de desocupado que pidió esta extensión (#58) | |
DELETE /extensiones/:extension/camp/:objetivo | Cancelar un aviso de desocupado | |
POST /extensiones/:extension/mover | Mover la llamada en curso a otro aparato de la misma extensión (#57) | |
GET /extensiones/siguiente-libre | pela API | ver |
GET /feriados | pela API | |
POST /feriados | Feriado propio o excepción a uno nacional (idempotente por fecha)pela API | |
DELETE /feriados/:fer | Borrar un feriado de la cuenta. If-Match opcional → 412pela API | |
GET /feriados/:fer | Un feriado de la cuenta o nacional, con su versión (ETag)pela API | |
PATCH /feriados/:fer | Nombre 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/reglas | pela API | |
PUT /grabacion/reglas | Qué se graba y cuánto se guardapela API | |
DELETE /grabacion/reglas/:regla | pela API | |
GET /grabaciones | Grabaciones; desde/hasta son fechas. ?paginar=1 / ?cursor= → {elementos, siguiente}bancada de testes | |
PUT /grabaciones/:grabacion/categoria | cliente | prospecto | interno, o nada (#68) | |
DELETE /grabaciones/:grb | bancada de testes | |
GET /grabaciones/:grb | Ficha: transcripción, resumen, acuerdos y hablantesainda sem exercitar | |
GET /grabaciones/:grb/accesos | Quién ha escuchado esta grabaciónbancada de testes | |
POST /grabaciones/:grb/analizar | Volver a transcribir y resumirainda sem exercitar | |
GET /grabaciones/:grb/audio | El audio (queda auditado)bancada de testes | |
POST /grabaciones/:grb/enlace | Enlace firmado para compartir sin dar acceso a la cuentabancada de testes | |
GET /grabaciones/buscar | Buscar por lo que se dijo dentro de las llamadasbancada de testes | |
GET /grupos | pela API | |
POST /grupos | pela API | |
DELETE /grupos/:grp | Borrar un grupo. If-Match opcional → 412pela API | |
GET /grupos/:grp | pela API | |
PUT /grupos/:grp | Estrategia, timbrado, fallo y miembros (si vienen, reemplazan la lista). Parcial; If-Match → 412pela API | |
POST /grupos/:grp/miembros | pela API | |
DELETE /grupos/:grp/miembros/:miembro | pela API | |
GET /grupos/:grp/orden | En qué orden sonaría ahora mismopela API | |
GET /guiones | ligação real | |
POST /guiones | Los textos que dice una línealigação real | |
DELETE /guiones/:gui | ligação real | |
GET /guiones/:gui | ligação real | |
PATCH /guiones/:gui | Cambiar textos, nombre o voz declaradaligação real | |
GET /historial | Qué cambió en esta cuenta, quién y cuándopela API | ver |
GET /historial/:cambio | pela API | ver |
POST /historial/:cambio/revertir | Deshacer un cambio de configuraciónpela API | ver |
GET /horarios | pela API | |
POST /horarios | pela API | |
DELETE /horarios/:hor | Borrar un horario. If-Match opcional → 412pela API | |
GET /horarios/:hor | pela API | |
PUT /horarios/:hor | Nombre, 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/manual | Interruptor: abierto, cerrado, almuerzo o feriado, con caducidad; null vuelve al automáticopela API | |
DELETE /instalaciones/:instalacion | Desvincular el teléfono de una instalación de la app (borra sus aparatos y cuelga sus llamadas)pela API | |
GET /ivrs | ligação real | |
POST /ivrs | Crear un menú (detecta bucles al guardar)ligação real | |
DELETE /ivrs/:ivr | Borrar un menú. If-Match opcional → 412ligação real | |
GET /ivrs/:ivr | ligação real | |
PUT /ivrs/:ivr | Saludo, espera, reintentos, agotado y opciones (si vienen, reemplazan la lista). Parcial; If-Match → 412; ciclo → 409ligação real | |
GET /ivrs/:ivr/guion | El texto exacto que se va a decirpela API | |
DELETE /ivrs/:ivr/opciones/:tecla | ligação real | |
PUT /ivrs/:ivr/opciones/:tecla | ligação real | |
GET /lista-negra | pela API | |
POST /lista-negra | Bloquear un número entrantepela API | |
DELETE /lista-negra/:neg | pela API | |
GET /llamadas | Registro 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-curso | Las llamadas del inquilino ahora mismo (vista de operadora)pela API | ver |
GET /llamadas/:llamada | ligação real | |
GET /llamadas/csv | Exportar el CDRligação real | |
GET /llamadas/resumen | Totales, atención y repartoligação real | |
POST /llamar | Timbrar a la extensión y conectarla con un destinoligação real | |
GET /mantenimientos | pela API | ver |
POST /mantenimientos | Avisar a quien llame de que hay un mantenimiento en cursopela API | ver |
POST /mantenimientos/:mnt/cerrar | pela API | ver |
GET /mensajes | Bandeja de toda la cuenta (con la llave de un aparato, la de su extensión). ?paginar=1 / ?cursor= → {elementos, siguiente}pela API | |
DELETE /mensajes/:msg | pela API | |
GET /mensajes/:msg | pela API | |
GET /mensajes/:msg/audio | El audio del mensaje: WAV o MP3 (Accept), con Range y ETag; no lo marca leído y queda auditadopela API | |
POST /mensajes/:msg/leido | pela API | |
GET /numeros | pela API | ver |
DELETE /numeros/:numero/aviso-cambio | Apagar el aviso de cambio y devolver la línea a su destinoainda sem exercitar | |
GET /numeros/:numero/aviso-cambio | Estado del aviso de cambio de númeroainda sem exercitar | |
POST /numeros/:numero/aviso-cambio | Anunciar que este número cambió y decir el nuevoainda sem exercitar | |
PUT /operadora | A dónde va el cero (#109)pela API | ver |
GET /paises | La memoria del cortafuegos de fraude: a dónde llama esta casa (#65) | |
GET /pasos | Pasos de flujo del cliente | |
POST /pasos | Alta de un paso de flujo | |
DELETE /pasos/:pso | ||
GET /pasos/:pso | ||
PUT /pasos/:pso | ||
POST /pasos/:pso/rotar-secreto | Rotar el secreto con el que se firma la consulta | |
POST /plantilla | Aplicar una plantilla de arranque (horario + ruta + buzón)pela API | |
GET /politica-salida | pela API | |
GET /presencia | Presencia de las extensiones de la cuenta, agregada por extensiónpela API | |
POST /probar-audio | Llamarte y reproducirte una cadena de audio — la prueba de verdadligação real | |
GET /probar-entrada | A dónde iría una llamada ahora mismoligação real | |
GET /probar-salida | Simular una salida sin cursarlaligação real | |
GET /red/bloqueos | Los números bloqueadospela API | |
DELETE /red/bloqueos/:numero | Desbloquear un númeropela API | |
PUT /red/bloqueos/:numero | Bloquear un número (cuelga sus llamadas de red en curso)pela API | |
GET /red/enviadas | Las solicitudes que envié (pendiente | aprobada | no_aprobada)pela API | |
POST /red/enviadas | Pedir permiso para llamar gratis (202 siempre igual)pela API | |
DELETE /red/enviadas/:sol | Retirar una solicitud, o renunciar a un permiso concedidopela API | |
GET /red/permisos | Quién me puede llamar gratispela API | |
DELETE /red/permisos/:numero | Revocar un permiso (la llamada en curso sigue; la siguiente ya no es gratis)pela API | |
GET /red/solicitudes | Las solicitudes de llamada gratis que le llegaron (estado=pendiente)pela API | |
POST /red/solicitudes/:sol/aprobar | Aceptar: ese número llama gratis (en una central, la titular; extension_id = dónde suena)pela API | |
POST /red/solicitudes/:sol/bloquear | Rechazar y bloquear ese númeropela API | |
POST /red/solicitudes/:sol/rechazar | Rechazar (a quien pidió no se le avisa)pela API | |
GET /red/veredicto | Antes de llamar: gratis | pago (con su tarifa) | solicitud | no_disponiblepela API | |
GET /rutas | ligação real | |
POST /rutas | Qué hace una llamada que entra por un númeroligação real | |
DELETE /rutas/:ruta | Borrar una ruta de entrada. If-Match opcional → 412ligação real | |
GET /rutas/:ruta | ligação real | |
PATCH /rutas/:ruta | Destino, horario, modos, saludo y grabación. Parcial; If-Match → 412ligação real | |
GET /saldo | Saldo: el espejo local, los topes y el gasto, con su semántica (el disponible es del portal)bancada de testes | |
GET /sin-devolver | Las perdidas que nadie ha devuelto, agrupadas por número (#67) | |
GET /timbres/:timbre | Estado de un timbre de la app (conciliar al despertar)pela API | |
POST /timbres/:timbre/rechazar | Rechazar un timbre desde la app (antes o después de registrarse)pela API | |
GET /turnos | Las rotas de guardia (#66) | |
POST /turnos | Crear una rota de guardia | |
DELETE /turnos/:turno | Borrar una rota (falla si una ruta apunta a ella) | |
GET /turnos/:turno | Una rota, con quién está de guardia AHORA | |
PUT /turnos/:turno | Cambiar una rota | |
POST /turnos/:turno/miembros | Meter a alguien en la rota, con su franja | |
DELETE /turnos/:turno/miembros/:miembro | Sacar a alguien de la rota | |
PUT /turnos/:turno/miembros/:miembro | Cambiar la franja de alguien | |
POST /unir | Llamar a dos números externos y unirlosligação real | |
GET /vips | Quién se salta la fila de la cola (#61) | |
GET /webhooks | pela API | |
POST /webhooks | pela API | |
DELETE /webhooks/:whk | pela API | |
PATCH /webhooks/:whk | pela API | |
GET /webhooks/:whk/entregas | pela API | |
POST /webhooks/:whk/probar | Mandar un evento de pruebapela API | |
POST /webhooks/:whk/rotar | pela API | |
POST /webphone/sesion | Registrar 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
| Evento | Quando dispara |
|---|---|
llamada.entrante | Está entrando uma ligação, com o número, a rota e para onde vai. |
llamada.contestada | Alguém atendeu. |
llamada.terminada | Terminou, com a duração e como acabou. |
llamada.perdida | Tocou e ninguém atendeu. |
buzon.mensaje | Alguém deixou um recado, com a transcrição. |
grabacion.lista | Uma gravação terminou de processar e pode ser baixada. |
grabacion.analizada | A transcrição, os falantes e o resumo dela estão prontos. |
saldo.bajo | O saldo está acabando. |
tope.alcanzado | Um teto de gasto foi alcançado e as ligações pararam. |
registro.anomalo | Um registro de aparelho está com cara errada — várias credenciais do mesmo lugar, por exemplo. |
canales.al_limite | Você está perto do topo das suas linhas simultâneas. |
cita.confirmada | Alguém confirmou a consulta pelo teclado. |
cita.reagendar | Alguém pediu outra data. É um pedido para uma pessoa, não algo que a central vá resolver sozinha. |
cita.cancelada | Alguém cancelou a consulta. |
desvio.activado | Um desvio foi ativado. |
desvio.recordatorio | Um desvio continua ativado. O desvio esquecido é o defeito fantasma mais comum de uma central. |
buzon.lleno | Uma caixa postal está cheia — daqui em diante recados se perderiam. |
buzon.casi_lleno | Uma caixa postal está quase cheia, enquanto ainda dá tempo de fazer algo. |
cola.vacia | Não há ninguém de turno numa fila. |
cola.callback | Alguém pediu para ser chamado de volta em vez de esperar. |
conferencia.entra | Alguém entrou numa sala. |
conferencia.sale | Alguém saiu de uma sala. |
canales.desalojo | Uma linha emprestada foi devolvida para proteger a garantia de alguém. |
emergencia.marcada | Alguém discou o número de emergência de um ramal. A ligação nunca é atrasada por isso. |
fax.entrante | Foi detectado tom de fax numa ligação de entrada. |
supervision.iniciada | Algué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.sospecha | Um padrão de comportamento com cara de fraude. Avisa; não corta. |
filtro.insistencia | Um número está ligando vezes demais. |
red.solicitud.nueva | Outra linha da rede pediu permissão para lhe ligar de graça. |
red.solicitud.respondida | A sua conta aprovou ou rejeitou um pedido de permissão. |
red.permiso.revocado | A 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.
| Selo | O que faz | Quantas |
|---|---|---|
| ligação real | Alguém fez uma ligação de verdade e ela fez o que está escrito aqui. | 14 |
| ligação de teste | Uma 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 real | Provado com um aparelho real se registrando. | 1 |
| pela API | Exercitado pela API pública. | 47 |
| bancada de testes | Exercitado na bancada de testes, contra uma cópia descartável do banco. | 13 |
| ainda sem exercitar | O 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.
| Termo | O que faz |
|---|---|
| Ramal | Uma 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 toque | Vários ramais tocando pela mesma ligação. É simples, e não faz ideia de quem está esperando nem desde quando. |
| Fila | Um 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 ocupado | O 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-me | O seu ramal toca também no seu celular, ou no lugar dele. É a função mais usada de qualquer central pequena. |
| Estacionar | Deixar uma ligação esperando numa vaga numerada para que qualquer um, de qualquer telefone, pegue digitando essa vaga. |
| Transferência assistida | Falar com o colega antes de passar a ligação, com a possibilidade de pegar de volta. |