Ir al contenido

Znuny Web Services – REST API

En esta guía detallada aprenderá cómo activar, configurar e integrar la Znuny REST API (parte del Generic Interface) en sus propias aplicaciones.

Znuny pone a disposición su Generic Interface a través de servicios web REST y SOAP. La REST API se comunica mediante HTTP(S) con formato de datos JSON y permite:

  • Gestión de tickets: Crear, obtener, modificar, eliminar.
  • Gestión de artículos: Añadir artículos, gestionar adjuntos.
  • Historial y búsqueda: Consultar el historial de tickets y realizar consultas de búsqueda complejas.

Nota importante: Una instalación estándar no contiene servicios web preconfigurados; estos deben crearse manualmente en el área de administración bajo „Procesos y Automatización → Web Services“.

  1. Navegue en el área de administración a SysConfigGenericInterface.Transport y seleccione REST (HTTP).
  2. En AdminGenericInterfaceTransportHTTPREST configure los tiempos de espera (timeouts), el Host-Header y el nivel de depuración (Debug-Level).
  3. En GenericInterface.Operation cree las operaciones deseadas (p. ej., TicketCreate, TicketSearch, TicketGet, TicketUpdate, TicketDelete, TicketHistoryGet) y actívelas.
  • URL base TicketCreate
  • Autenticación
    • Cookies de sesión de Znuny
    • API-Keys / Token (configurables vía SysConfig)
    • ¡Utilice siempre HTTPS para transferencias seguras!

3. Endpoints y métodos HTTP (Resumen detallado)

Sección titulada «3. Endpoints y métodos HTTP (Resumen detallado)»

Para cada endpoint encontrará aquí una representación detallada de los parámetros, posibles respuestas y ejemplos prácticos.

URL: /Webservice/<ServiceName>/TicketCreate Método: POST Descripción: Crea un nuevo ticket y genera simultáneamente un primer artículo.

ParámetroTipoObligatorioDescripción
SessionIDIntegerSí¹Session-ID o UserLogin+Password
UserLoginStringSí²Login del agente (en combinación con Password)
PasswordStringSí²Contraseña (en combinación con UserLogin)
Ticket.TitleStringAsunto del ticket
Ticket.QueueStringNombre de la cola o Ticket.QueueID
Ticket.StateStringEstado inicial (p. ej., new)
Ticket.PriorityStringPrioridad (p. ej., 3 normal)
Ticket.CustomerUserStringE-mail o login del cliente
Article.SubjectStringAsunto del primer artículo
Article.BodyStringContenido del primer artículo
Article.MimeTypeStringtext/plain o text/html

¹ Se requiere SessionID O UserLogin+Password. ² Si no hay un token de SessionID disponible.

Ejemplo de Request: TicketSearch

Ejemplo de respuesta: TicketGet

URL: /Webservice/<ServiceName>/TicketSearch Método: GET Descripción: Busca tickets basándose en diversos criterios de filtro.

ParámetroTipoObligatorioDescripción
UserLogin, PasswordString,StringSí¹Credenciales del agente o SessionID²
SessionIDIntegerSí²Token para sesiones autenticadas
TitleString/String[]NoBúsqueda con comodines en el título (%Pedido%)
TicketNumberString/String[]NoNúmero(s) de ticket
QueueIDsInteger[]NoIDs de las colas
StatesString[]NoEstados (new, open, …)
StateTypeString/String[]NoCategoría Open/Closed
DynamicField_Name.OpMixedNoCampos dinámicos con operador (Equals, Like, GreaterThan …)

¹ Se requiere UserLogin+Password O SessionID. ² Si no se transmite un par de login.

Ejemplo de Request: TicketUpdate

Ejemplo de respuesta: TicketDelete

URL: /Webservice/<ServiceName>/TicketGet Método: GET Descripción: Obtiene datos detallados del ticket, incluyendo artículos, adjuntos y campos dinámicos.

