Eliminar un archivo adjunto de un ticket en Zoho Desk se realiza mediante una llamada a la API de tipo DELETE que apunta al archivo adjunto específico por su ID, dentro del contexto del ticket principal — y en algunos casos, de un hilo o borrador de transición específico dentro de ese ticket.
Por qué esto es importante
Cuando se adjunta un archivo a un ticket por error — versión incorrecta, datos sensibles o simplemente desorden — necesitas una forma fiable de eliminarlo de forma programática. Zoho Desk expone varios endpoints DELETE según *dónde* se encuentre el archivo adjunto: directamente en el ticket, dentro de una respuesta de hilo o en un borrador de transición. Elegir el endpoint incorrecto resultará en una solicitud fallida, por lo que entender la jerarquía es fundamental.
> Beam Help es soporte experto independiente para Zoho — no es el soporte oficial de Zoho.
---
Paso a paso
Paso 1. Confirma tus permisos OAuth.
Antes de realizar cualquier llamada de eliminación, verifica que tu aplicación conectada tenga concedido el permiso Desk.tickets.ALL o Desk.tickets.DELETE. Sin el permiso correcto, la API rechazará la solicitud con un error de autorización. [6]
Paso 2. Obtén el ID del archivo adjunto.
Si aún no tienes el attachmentId, llama primero al endpoint de listado. Realiza una solicitud GET a /api/v1/tickets/{ticketId}/attachments, pasando el ticketId correspondiente como parámetro de ruta. La respuesta incluirá el ID de cada archivo adjunto, que necesitarás para la llamada de eliminación. [7]
Paso 3. Elimina un archivo adjunto de nivel superior del ticket.
Para los archivos adjuntos que pertenecen directamente al ticket (no dentro de un hilo), envía una solicitud DELETE a:
DELETE /api/v1/tickets/{ticketId}/attachments/{attachmentId}
Proporciona tanto ticketId como attachmentId como parámetros de ruta. Una llamada exitosa elimina el archivo del registro del ticket. [1][2]
En Python, la llamada tiene este aspecto:
client.delete_ticket_attachment(ticketId="123456", attachmentId="987654")
Paso 4. Elimina un archivo adjunto dentro de un hilo del ticket.
Si el archivo se adjuntó a una respuesta o hilo específico dentro del ticket, debes incluir el thread_id en la ruta. Usa:
DELETE /api/v1/tickets/{ticket_id}/threads/{thread_id}/attachments/{attachment_id}
Los tres parámetros de ruta — ticketid, threadid y attachment_id — son obligatorios. Omitir el segmento del hilo hará que la solicitud falle o apunte al recurso incorrecto. [3]
En Python:
client.delete_attachment(ticket_id="123456", thread_id="111", attachment_id="987654")
Paso 5. Elimina un archivo adjunto de un borrador de transición.
Si el archivo adjunto está asociado a un blueprint o borrador de transición de flujo de trabajo, en lugar del cuerpo del ticket o del hilo, se aplica un endpoint diferente:
DELETE /api/v1/tickets/{ticketId}/transitions/{transitionId}/attachments/{attachmentId}
Aquí necesitas el ticketId, el transitionId del borrador y el attachmentId. [4]
En Python:
client.op_16_delete_attachment_of_transition(
ticketId="123456",
transitionId="555",
attachmentId="987654"
)
---
Errores comunes
- Usar el endpoint de nivel de ticket para archivos adjuntos de hilos. El endpoint de nivel superior
DELETE /api/v1/tickets/{ticketId}/attachments/{attachmentId}no localizará archivos que estén dentro del contexto de un hilo. Asegúrate siempre de que el endpoint coincida con la ubicación real del archivo adjunto. [1][3]
- Permiso faltante o incorrecto. El permiso
Desk.tickets.DELETEdebe incluirse explícitamente en tu configuración OAuth. Si solo solicitasteREADoWRITE, las llamadas de eliminación serán rechazadas. [6]
- Confundir archivos adjuntos de tickets con archivos adjuntos de cuentas. Existe un endpoint separado —
DELETE /api/v1/accounts/{accountId}/attachments/{attachmentId}— para archivos adjuntos a registros de cuentas. No lo uses para archivos de nivel de ticket. [8]
- No obtener el ID del archivo adjunto primero. Codificar de forma fija o adivinar los IDs de archivos adjuntos no es fiable. Usa siempre el endpoint de listado (
GET /api/v1/tickets/{ticketId}/attachments) para obtener el ID correcto antes de intentar la eliminación. [7]
---
Qué verificar
- Parámetros de ruta correctos: Confirma que
ticketId,attachmentIdy (cuando corresponda)thread_idotransitionIdcorrespondan a registros reales y existentes antes de enviar la solicitud. [1][3][4] - Cobertura del permiso OAuth: Verifica que
Desk.tickets.DELETEoDesk.tickets.ALLesté presente en la lista de permisos de tu token activo. [6] - Ubicación del archivo adjunto: Tras la eliminación, vuelve a ejecutar
GET /api/v1/tickets/{ticketId}/attachmentspara confirmar que el archivo adjunto ya no aparece en la respuesta. [7]