API Reference

vPBX Panel API

Inicia llamadas Click2Call desde cualquier aplicación. Obtén un token, haz una petición POST y la centralita conecta al agente con el destino.

Base URL: https://vpbx-panel.deveco.it/ Auth: Bearer JWT Token válido: 24 horas Formato: JSON

Visión general

La API permite iniciar llamadas Click2Call desde cualquier sistema externo. El flujo es simple: la centralita llama primero al teléfono del agente (la extensión indicada) y, cuando éste descuelga, conecta automáticamente con el número de destino.

Todas las peticiones a la API requieren un Bearer token JWT que se obtiene con usuario y contraseña. Los tokens caducan a las 24 horas.

Todas las peticiones y respuestas usan Content-Type: application/json.

Inicio rápido

1
Obtén un token

Llama a POST /api/auth/token con tus credenciales.

2
Inicia la llamada

Llama a POST /api/call incluyendo el token en la cabecera Authorization.

3
El teléfono suena

La centralita llama al softphone de la extensión. Al descolgar, conecta con el destino.

4
Renueva el token cuando expire

Cuando recibas 401 Token expirado, repite el paso 1.

Ejemplo completo

bash · curl
# 1. Obtener token
TOKEN=$(curl -s -X POST https://tu-servidor/api/auth/token \
  -H "Content-Type: application/json" \
  -d '{"username":"admin","password":"tu_contraseña"}' \
  | grep -o '"access_token":"[^"]*' | cut -d'"' -f4)

# 2. Iniciar llamada
curl -X POST https://tu-servidor/api/call \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOKEN" \
  -d '{"extension":"201","destination":"666123456"}'

Autenticación

POST /api/auth/token Sin autenticación

Devuelve un Bearer token JWT válido durante 24 horas. No requiere ninguna cabecera de autenticación previa.

Parámetros del cuerpo

CampoTipoDescripción
username requerido string Nombre de usuario
password requerido string Contraseña

Petición

curl
curl -X POST https://tu-servidor/api/auth/token \
  -H "Content-Type: application/json" \
  -d '{"username": "admin", "password": "tu_contraseña"}'
javascript
const res = await fetch('/api/auth/token', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ username: 'admin', password: 'tu_contraseña' })
});
const { access_token } = await res.json();

Respuesta

200 OK
{ "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2...", "token_type": "Bearer", "expires_in": 86400 }
El token caduca a las 24 horas. Cuando la API devuelva 401 Token expirado, solicita uno nuevo con este endpoint.

Usar el token

Incluye el token en la cabecera Authorization de cada petición:

cabecera HTTP
Authorization: Bearer ey...
Guarda el token y reutilízalo en todas las peticiones hasta que expire. No es necesario pedir un token nuevo en cada llamada.

Iniciar llamada

POST /api/call 🔒 Requiere token

Inicia una llamada Click2Call. La centralita marca al softphone de la extension indicada. Cuando el agente descuelga, conecta automáticamente con destination.

Parámetros del cuerpo

CampoTipoDefaultDescripción
extension requerido string Extensión SIP del agente que recibirá la llamada primero (ej. "201")
destination requerido string Número a marcar. Espacios, guiones y paréntesis se eliminan automáticamente; se conserva +.
timeout opcional number 30 Segundos que suena el softphone del agente antes de cancelar
autoAnswer opcional boolean false Si true, el softphone contesta automáticamente sin que el agente descuelgue

Petición

curl
curl -X POST https://tu-servidor/api/call \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <token>" \
  -d '{
    "extension":   "201",
    "destination": "666 123 456",
    "timeout":     30
  }'
javascript
const res = await fetch('/api/call', {
  method: 'POST',
  headers: {
    'Content-Type':  'application/json',
    'Authorization': `Bearer ${access_token}`
  },
  body: JSON.stringify({
    extension:   '201',
    destination: '666123456'
  })
});
const data = await res.json();

Respuesta exitosa

200 OK
{ "success": true, "variables": { "callId": "abc-123-def-456" } }
El campo callId identifica la llamada en el sistema. Guárdalo si necesitas referenciarlo posteriormente.

Códigos de error

Todas las respuestas de error incluyen un campo message con la descripción del problema.

4xx — Ejemplo de error
{ "success": false, "message": "Token expirado" }
CódigoMensajeQué hacer
400 username y password son requeridos Incluye ambos campos en el body de /api/auth/token
400 Faltan parámetros: extension y destination son requeridos Incluye extension y destination en el body de /api/call
401 Credenciales inválidas Comprueba usuario y contraseña
401 Token requerido Añade la cabecera Authorization: Bearer <token>
401 Token expirado Solicita un token nuevo con POST /api/auth/token
401 Token inválido El token está malformado. Solicita uno nuevo.
500 Error al iniciar la llamada Error interno o de conexión con la centralita. Inténtalo de nuevo o contacta con soporte.