ParámetroTipoObligatorioDescripción
UserLogin, PasswordString,StringSí¹Credenciales del agente o SessionID²
SessionIDIntegerSí²Token para sesiones autenticadas
TicketIDString/String[]Uno o varios Ticket-IDs (separados por coma o array)
DynamicFieldsBoolean (0/1)No1 = Campos dinámicos en el resultado, estándar = 0
ExtendedBooleanNo1 = Metadatos extendidos (p. ej., FirstResponse)
AllArticlesBooleanNo1 = Devolver todos los artículos
ArticleLimitIntegerNoCantidad máx. de artículos devueltos
AttachmentsBooleanNo1 = Incrustar adjuntos en Base64
GetAttachmentContentsBooleanNo1 = Cargar también el contenido de los adjuntos
HTMLBodyAsAttachmentBooleanNo1 = Adjuntar versión HTML del artículo como adjunto

¹ Se requiere UserLogin+Password O SessionID. ² Si no se transmite un par de login.

Ejemplo de Request: TicketHistoryGet

Ejemplo de respuesta (abreviado): /Webservice/<ServiceName>/TicketCreate

URL: /Webservice/<ServiceName>/TicketUpdate Método: PUT Descripción: Actualiza campos de un ticket existente y puede crear opcionalmente un nuevo artículo.

ParámetroTipoObligatorioDescripción
SessionIDIntegerSí¹Token o UserLogin+Password²
TicketIDIntegerID del ticket a actualizar
Ticket.TitleStringNoNuevo título
Ticket.StateStringNoNuevo estado
Ticket.OwnerString/IDNoNuevo propietario
Ticket.PendingTimeHash / DiffNoNuevo tiempo de espera (pending)
Article.SubjectStringNoCrea un nuevo artículo
Article.BodyStringNoContenido del nuevo artículo
DynamicField…ArrayNoActualizar campos dinámicos
Attachment…ArrayNoAñadir nuevos adjuntos

¹ Se requiere SessionID O UserLogin+Password. ² Si no hay un token de SessionID disponible.

Ejemplo de Request: POST

Ejemplo de respuesta: new

URL: /Webservice/<ServiceName>/TicketDelete Método: DELETE Descripción: Elimina definitiva uno o varios tickets.

ParámetroTipoObligatorioDescripción
SessionIDIntegerSí¹Token o UserLogin+Password²
TicketIDString/ArrayUno o varios Ticket-IDs

Ejemplo de Request: 3 normal

Ejemplo de respuesta: text/plain

URL: /Webservice/<ServiceName>/TicketHistoryGet Método: GET Descripción: Obtiene el historial de uno o varios tickets.

ParámetroTipoObligatorioDescripción
SessionIDIntegerSí¹Token o UserLogin+Password²
TicketIDString/ArrayUno o varios Ticket-IDs

Ejemplo de Request: text/html

Definir nuevos recursos en el archivo WADL: /Webservice/<ServiceName>/TicketSearch

Alternativamente, puede definir operaciones mediante YAML: GET


  • Indicador de éxito: Success: 0|1
  • Mensaje de error: ErrorMessage en el JSON
  • Depuración: Establezca en el diálogo de transporte el Debug-Level en Debug → Las entradas de log serán visibles en la base de datos.

EscenarioDescripción
Automatización entre sistemasCrear tickets desde herramientas de monitoreo (Nagios, Zabbix)
Sincronización de datosActualizaciones por lotes de campos de ticket desde un CRM externo
Portales de autoservicioLos clientes crean sus propios tickets vía REST
Aplicaciones móvilesApps nativas iOS/Android se comunican vía REST

La Znuny REST API es flexible, eficiente y altamente extensible gracias al Generic Interface. Ya sea para una creación simple de tickets o una automatización de flujos de trabajo compleja, con unos pocos pasos en el área de administración y peticiones JSON estándar, podrá realizar integraciones fluidas en cualquier entorno de TI.


Para desarrolladores de Python, está disponible el paquete oficial pyznuny, que encapsula toda la Znuny REST API en una biblioteca sencilla y tipada. No necesita formular peticiones HTTP manualmente; pyznuny se encarga de la autenticación, la gestión de sesiones y la serialización de todos los parámetros.

