Documentación
Una sola página, cuatro carriles. Empiece aquí, entréguele los dos del medio a quien contesta el teléfono y a quien dirige, y mándele el último a quien escribe el código.
Para empezar
Su central en cinco minutos
Todo lo de aquí abajo ya existe en su cuenta. Nada necesita un instalador, la visita de un técnico ni un aparato que haya que comprar.
- Ya tiene números y extensiones. Se crean con su cuenta, junto con las credenciales que necesita cada aparato. Una extensión es una persona o un puesto; un número es lo que marca la gente de fuera.
- Apunte un número a algún sitio. En la pestaña de Números dice qué debe hacer una llamada que entre por ahí: timbrar una extensión, timbrar un grupo, abrir un menú, entrar en una cola o seguir su horario.
- Contéstela desde el navegador. Abra la pestaña Teléfono, dé permiso al micrófono y esa pestaña es un aparato que funciona. Llame a la prueba de eco marcando
*43y se oirá a usted mismo de vuelta. - Y después ponga su horario y su buzón. Esos dos son los que impiden que una llamada se pierda a las siete de la tarde, y son las dos cosas que más suelen faltarle a una central recién estrenada.
¿Con prisa? Hay cinco plantillas de arranque —un consultorio, un bufete, un taller, una tienda y una casa— que crean el horario, la ruta de entrada y el buzón de fuera de horario en una sola petición. Nunca pisan algo que usted ya haya configurado.
Cómo se entra al panelpor la API
El panel vive en su página de VOICE y sólo aparece con una sesión. Esa sesión la emite su área de cliente; aquí no se teclea nada.
| Paso | Qué hace |
|---|---|
| 1 | Usted inicia sesión en su área de cliente, en elportaldelcliente.com. |
| 2 | Elige «Administrar mi central» en el menú de su cuenta. Eso le pide a VOICE una sesión en su nombre y lo lleva a su página de VOICE con la credencial en el fragmento de la dirección. |
| 3 | El panel sustituye a la página comercial. La credencial se borra de la barra de direcciones antes de pintar nada, y caduca sola. |
Para quien construya ese botón, éste es el contrato entero:
POST /inquilinos/:inquilino/sesiones # ámbito sistema: sólo el portal puede emitirla
{ "minutos": 15 }
→ { "clave": "pbx_ses_…", "caduca": "…", "ambito": "sesion", "minutos_max": 60 }
/central-telefonica#t=<clave>&exp=<ISO>&v=<inquilino>
La credencial viaja en el fragmento y no en la consulta a propósito: un fragmento no se manda nunca a un servidor, así que no acaba en una cabecera Referer, ni en un registro de accesos, ni en un intermediario del camino. Caduca en minutos, tiene techo, y no puede fabricar una clave permanente.
Para quien contesta el teléfono
El panel, pestaña a pestañapor la API
16 secciones, las mismas 16 en los ocho idiomas. Todo lo que hay aquí existe también en la API.
| Pestaña | Qué hace |
|---|---|
| Resumen | Cómo va su central ahora mismo: llamadas de hoy, atendidas, en curso, su pico y qué tan alcanzables han estado sus aparatos. |
| Mis números | Sus números, y qué hace cada uno cuando timbra. |
| Menús | Menús de voz: marque 1 para ventas, y dentro de ventas otro menú. |
| Extensiones | Personas y aparatos, con reglas por persona: sígueme, desvíos, no molestar, qué se le permite marcar y el portero. |
| Teléfono | El teléfono en sí: marcar, contestar, transferir, aparcar y ver quién está en llamada. |
| Colas | Colas con posición, espera medida, devolución de llamada, quién está de turno y quién atiende qué. |
| Salas | Salas de conferencia con clave, y quién está dentro en este momento. |
| Buzón | Mensajes con su transcripción, saludos, clave, papelera y el tope de tamaño. |
| Directorio | El directorio por nombre al que llega quien deletrea en el teclado. |
| Recepción | La operadora, las llamadas aparcadas en tiempo real, las ventanas de mantenimiento y la tabla de códigos. |
| Filtros | Lista negra, filtro de llamadas anónimas, avisos de quien insiste demasiado y todo lo relativo a quién puede alcanzarlo. |
| Horarios | Horario comercial, feriados y el interruptor de día y noche. |
| Música | La música en espera y las pistas que suena cada flujo. |
| Llamadas | Cada llamada con su número, su duración, su ruta y su grabación. |
| Líneas | Líneas simultáneas: lo que tiene garantizado, lo que está tomando prestado y su pico. |
| Consumo | Lo que consumió este mes, día por día. |
El teléfono dentro del navegadorllamada real
Una pestaña es un aparato. Sin instalar nada, sin comprar un teléfono de escritorio y sin portar ningún número: es una extensión de su propia central, registrada desde el navegador.
- Es una extensión de verdad. El navegador se registra contra su central igual que un teléfono de escritorio, y el audio va cifrado. Quien llame a su número puede llegar a la pestaña, y la pestaña puede llamar hacia fuera.
- La pestaña tiene que estar abierta. Una pestaña cerrada es un teléfono desenchufado. Ése es el límite honesto de un teléfono en el navegador, y la razón de que acompañe a un aparato de escritorio en vez de sustituirlo en todos lados.
- Ve quién está en llamada.llamada real Las luces de sus compañeros se actualizan en vivo —libre, timbrando, hablando—, así que sabe si hay a quién pasarle la llamada antes de intentar pasársela.
- Puede mover una llamada viva a otro aparato.aún sin ejercitar «Me tengo que ir y estoy hablando»: la llamada se pasa a su celular sin colgar. Es un botón y no un código de teclado a propósito — quien mueve una llamada tiene una pantalla delante.
- Transferir, aparcar y grabar son los mismos códigos que en cualquier aparato. Se marcan, no se pulsan, así que lo que aprende en el navegador le sirve en el teléfono de escritorio y en su celular.
El teléfono del navegador no graba nunca en su computadora. Grabar ocurre dentro de la central, que es donde se aplican las reglas de a quién se puede grabar y a quién hay que avisarle — vea «Grabar, y la ley».
Códigos que se marcan desde el teléfono
Se respetan los de siempre allí donde hay convención (*72 desviar, *78 no molestar, *97 el buzón, *8 capturar, *69 quién acaba de llamar). Ése es todo el sentido de un código de teclado: la función ya está en el panel, y el código es lo que hace que alguien que lleva veinte años marcando *72 se crea el panel.
Se marcan con el teléfono libre
| Código | Qué hace | Verificado |
|---|---|---|
*43 | Prueba de eco. Graba lo que usted dice y se lo devuelve, y sabe decir «no me llegó nada». | aún sin ejercitar |
*44 | Lo mismo, pero con retardo: delata las palabras que se están perdiendo. | aún sin ejercitar |
*45 | Prueba de teclado. Dice cada tecla según la va marcando. | aún sin ejercitar |
*46 | El estado de su línea: registro, códec, dirección y latencia. | aún sin ejercitar |
*60 | La hora y la fecha, dichas bien. | banco de pruebas |
*62 | Su consumo del mes (llamadas y minutos; el importe, sólo cuando el cobro esté encendido). | por la API |
*69 | Quién lo llamó por última vez, dicho en voz alta y contando las perdidas — después marque 1 para devolverla. | aún sin ejercitar |
*72 | Desvío incondicional. Le lee el número de vuelta. | por la API |
*73 | Quita todos los desvíos. | por la API |
*74 | Desvío en paralelo: timbran su extensión y el número a la vez. | por la API |
*75 | Desvío cuando usted está ocupado. | por la API |
*76 | Desvío cuando usted no contesta. | por la API |
*78 | No molestar, activado y confirmado en voz alta. | por la API |
*79 | No molestar, quitado. | por la API |
*80 | Entra de turno en todas sus colas. | por la API |
*81 | Sale de turno en todas sus colas. | por la API |
*90 | Bloquea un número (con sólo # bloquea el de la última llamada recibida). | aún sin ejercitar |
*91 | Desbloquea. | aún sin ejercitar |
*97 | Su buzón, con su clave. | banco de pruebas |
*98 | Graba su saludo. | banco de pruebas |
*99 | Graba su nombre — lo usan el directorio y la sala de conferencia. | banco de pruebas |
*8 | Captura la llamada que está timbrando en el puesto de al lado. | por la API |
*66 | Modo: normal · almuerzo · cerrado · feriado · automático. | por la API |
*411 | El directorio por nombre. | banco de pruebas |
*57 | Abre un expediente de llamada malintencionada sobre la que acaba de recibir. La grabación deja de caducar y se conservan la hora, la ruta y el audio para una denuncia. No bloquea a quien llama: eso lo decide usted. | aún sin ejercitar |
*85 | Avíseme cuando esa extensión se desocupe. | aún sin ejercitar |
*86 | Cancela ese aviso. | aún sin ejercitar |
*82 | Escucha una llamada de su propia empresa. No lo oye ninguna de las dos partes. | aún sin ejercitar |
*83 | Susurra: lo oye sólo su compañero, no el cliente. | aún sin ejercitar |
*84 | Entra en la llamada: lo oyen los dos. | aún sin ejercitar |
*88 | Las llamadas que nadie devolvió, dichas en voz alta — después marque 1 para devolver la más antigua. | aún sin ejercitar |
*47 | La central se explica sola: le recita sus propios códigos, 9 para el siguiente y 0 para salir. | aún sin ejercitar |
70N | Recoge la llamada aparcada en la plaza N. | por la API |
Se marcan durante una conversación
| Código | Qué hace | Verificado |
|---|---|---|
*1 | Graba esta llamada, ahora. Se les avisa a las dos partes. | por la API |
*7 | Aparcarla: quien llama queda con música y se dice en voz alta el número de plaza. | por la API |
##<ext># | Transferencia ciega: se la pasa y usted cuelga. | llamada real |
#<ext># | Transferir sin elegir tipo. La central averigua si hay alguien y, si no lo hay, la pasa a ciega. | aún sin ejercitar |
*2<ext># | Transferencia atendida: primero habla usted con su compañero. | aún sin ejercitar |
Mientras consulta, en una transferencia atendida
| Código | Qué hace | Verificado |
|---|---|---|
*1 | Completa la transferencia. | aún sin ejercitar |
*0 | Cancela y vuelve con quien llamó. | aún sin ejercitar |
*3 | Los pone a los tres en la misma llamada. | aún sin ejercitar |
Dentro de una sala de conferencia
| Código | Qué hace | Verificado |
|---|---|---|
*6 | Cualquiera: silencia y abre su micrófono. | por la API |
*7 | Cualquiera: cuántas personas hay en la sala. | por la API |
*9 | Cualquiera: salir. | por la API |
*1 | Organizador: cierra la sala sin cambiar la clave. | por la API |
*2 | Organizador: la vuelve a abrir. | por la API |
*3 | Organizador: empieza o para la grabación. | por la API |
Algunos códigos significan dos cosas y no chocan: *1 en una conversación normal es «grabar ahora», mientras consulta es «completar la transferencia», y dentro de una sala es «cerrar la sala». Son estados distintos del mismo teléfono, atendidos por código distinto.
Antes de fiarse de un teléfono nuevo: Los teléfonos de escritorio y los adaptadores procesan sus propios códigos de estrella y no los mandan nunca. Si marca un código y oye silencio y luego el tono, se lo comió el aparato y la central no vio nada. Pídanos que revisemos un modelo nuevo contra la lista de hoy antes de repartirlo.
El buzón desde cualquier teléfonobanco de pruebas
Marque *97, teclee su clave y tiene el buzón entero: sin aplicación y sin navegador. Está pensado para el dueño que llama desde un celular prestado.
Menú principal
| Tecla | Qué hace |
|---|---|
1 | Mensajes nuevos. |
2 | Mensajes guardados. |
4 | Saludos y su nombre grabado. |
5 | Cambiar su clave. |
0 | Salir a la operadora. |
9 | Colgar. |
Mientras suena un mensaje
| Tecla | Qué hace |
|---|---|
1 | Repetirlo. |
2 | Guardarlo. |
3 | Borrarlo. Después marque 8 antes de cinco segundos para deshacerlo. |
4 | Devolverle la llamada a esa persona. |
6 | El siguiente, dejando éste como nuevo. |
7 | Reenviárselo a un compañero con una nota suya grabada delante. |
Menú de saludos
| Tecla | Qué hace |
|---|---|
1 | Grabar el saludo principal. |
2 | Grabar su nombre. |
3 | Poner un saludo de vacaciones. |
4 | Quitarlo. |
Atender la llamada
Un grupo de timbrado dice «que suene en varios sitios». Todo lo de esta lista hace algo que un grupo no puede hacer.
- Colas.por la API Una cola sabe cuánta gente hay delante y cuánto se suele tardar, así que puede decirlo. La espera se mide con sus propias llamadas recientes, nunca se inventa — con menos de tres muestras no dice nada. Sin nadie de turno, no se hace esperar a nadie.
- Devolución de llamada desde la cola.por la API Se ofrece pasado un rato de espera, y no se ofrece si la llamada va a entrar enseguida. La petición sobrevive a un reinicio, porque quien la pide cuelga, y la devolución entra por delante de la fila, que es lo que se le prometió.
- Salas de conferencia.por la API Una sala con su número y dos claves: una para entrar y otra para organizarla. Nadie necesita cuenta en ningún sitio. Las entradas y salidas se anuncian con el nombre que grabó cada quien.
- El directorio por nombre.banco de pruebas Quien llama deletrea un nombre en el teclado y se le pasa. Se indexa cada palabra del nombre por separado, porque aquí dos apellidos son lo normal y buscar sólo por el primero encuentra a media empresa. Los acentos y la eñe se normalizan, así que «Muñoz» se encuentra marcando 686.
- El cero para la operadora.por la API Probablemente la expectativa más universal que existe sobre un teléfono: poder llegar a una persona. El cero baja en cascada de su operadora al buzón general y a decirlo en voz alta — nunca un cuelgue mudo.
- Aparcar y capturar.por la API Aparque una llamada y espera con música en una plaza numerada mientras usted camina a otro puesto. Cualquiera la recoge marcando esa plaza. Capturar el teléfono que timbra a su lado es
*8.
Para quien dirige
Canales: garantía, préstamo y devoluciónpor la API
Es la parte del producto que un techo duro no sabe hacer, y conviene entenderla antes de elegir plan.
- Garantizadas. Las llamadas simultáneas que vende su plan. Caben siempre, esté como esté la central, y nadie se las puede quitar.
- Prestadas. Por encima de su garantía usa lo que la central tenga libre. La mayoría de los días estará aquí, y no cuesta nada de más.
- La reserva. Un colchón de canales que no se le presta a nadie, para que todo el mundo pueda llegar a su propia garantía en cualquier momento.
- La devolución. Cuando la central va apretada, una llamada prestada puede devolverse para proteger la garantía de otro. Sólo afecta a las cuentas que lo activaron, nunca a una llamada dentro de su garantía, nunca a una llamada de emergencia, y nunca en silencio — la central habla antes de soltar.
- No se puede sobrevender. La suma de todas las garantías más la reserva tiene que caber. El aprovisionamiento lo comprueba y rechaza un plan que no quepa, que es lo que hace que la palabra «garantizada» signifique algo.
- Y se ve cuándo mordió. La congestión se informa por episodios con su hora, no como un total del mes. «Doce rechazos en treinta días» se lee como ruido; «el martes pasado, entre diez y once, cinco personas oyeron ocupado» es algo sobre lo que se puede decidir.
Qué pasa cuando algo se rompe
Una central se juzga el día que se va la luz, no el día que todo funciona.
- Más de una salida. La central llega al mundo de fuera por varias conexiones independientes y elige entre ellas sola. Usted no configura esto ni lo ve ocurrir.
- «Funciona» se mide contra lo que hay que medir. Una conexión sólo entra en el reparto si llega a internet Y a la red telefónica. Comprobar sólo lo primero es como una central se queda sin línea con todas las luces en verde.
- Se recupera sola de un corte de luz. Cuando vuelve la luz, la central y los equipos de red arrancan a la vez y no siempre en el orden bueno. En vez de confiar en ese orden, la central compara sin parar lo que tiene con lo que debería tener y se repara — con un techo de cuántas veces puede reintentarlo, para que una avería de verdad se escale en lugar de quedarse en bucle.
- No corta una llamada para arreglarse. Cualquier reparación que fuera a interrumpir conversaciones espera a que no haya ninguna.
Las grabaciones y los mensajes del buzón se guardan fuera de la central, así que sobreviven a la propia máquina.
Planes y minutos
5 planes, de $100 a $300 al año, con un número por licencia. El minuto entrante a un número de Costa Rica es de $0.00.
| Plan | Simultáneas, hasta | De ellas garantizadas | Extensiones | Retención (días) | Al año |
|---|---|---|---|---|---|
| VOICE I | 3 | 1 | 3 | 3 | $100 |
| VOICE II | 4 | 2 | 4 | 4 | $150 |
| VOICE III | 6 | 3 | 6 | 6 | $200 |
| VOICE IV | 8 | 4 | 8 | 8 | $250 |
| VOICE V | 10 | 5 | Sin límite | 28 | $300 |
Minutos
| Destino | Por minuto |
|---|---|
| Llamadas entrantes | $0.00 |
| Costa Rica · fijo | $0.03 |
| Costa Rica · celular | $0.08 |
| Centroamérica | $0.45 |
| Caribe | $0.55 |
| Resto del mundo | $2.30 |
Precios en dólares, impuestos incluidos. El operador mide los celulares por segundo. Cada licencia incluye 1 número; los números adicionales comparten central, flujos y panel.
Grabar, y la leypor la API
Un audio grabado es la voz de otras personas. Lo gobierna la Ley 8968, y el diseño sale de ahí y no de lo que resultaría cómodo.
- Usted decide qué se graba.por la API Todo, o sólo ciertas extensiones, o sólo las llamadas que entren por cierto número. O nada, que es una respuesta legítima.
- La retención viene con su plan. Las grabaciones se purgan solas cuando les toca. La única excepción es una grabación atada a un expediente de llamada malintencionada, que deja de caducar hasta que usted cierre el expediente — y cerrarlo devuelve un plazo normal, nunca un «bórrela ya».
- Compartir una no es dar acceso. Un enlace firmado reproduce una sola grabación, caduca solo y se puede revocar. La persona a quien se lo manda no ve nunca su cuenta.
- Cada escucha queda anotada. Quién reprodujo qué grabación y cuándo. Es la voz de otra persona: saber quién la ha oído es parte de tenerla.
- Se pueden clasificar. Cliente, prospecto o interno. No hay valor por defecto a propósito: sin clasificar es honesto, y una etiqueta que puso la máquina no se distingue después de una que puso una persona.
Siempre se les avisa a las dos partes. Pedirle a la central que grabe devuelve también la obligación de anunciarlo: las dos cosas no se pueden separar, porque separarlas es como alguien acaba grabado sin saberlo. En una sala de conferencia el aviso se le hace a cada persona al entrar.
Límites, protección y deshacer
Lo que decide cuánto llega a doler un mal día: una credencial robada, un error en el enrutamiento, un número que no deja de llamar.
- Un tope de gasto, diario y mensual.banco de pruebas Es lo que impide que una credencial robada cueste dinero. Alcanzado el tope, las llamadas se paran.
- Qué puede marcar cada extensión.por la API Sólo internas, nacional, celular o todo. El teléfono de la bodega no tiene por qué poder llamar a un número premium. Las llamadas de emergencia no pasan nunca por aquí.
- El precio antes de marcar.por la API Pregunte cuánto costaría un número y la respuesta la calcula la misma maquinaria que va a cursar la llamada de verdad, no una lista de tarifas que podría no ser la que se aplique.
- Una alarma de fraude que mira el comportamiento.aún sin ejercitar Una velocidad rara, un país al que nunca ha llamado, una hora a la que no trabaja nadie. Avisa y no corta: un falso positivo aquí no es una alerta molesta, es una llamada que no se hizo. Le hacen falta dos señales antes de decir nada, porque una alarma que salta a diario se aprende a ignorar.
- Se señala a quien insiste demasiado.aún sin ejercitar El mismo número cinco veces en dos minutos no es un cliente insistente: es un marcador automático. De fábrica sólo avisa; bloquear automáticamente es una casilla suya, porque un falso positivo cuesta un cliente que ya no puede llamar nunca.
- Un expediente para una llamada malintencionada.aún sin ejercitar La hora, la ruta y el audio, guardados juntos para una denuncia. Abrir uno no bloquea a quien llama: cada llamada nueva es una prueba más, y eso lo decide usted y no nosotros.
- Qué tan alcanzables han estado sus aparatos.por la API No nuestro tiempo en pie: el suyo. Y siempre enseña qué parte del periodo se llegó a medir de verdad, porque un porcentaje que se come en silencio las horas que nadie miró se equivoca siempre hacia el lado cómodo.
- Qué cambió, quién lo cambió y cómo se deshace.por la API «Ayer funcionaba» es una pregunta con respuesta. Cada cambio de configuración queda anotado y se puede revertir, y revertir comprueba que nadie más haya tocado esos campos mientras tanto en vez de pisarlos en silencio.
Lo que está apagado, y por qué
Un manual que sólo cuenta lo que funciona le obliga a descubrir el resto por su cuenta, y siempre se descubre en el peor momento. Esta lista se genera desde la propia central, así que no puede describir como apagado algo que ya se encendió.
| Qué hace | Por qué |
|---|---|
| El buzón al correo | El audio adjunto, sin tener que llamar al buzón. Necesita una credencial de correo para el buzón, y esa credencial todavía no existe. |
| El cobro automático por minuto | La medición funciona y cada llamada se mide; lo que no está encendido es el descuento contra un saldo prepago. Mientras tanto, los minutos se facturan. |
| Dirección de respaldo para los aparatos | Para que los teléfonos conmuten solos entre las dos entradas de la central. Necesita una credencial del dominio con permiso de escritura; la que tenemos sólo lee. |
| El fax entrante | Detectar el tono y avisarle está construido, y está apagado a propósito: la detección de fax escucha todas las llamadas que entran, y un falso positivo tumbaría una llamada de voz real. Sigue apagado hasta que haya un fax de verdad con el que medirlo. |
Para quien integra
La APIpor la API
El panel es un cliente más de esta API. Todo lo que usted cambia a mano se puede cambiar por programa, con una clave que es de su cuenta.
curl -H "authorization: Bearer <clave>" \
https://api.voice.forhosting.com/inquilinos/<cuenta>/numeros
Ámbitos
| Ámbito | Qué hace |
|---|---|
sistema | Aprovisionamiento, por encima de las cuentas. No se le va a entregar una de éstas. |
inquilino | Su cuenta, lectura y escritura. Ésta es la clave con la que se integra. |
lectura | Su cuenta, sólo GET. Para paneles que no deberían poder cambiar nada. |
sesion | El mismo alcance que su clave de cuenta, pero caduca en minutos. Es la que usa el panel, para que un navegador no lleve nunca una credencial permanente. |
dispositivo | Un solo aparato de una sola extensión, y caduca en minutos. Es la que lleva la app del teléfono: sólo alcanza lo que un teléfono necesita, y sólo de su propia extensión. |
Cuando algo sale mal
| Código | Qué hace |
|---|---|
400 | La petición está mal formada, o un valor no es de los que aceptamos. El mensaje dice cuál. |
401 | Sin clave, con una clave desconocida, o con una sesión que ya caducó. |
403 | La clave es buena pero no puede hacer eso: datos de otra cuenta, una ruta de aprovisionamiento, o una escritura con una clave de sólo lectura. |
404 | Eso no existe en su cuenta. |
405 | Esa ruta existe, ese método no. Se distingue del 404 a propósito: ahorra una hora. |
503 · 504 | No se pudo alcanzar la central, o no contestó a tiempo. Nunca se contesta como «no tiene nada»: no poder mirar no es lo mismo que no haber nada. |
Todo lo que el API puede contestar cuando dice que no
Son las cadenas exactas que el API devuelve en el campo error, leídas del propio fuente de la central. Salen en español y aquí se muestran tal cual a propósito: lo que usted tiene que reconocer es lo que llega, no una traducción. Un … marca el hueco donde se inserta un dato.
Todo error lleva un código estable. Decida por codigo, no por el mensaje. Siempre está: lo que no declara uno específico recibe el de su clase, derivado del HTTP. La prosa de error es para que la lea una persona y puede reescribirse; el código, no.
{ "error": "…", "codigo": "de_otra_cuenta" }
| Código | HTTP | Cuándo lo recibe |
|---|---|---|
mala_peticion | 400 | La petición está mal formada, o un valor no es de los que aceptamos. El mensaje dice cuál. |
no_autorizado | 401 | Sin clave, con una desconocida, o con una sesión caducada. |
prohibido | 403 | La clave es buena pero no puede hacer esto. |
no_existe | 404 | No hay nada sobre lo que actuar. |
metodo_no_permitido | 405 | La ruta existe, ese verbo no. Se distingue de una ruta inexistente a propósito: ahorra una hora. |
conflicto | 409 | El estado de la cuenta no lo permite ahora mismo. |
ambito_insuficiente | Su clave no alcanza esa ruta. El aprovisionamiento es del portal, no suyo. | |
canales_por_troncal | El reparto de canales que llegó en el alta no se puede aceptar, y no se guarda ni una parte. El detalle dice qué falla. Es del aprovisionamiento, no de su cuenta. | |
central_no_disponible | No se puede llegar a la central ahora mismo. Reintente con espera creciente: su petición no tiene nada malo. | |
central_sin_respuesta | La central no contestó a tiempo. Mismo trato que el anterior, y la misma precaución: la escritura pudo llegar o no. | |
clase_de_servicio | Ese valor no es uno de los permisos de llamada que puede tener una extensión. | |
clave_sin_cuenta | La clave no está atada a ninguna cuenta. | |
de_otra_cuenta | Es de otra cuenta — o no existe en la suya. Los dos casos comparten código a propósito: distinguirlos revelaría si existe. | |
falta_credencial | No mandó ninguna clave. | |
garantia_no_cabe | No queda capacidad garantizada para lo que se pide. No es una avería: es lo que impide vender dos veces el mismo canal. El mensaje dice cuánto queda. | |
no_editable | Ese dato lo cambia su proveedor, no se toca desde aquí. | |
no_existe | No hay nada sobre lo que actuar. | |
protocolo_incorrecto | Esa ruta sólo habla WebSocket y usted la pidió por HTTP normal. | |
solo_lectura | Su clave es de solo lectura y esto escribiría. | |
ya_existe | Ya hay algo con ese nombre o ese número. Reintente con otro, no con la misma carga. |
| Código | Cuántas | Mensaje |
|---|---|---|
400 | 163 |
|
401 | 1 |
|
403 | 11 |
|
404 | 43 |
|
409 | 25 |
|
243 mensajes distintos en 289 puntos del fuente de la central. Derivado en cada compilación: un mensaje que cambia allí cambia aquí.
Hoy casi no hay límite de ritmo. El único es una espera de unos segundos entre intentos de abrir el teléfono del navegador. No hay cuota general, y preferimos decirlo a que usted lo descubra habiendo construido sobre una suposición. Sea razonable, y si está planeando algo pesado, avísenos antes para medirlo con usted en vez de después de usted.
Hasta dónde llega
| Área | Endpoints | Ejemplos |
|---|---|---|
| Buzones | 13 | GET /buzones POST /buzones DELETE /buzones/:buz |
| Extensiones | 13 | GET /extensiones POST /extensiones DELETE /extensiones/:ext |
| Colas | 12 | GET /colas POST /colas DELETE /colas/:cola |
| Música en espera | 12 | GET /discos POST /discos DELETE /discos/:disco |
| Grabaciones | 9 | GET /grabaciones PUT /grabaciones/:grabacion/categoria DELETE /grabaciones/:grb |
| Grupos de timbrado | 8 | GET /grupos POST /grupos DELETE /grupos/:grp |
| Menús de voz | 8 | GET /ivrs POST /ivrs DELETE /ivrs/:ivr |
| Turnos de guardia | 8 | GET /turnos POST /turnos DELETE /turnos/:turno |
| Salas de conferencia | 7 | GET /conferencias POST /conferencias DELETE /conferencias/:sala |
| Horarios | 7 | GET /horarios POST /horarios DELETE /horarios/:hor |
| Avisos a su sistema | 7 | GET /webhooks POST /webhooks DELETE /webhooks/:whk |
| Pasos de flujo programable | 6 | GET /pasos POST /pasos DELETE /pasos/:pso |
| Lo que dice cada línea | 5 | GET /guiones POST /guiones DELETE /guiones/:gui |
| Mensajes | 5 | GET /mensajes DELETE /mensajes/:msg GET /mensajes/:msg |
| Rutas de entrada | 5 | GET /rutas POST /rutas DELETE /rutas/:ruta |
| Alias marcables | 4 | GET /alias POST /alias DELETE /alias/:als |
| Recordatorios de cita | 4 | GET /citas POST /citas DELETE /citas/:cita |
| Sus contactos | 4 | GET /contactos POST /contactos DELETE /contactos/:con |
| Chat unido a la voz | 4 | GET /conversaciones GET /conversaciones/:cnv POST /conversaciones/:cnv/cerrar |
| Aparatos | 4 | DELETE /dispositivos/:disp POST /dispositivos/:disp/estado POST /dispositivos/:disp/provision |
| Expedientes de llamada malintencionada | 4 | GET /expedientes POST /expedientes GET /expedientes/:exp |
| Reglas de grabación | 4 | GET /grabacion/decidir GET /grabacion/reglas PUT /grabacion/reglas |
| Registro de llamadas | 4 | GET /llamadas GET /llamadas/:llamada GET /llamadas/csv |
| Números | 4 | GET /numeros DELETE /numeros/:numero/aviso-cambio GET /numeros/:numero/aviso-cambio |
| Líneas simultáneas | 3 | GET /canales GET /canales/episodios PUT /canales/modo |
| Feriados | 3 | GET /feriados POST /feriados DELETE /feriados/:fer |
| Historial de cambios y deshacer | 3 | GET /historial GET /historial/:cambio POST /historial/:cambio/revertir |
| Lista negra | 3 | GET /lista-negra POST /lista-negra DELETE /lista-negra/:neg |
| Ventanas de mantenimiento | 3 | GET /mantenimientos POST /mantenimientos POST /mantenimientos/:mnt/cerrar |
| Su cuenta y su estado | 2 | GET / PATCH / |
| Directorio | 2 | GET /directorio GET /directorio/buscar |
| Enlaces para compartir | 2 | GET /enlaces DELETE /enlaces/:token |
| Otras | 1 | GET /guiones/claves |
| Llamadas aparcadas | 1 | GET /aparcadas |
| Quién llama, y de qué | 1 | GET /contexto |
| Cuánto costaría una llamada | 1 | GET /cotizar-llamada |
| A dónde se puede mandar una llamada | 1 | GET /destinos |
| Qué tan alcanzables están sus aparatos | 1 | GET /disponibilidad |
| Estado de cuenta | 1 | GET /estado-cuenta |
| El canal en vivo | 1 | POST /eventos/ticket |
| Llamadas en curso | 1 | GET /llamadas-en-curso |
| Llamar con un clic | 1 | POST /llamar |
| Operadora | 1 | PUT /operadora |
| A dónde llama esta casa | 1 | GET /paises |
| Plantillas de arranque | 1 | POST /plantilla |
| Qué se puede marcar | 1 | GET /politica-salida |
| Que la central lo llame y le reproduzca algo | 1 | POST /probar-audio |
| Probar dónde caería una llamada | 1 | GET /probar-entrada |
| Probar una saliente sin cursarla | 1 | GET /probar-salida |
| Saldo | 1 | GET /saldo |
| Llamadas que nadie devolvió | 1 | GET /sin-devolver |
| Unir dos números de fuera | 1 | POST /unir |
| Quién se salta la fila | 1 | GET /vips |
| El teléfono en el navegador | 1 | POST /webphone/sesion |
269 endpoints en total, leídos de la propia central el 2026-09-04.
Esta tabla es un resumen. La lista que no puede quedarse vieja es la que la central genera sobre sí misma: GET /api.
Cada endpoint, uno a uno
Leído del propio enrutador de la central, así que no puede describir una ruta que no exista ni olvidarse de una que sí. Aquí sólo está el ámbito de su cuenta: las rutas de aprovisionamiento son del portal y a usted no se le entrega una clave que llegue a ellas.
| Qué hace | Qué hace | Ejemplo |
|---|---|---|
GET /guiones/claves | Qué frases admite un guion | |
GET / | por la API | |
PATCH / | Editar la ficha (el cliente, sus datos; plan y límites, el portal)por la API | |
GET /alias | por la API | |
POST /alias | por la API | |
DELETE /alias/:als | por la API | |
PATCH /alias/:als | por la API | |
GET /aparcadas | Las llamadas aparcadas ahora mismo (#60)por la API | verlo |
GET /buzones | llamada real | |
POST /buzones | llamada real | |
DELETE /buzones/:buz | llamada real | |
GET /buzones/:buz | llamada real | |
PATCH /buzones/:buz | Saludo, correo, transcripción, duración máximapor la API | |
GET /buzones/:buz/mensajes | por la API | |
PUT /buzones/:buzon/clave | Poner o quitar la clave del buzón (#10)banco de pruebas | |
GET /buzones/:buzon/ocupacion | Cuántos mensajes hay y cuántos caben (#14)banco de pruebas | |
GET /buzones/:buzon/papelera | Lo borrado que todavía se puede recuperar (#15)banco de pruebas | |
POST /buzones/:buzon/papelera/:mensaje/recuperar | Deshacer un borrado (#15)banco de pruebas | |
GET /buzones/:buzon/saludos | Los saludos del buzón, por motivobanco de pruebas | |
POST /buzones/:buzon/saludos | Poner el saludo de un motivo (normal, ocupado, vacaciones…)banco de pruebas | |
DELETE /buzones/:buzon/saludos/:saludo | banco de pruebas | |
GET /canales | por la API | |
GET /canales/episodios | por la API | |
PUT /canales/modo | por la API | |
GET /citas | por la API | |
POST /citas | Programar un recordatorio de cita por teléfonopor la API | verlo |
DELETE /citas/:cita | por la API | verlo |
GET /citas/:cita | por la API | verlo |
GET /colas | por la API | verlo |
POST /colas | Crear una cola de espera con agentespor la API | verlo |
DELETE /colas/:cola | por la API | |
GET /colas/:cola | por la API | verlo |
PUT /colas/:cola | por la API | verlo |
GET /colas/:cola/callbacks | Las devoluciones de llamada pedidaspor la API | verlo |
GET /colas/:cola/estado | Cuánta gente espera, quién está de turno y cuánto se tardapor la 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)por la API | |
DELETE /colas/:cola/miembros/:miembro | por la 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)por la API | |
GET /conferencias | por la API | |
POST /conferencias | Crear una sala con número y clavepor la API | verlo |
DELETE /conferencias/:sala | por la API | |
GET /conferencias/:sala | por la API | verlo |
PUT /conferencias/:sala | Cambiar la sala (las claves se cambian, no se leen)por la API | |
GET /conferencias/:sala/historial | Quién estuvo y cuántopor la API | |
POST /conferencias/:sala/invitar | Llamar a alguien y meterlo en la salapor la API | |
GET /contactos | por la API | |
POST /contactos | Alta o importación masivapor la API | |
DELETE /contactos/:con | por la API | |
PUT /contactos/:contacto/vip | Marcar o quitar el VIP de un contacto | |
GET /contexto | Quién llama y de qué habló la última vezpor la API | |
GET /conversaciones | banco de pruebas | |
GET /conversaciones/:cnv | banco de pruebas | |
POST /conversaciones/:cnv/cerrar | banco de pruebas | |
POST /conversaciones/:cnv/turnos | banco de pruebas | |
GET /cotizar-llamada | Cuánto costaría llamar a ese número, antes de marcarlopor la API | |
GET /destinos | Qué destinos se pueden elegir en esta cuentallamada real | |
GET /directorio | Quién sale en el directorio por nombrebanco de pruebas | |
GET /directorio/buscar | A quién encontraría el directorio con esas teclasbanco de pruebas | |
GET /discos | por la API | |
POST /discos | por la API | |
DELETE /discos/:disco | por la API | |
GET /discos/:disco | por la API | |
PATCH /discos/:disco | por la API | |
GET /discos/:disco/estadisticas | por la API | |
GET /discos/:disco/frases | por la API | |
PUT /discos/:disco/frases | por la API | |
DELETE /discos/:disco/frases/:frase | por la API | |
PUT /discos/:disco/pistas | por la API | |
DELETE /discos/:disco/pistas/:pista | por la API | |
GET /discos/:disco/probar | por la API | |
GET /disponibilidad | Cuánto tiempo estuvo arriba cada extensiónpor la API | |
DELETE /dispositivos/:disp | Revocar una credencialaparato real | |
POST /dispositivos/:disp/estado | Suspender o reactivar un dispositivoaparato real | |
POST /dispositivos/:disp/provision | Emitir un token para configurar la app sin teclear la clavepor la API | |
POST /dispositivos/:disp/rotar | Cambiar la clave de un dispositivoaparato real | |
GET /enlaces | banco de pruebas | |
DELETE /enlaces/:token | Revocar un enlace compartido por errorbanco de pruebas | |
GET /estado-cuenta | por la API | |
POST /eventos/ticket | Ticket para mirar el canal de eventos en vivo (sin teléfono)por la API | verlo |
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 | por la API | |
POST /extensiones | Alta de extensión (crea buzón y credencial)por la API | |
DELETE /extensiones/:ext | por la API | |
GET /extensiones/:ext | por la API | |
PATCH /extensiones/:ext | por la API | |
POST /extensiones/:ext/dispositivos | Añadir un dispositivo (celular, computadora…)por la API | |
POST /extensiones/:ext/no-molestar | por la API | |
GET /extensiones/:ext/reglas | llamada real | |
PUT /extensiones/:ext/reglas | Sígueme, desvío, no molestar y destino de fallopor la 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 | por la API | |
GET /feriados | por la API | |
POST /feriados | Feriado propio o excepción a uno nacionalpor la API | |
DELETE /feriados/:fer | por la API | |
GET /grabacion/decidir | ¿Se grabaría esta llamada? Y con qué avisopor la API | |
GET /grabacion/reglas | por la API | |
PUT /grabacion/reglas | Qué se graba y cuánto se guardapor la API | |
DELETE /grabacion/reglas/:regla | por la API | |
GET /grabaciones | banco de pruebas | |
PUT /grabaciones/:grabacion/categoria | cliente | prospecto | interno, o nada (#68) | |
DELETE /grabaciones/:grb | banco de pruebas | |
GET /grabaciones/:grb | Ficha: transcripción, resumen, acuerdos y hablantesaún sin ejercitar | |
GET /grabaciones/:grb/accesos | Quién ha escuchado esta grabaciónbanco de pruebas | |
POST /grabaciones/:grb/analizar | Volver a transcribir y resumiraún sin ejercitar | |
GET /grabaciones/:grb/audio | El audio (queda auditado)banco de pruebas | |
POST /grabaciones/:grb/enlace | Enlace firmado para compartir sin dar acceso a la cuentabanco de pruebas | |
GET /grabaciones/buscar | Buscar por lo que se dijo dentro de las llamadasbanco de pruebas | |
GET /grupos | por la API | |
POST /grupos | por la API | |
DELETE /grupos/:grp | por la API | |
GET /grupos/:grp | por la API | |
PUT /grupos/:grp | por la API | |
POST /grupos/:grp/miembros | por la API | |
DELETE /grupos/:grp/miembros/:miembro | por la API | |
GET /grupos/:grp/orden | En qué orden sonaría ahora mismopor la API | |
GET /guiones | llamada real | |
POST /guiones | Los textos que dice una líneallamada real | |
DELETE /guiones/:gui | llamada real | |
GET /guiones/:gui | llamada real | |
PATCH /guiones/:gui | Cambiar textos, nombre o voz declaradallamada real | |
GET /historial | Qué cambió en esta cuenta, quién y cuándopor la API | verlo |
GET /historial/:cambio | por la API | verlo |
POST /historial/:cambio/revertir | Deshacer un cambio de configuraciónpor la API | verlo |
GET /horarios | por la API | |
POST /horarios | por la API | |
DELETE /horarios/:hor | por la API | |
GET /horarios/:hor | por la API | |
PUT /horarios/:hor | por la API | |
GET /horarios/:hor/estado | ¿Abierto ahora? Y por quépor la API | |
POST /horarios/:hor/manual | Forzar abierto o cerrado, con vuelta automáticapor la API | |
GET /ivrs | llamada real | |
POST /ivrs | Crear un menú (detecta bucles al guardar)llamada real | |
DELETE /ivrs/:ivr | llamada real | |
GET /ivrs/:ivr | llamada real | |
PUT /ivrs/:ivr | llamada real | |
GET /ivrs/:ivr/guion | El texto exacto que se va a decirpor la API | |
DELETE /ivrs/:ivr/opciones/:tecla | llamada real | |
PUT /ivrs/:ivr/opciones/:tecla | llamada real | |
GET /lista-negra | por la API | |
POST /lista-negra | Bloquear un número entrantepor la API | |
DELETE /lista-negra/:neg | por la API | |
GET /llamadas | llamada real | |
GET /llamadas-en-curso | Las llamadas del inquilino ahora mismo (vista de operadora)por la API | verlo |
GET /llamadas/:llamada | llamada real | |
GET /llamadas/csv | Exportar el CDRllamada real | |
GET /llamadas/resumen | Totales, atención y repartollamada real | |
POST /llamar | Timbrar a la extensión y conectarla con un destinollamada real | |
GET /mantenimientos | por la API | verlo |
POST /mantenimientos | Avisar a quien llame de que hay un mantenimiento en cursopor la API | verlo |
POST /mantenimientos/:mnt/cerrar | por la API | verlo |
GET /mensajes | Bandeja de toda la cuentapor la API | |
DELETE /mensajes/:msg | por la API | |
GET /mensajes/:msg | por la API | |
GET /mensajes/:msg/audio | por la API | |
POST /mensajes/:msg/leido | por la API | |
GET /numeros | por la API | |
DELETE /numeros/:numero/aviso-cambio | Apagar el aviso de cambio y devolver la línea a su destinoaún sin ejercitar | |
GET /numeros/:numero/aviso-cambio | Estado del aviso de cambio de númeroaún sin ejercitar | |
POST /numeros/:numero/aviso-cambio | Anunciar que este número cambió y decir el nuevoaún sin ejercitar | |
PUT /operadora | A dónde va el cero (#109)por la API | verlo |
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)por la API | |
GET /politica-salida | por la API | |
POST /probar-audio | Llamarte y reproducirte una cadena de audio — la prueba de verdadllamada real | |
GET /probar-entrada | A dónde iría una llamada ahora mismollamada real | |
GET /probar-salida | Simular una salida sin cursarlallamada real | |
GET /rutas | llamada real | |
POST /rutas | Qué hace una llamada que entra por un númerollamada real | |
DELETE /rutas/:ruta | llamada real | |
GET /rutas/:ruta | llamada real | |
PATCH /rutas/:ruta | llamada real | |
GET /saldo | banco de pruebas | |
GET /sin-devolver | Las perdidas que nadie ha devuelto, agrupadas por número (#67) | |
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 unirlosllamada real | |
GET /vips | Quién se salta la fila de la cola (#61) | |
GET /webhooks | por la API | |
POST /webhooks | por la API | |
DELETE /webhooks/:whk | por la API | |
PATCH /webhooks/:whk | por la API | |
GET /webhooks/:whk/entregas | por la API | |
POST /webhooks/:whk/probar | Mandar un evento de pruebapor la API | |
POST /webhooks/:whk/rotar | por la API | |
POST /webphone/sesion | Registrar el navegador como teléfono de una extensiónpor la API |
Ejemplos grabados
No están tecleados. Se grabaron de una ejecución real contra este API, en una cuenta de usar y tirar que después se borró — petición, estado y respuesta, tal como viajaron. Los identificadores de cuenta y de objeto se sustituyen por marcadores; lo demás no se toca. Un ejemplo escrito demuestra lo que creía quien lo escribió; uno grabado demuestra lo que hizo la central.
20 de 204 rutas llevan ejemplo grabado, de la corrida del 2026-09-04. Las demás están listadas arriba pero todavía no se han ejercitado así — preferimos enseñarle la cifra a que usted dé por hecho que son todas.
GET /inquilinos/:inquilino/aparcadas 200
Respuesta
{
"plazas": []
}
DELETE /inquilinos/:inquilino/citas/:id 200
Respuesta
{
"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
Respuesta
{
"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
Petición
{
"numero": "50688889999",
"cuando": "2026-09-04T21:11:53.507Z",
"texto": "ensayo"
}
Respuesta
{
"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
Respuesta
[]
GET /inquilinos/:inquilino/colas/:id 200
Respuesta
{
"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
Petición
{
"nombre": "Ya editada"
}
Respuesta
{
"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
Respuesta
[
{
"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
Petición
{
"nombre": "Soporte",
"estrategia": "todos"
}
Respuesta
{
"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
Respuesta
{
"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
Petición
{
"nombre": "Sala 1",
"clave": "4321"
}
Respuesta
{
"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
Petición
{}
Respuesta
{
"ticket": "eyJ1IjoicGFuZWwiLCJpIjoiaW5xX3JhN3J0YnYycXA0YyIsInAiOiJldmVudG9zIiwiZXhwIjoxNzg4NTgxNTE1NTcxfQ.bLihoh7EfWP7ZcVGQcPEhfGcHYAn1Y8DmwK4f552uIQ",
"eventos": [
"wss://<puerta>:<puerto>/eventos"
],
"inquilino": "<cuenta>"
}
POST /inquilinos/:inquilino/historial/:id/revertir 201
Petición
{}
Respuesta
{
"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
Respuesta
{
"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
Respuesta
{
"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
Respuesta
{
"activas": []
}
POST /inquilinos/:inquilino/mantenimientos/:id/cerrar 201
Petición
{}
Respuesta
{
"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
Respuesta
[
{
"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
Petición
{
"motivo": "ensayo",
"minutos": 5
}
Respuesta
{
"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
Petición
{
"destino": "buzon"
}
Respuesta
{
"operadora": null
}
DELETE /inquilinos/:inquilino 200
Respuesta
{
"borrado": "<cuenta>"
}
POST /inquilinos 201
Petición
{
"nombre": "Ejercicio API 2026-09-04T20:11:51"
}
Respuesta
{
"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
}
}
Sesiones: el navegador nunca lleva una clave permanente
Una credencial corta, con techo de 60 minutos, que no puede fabricar una permanente. Éste es el contrato si usted es quien construye el botón.
- Sólo el portal puede emitirla. Emitir una sesión necesita una clave de aprovisionamiento, porque sólo el portal puede afirmar que detrás de la petición hay un cliente con la sesión iniciada. VOICE no sabe de contraseñas de cliente y no tiene por qué saberlo.
- Nunca nace sin caducidad. Si nadie pide una duración, se le pone una. Un ámbito que existe para caducar y que pudiera nacer eterno es peor que no tenerlo, porque se confía en él.
- Pedir más tiempo no sirve. Hay un techo duro. Que quien llama pida ocho horas no hace segura la credencial.
- No puede ascender. La gestión de claves vive entera detrás del ámbito de aprovisionamiento, así que una sesión no puede fabricarse una clave permanente. Eso se impone en el enrutador, antes de cualquier manejador.
- Se puede cerrar antes de tiempo. El identificador vuelve al emitirla, justamente para que usted pueda revocarla antes de que le toque.
Avisos a su sistema (webhooks)por la API
Sus sistemas se enteran de lo que pasó en vez de preguntarlo cada pocos segundos. 28 eventos, firmados, con reintento, y ninguno se cae en silencio.
x-pbx-evento: llamada.entrante
x-pbx-marca: 1755300000
x-pbx-firma: <hex>
{ "evento": "llamada.entrante", "inquilino": "…", "cuando": "…", "datos": { … } }
Cada entrega va firmada: la firma cubre la marca de tiempo y el cuerpo exacto que usted recibió, así que verifíquela contra los bytes en crudo y no contra una copia vuelta a serializar. El secreto se enseña una sola vez al crear la suscripción, y se puede rotar sin parar las entregas.
Una entrega que falla se reintenta a los 10 · 30 · 60 · 300 · 900 · 3600 segundos, y cada intento tiene 10 segundos. Una suscripción que sigue fallando se pausa tras 20 fallos seguidos, en vez de caerse en silencio — y usted puede ver todos los intentos.
Los eventos
| Evento | Cuándo salta |
|---|---|
llamada.entrante | Está entrando una llamada, con el número, la ruta y hacia dónde va. |
llamada.contestada | Alguien la atendió. |
llamada.terminada | Terminó, con la duración y cómo acabó. |
llamada.perdida | Timbró y no la contestó nadie. |
buzon.mensaje | Alguien dejó un mensaje, con su transcripción. |
grabacion.lista | Una grabación terminó de procesarse y se puede descargar. |
grabacion.analizada | Su transcripción, sus hablantes y su resumen están listos. |
saldo.bajo | El saldo se está acabando. |
tope.alcanzado | Se alcanzó un tope de gasto y las llamadas se pararon. |
registro.anomalo | Un registro de aparato tiene mala pinta — varias credenciales desde el mismo sitio, por ejemplo. |
canales.al_limite | Está cerca del tope de sus líneas simultáneas. |
cita.confirmada | Alguien confirmó su cita con el teclado. |
cita.reagendar | Alguien pidió otra fecha. Es una petición para una persona, no algo que la central vaya a resolver sola. |
cita.cancelada | Alguien canceló su cita. |
desvio.activado | Se activó un desvío. |
desvio.recordatorio | Un desvío sigue activado. El desvío olvidado es la avería fantasma más común de una central. |
buzon.lleno | Un buzón está lleno — de aquí en adelante se perderían mensajes. |
buzon.casi_lleno | Un buzón se está llenando, cuando todavía hay tiempo de hacer algo. |
cola.vacia | No hay nadie de turno en una cola. |
cola.callback | Alguien pidió que lo llamaran en vez de esperar. |
conferencia.entra | Alguien entró en una sala. |
conferencia.sale | Alguien salió de una sala. |
canales.desalojo | Se devolvió una línea prestada para proteger la garantía de alguien. |
emergencia.marcada | Alguien marcó el número de emergencias desde una extensión. La llamada no se retrasa nunca por esto. |
fax.entrante | Se detectó tono de fax en una llamada entrante. |
supervision.iniciada | Alguien escuchó, susurró o entró en una llamada. Es lo que separa una herramienta de supervisión de un pinchazo: poder responder «quién escuchó esta llamada, y cuándo». |
fraude.sospecha | Un patrón de comportamiento que parece fraude. Avisa; no corta. |
filtro.insistencia | Un número está llamando demasiadas veces. |
El canal en vivollamada real
Los avisos viajan en lotes y llegan en segundos. Hay cosas que tienen que estar en pantalla ya: una luz que dice que un compañero está hablando no puede llegar quince segundos tarde.
- Qué lleva. Las llamadas según ocurren, los mensajes nuevos y el estado de la luz de cada extensión — que es lo que hace que un panel de luces en una pantalla esté vivo de verdad.
- Es de sólo lectura.por la API Se puede abrir un pase para el canal sin entregar un teléfono: mirar lo que pasa no debería exigir una credencial que además pueda cambiar cosas.
- No sustituye a los avisos. El canal en vivo es para una pantalla que alguien está mirando. Si importa que su sistema se entere, use un aviso: reintenta, y no depende de que haya un socket abierto.
Referencia
Cómo se leen las insignias
Cada capacidad de esta página lleva una insignia que dice cómo se ha comprobado. Publicamos también las que todavía no se han ejercitado, marcadas como tales, porque que lo descubra usted es peor.
| Insignia | Qué hace | Cuántas |
|---|---|---|
| llamada real | Alguien hizo una llamada de verdad e hizo lo que aquí dice. | 13 |
| llamada de prueba | Una llamada real contra la central viva, marcando teclas de verdad — pero sin voz y sin nadie escuchando. Todo lo que dependa de que quien llama hable sigue sin ejercitarse. | 3 |
| aparato real | Probado con un aparato real registrándose. | 1 |
| por la API | Ejercitado por la API pública. | 46 |
| banco de pruebas | Ejercitado en el banco de pruebas, contra una copia desechable de la base. | 13 |
| aún sin ejercitar | El código está y carga, pero nadie lo ha hecho correr todavía. | 36 |
112 capacidades, contadas desde la central el 2026-08-19.
La insignia es de una capacidad, no de una fila suelta: donde una capacidad cubre varios códigos, todos enseñan el nivel del grupo. Eso significa que una insignia puede quedarse CORTA respecto a lo que de verdad se ha probado — nunca larga, que es la única dirección en la que estamos dispuestos a equivocarnos en una página que usted lee como una promesa.
Glosario
Las palabras que usa una central telefónica y no usa ninguna otra cosa.
| Término | Qué hace |
|---|---|
| Extensión | Una persona o un puesto dentro de su empresa, con un número corto que marcan los demás. No es un teléfono: una extensión puede tener varios aparatos. |
| Número (DID) | Lo que marca la gente de fuera para llegar a usted. Un número apunta a algo —una extensión, un grupo, un menú— y eso lo decide usted. |
| Grupo de timbrado | Varias extensiones timbrando por la misma llamada. Es sencillo, y no tiene ni idea de quién está esperando ni desde cuándo. |
| Cola | Un grupo que además lleva la fila. Sabe la posición, la espera medida y quién está de turno, y puede ofrecer una devolución de llamada. |
| Menú de voz (IVR) | «Marque 1 para ventas». Un menú puede llevar menús dentro, y quien llama siempre puede volver atrás o llegar a una persona. |
| Línea simultánea (canal) | Una conversación en curso. Diez canales son diez llamadas a la vez, tenga los teléfonos que tenga. |
| Registro de llamada (CDR) | Una fila por llamada: quién, cuándo, cuánto duró, por qué ruta y cómo acabó. Es de lo que se construye una factura. |
| Luz de ocupado | El indicador que dice si un compañero está libre, timbrando o hablando, sin tener que llamarlo para averiguarlo. |
| Tonos del teclado (DTMF) | Los pitidos que hace un teléfono al pulsar una tecla. Son la forma en que le oyen un menú, un buzón y todos los códigos de esta página. |
| Sígueme | Su extensión timbra también en su celular, o en su lugar. Es la función más usada de cualquier central pequeña. |
| Aparcar | Dejar una llamada esperando en una plaza numerada para que cualquiera, desde cualquier teléfono, la recoja marcando esa plaza. |
| Transferencia atendida | Hablar con su compañero antes de pasarle la llamada, con la posibilidad de recuperarla. |