Ventana de terminal
pip install pyznuny
from pyznuny import ZnunyClient
client = ZnunyClient(
url="https://znuny.example.com",
username="admin",
password="secreto"
)
# Crear ticket
ticket_id = client.ticket_create(
title="Servidor no accesible",
queue="Support",
state="new",
priority="3 normal",
customer_user="cliente@example.com",
article_subject="Informe inicial",
article_body="El servidor no responde desde las 08:00 horas.",
mime_type="text/plain"
)
print(f"Nuevo ticket creado: #{ticket_id}")
# Obtener ticket
ticket = client.ticket_get(ticket_id=ticket_id, all_articles=True)
print(ticket)
# Actualizar ticket
client.ticket_update(ticket_id=ticket_id, state="open", owner="max.muster")
MétodoDescripción
ticket_create()Crear nuevo ticket con primer artículo
ticket_get()Obtener detalles del ticket incl. artículos y adjuntos
ticket_search()Buscar tickets según filtros
ticket_update()Actualizar campos, estado, propietario y artículos
ticket_delete()Eliminar ticket definitivamente
ticket_history_get()Cargar historial completo de un ticket

Nota: pyznuny está disponible en PyPI y es mantenido activamente por Softoft.


Quien no solo quiera utilizar la Znuny REST API, sino automatizarla de forma inteligente, apuesta por el OpenTicketAI Runtime – una plataforma de IA on-premise que clasifica, prioriza y redirige los tickets entrantes de forma totalmente automática.

┌─────────────────────────┐
E-mails entrantes ────► │ Znuny (Generic Interface / REST API) │
└────────────┬────────────┘
│ Webhook / Polling
┌─────────────────────────┐
│ OpenTicketAI Runtime │
│ (Docker, On-Premise) │
│ ┌───────────────────┐ │
│ │ Modelo IA (NLP) │ │
│ └───────────────────┘ │
└────────────┬────────────┘
│ otai-znuny-znuny Connector
┌─────────────────────────┐
│ Znuny REST API │
│ TicketUpdate / Routing │
└─────────────────────────┘

El Runtime se ejecuta completamente de forma local en su centro de datos – ningún dato de ticket abandona su infraestructura.

Instale la biblioteca central de OpenTicketAI junto con el paquete de conector específico para Znuny otai-znuny-znuny:

Ventana de terminal
pip install open-ticket-ai otai-hf-local otai-znuny-znuny
PaqueteFunción
open-ticket-aiNúcleo de OpenTicketAI: orquestación, pipelines, config
otai-hf-localModelos de IA locales vía Hugging Face (On-Premise)
otai-znuny-znunyConector: lee y escribe tickets vía Znuny REST

Cree un archivo config.yaml y conecte el Runtime con su instancia de Znuny:

connector:
type: znuny
url: https://znuny.example.com
username: otai-bot
password: "${ZNUNY_PASSWORD}"
model:
provider: hf-local
model_name: softoft/ticket-classifier-de
routing:
default_queue: "Unclassified"
rules:
- category: "Red"
queue: "Infraestructura TI"
priority: "4 high"
- category: "Facturación"
queue: "Contabilidad"
priority: "3 normal"

8.4 Proceso de procesamiento automático de tickets

Sección titulada «8.4 Proceso de procesamiento automático de tickets»
  1. El ticket entra en Znuny (vía e-mail o REST TicketCreate)
  2. El conector consulta mediante TicketSearch nuevos tickets en el intervalo configurado
  3. El modelo de IA analiza el asunto y el texto del artículo con procesamiento de lenguaje natural (NLP)
  4. Se determina el resultado de la clasificación (categoría, prioridad, cola sugerida)
  5. TicketUpdate vía REST establece la cola, la prioridad y un artículo interno opcional
  6. El ticket llega de forma totalmente automática al equipo correcto – sin triaje manual

8.5 Ventajas frente a la integración REST manual

Sección titulada «8.5 Ventajas frente a la integración REST manual»
CaracterísticaIntegración REST manualOpenTicketAI + Connector
Clasificación❌ Manual✅ Totalmente automática (IA)
Protección de datos✅ Local✅ 100 % On-Premise
Enrutamiento basado en reglas✅ Posible✅ Incluido
Capacidad de aprendizaje❌ Reglas rígidas✅ Modelo entrenable
Esfuerzo de configuraciónAltoBajo (YAML-Config)

Más información: Visite openticketai.com o contacte a Softoft para una demo personalizada.