L'eliminazione di un allegato di un ticket in Zoho Desk avviene tramite una chiamata API DELETE che individua l'allegato specifico tramite il suo ID, nell'ambito del ticket padre — e in alcuni casi, di uno specifico thread o bozza di transizione all'interno di quel ticket.
Perché è importante
Quando un file viene allegato a un ticket per errore — versione sbagliata, dati sensibili o semplicemente disordine — è necessario un modo affidabile per rimuoverlo in modo programmatico. Zoho Desk espone diversi endpoint DELETE a seconda di *dove* si trova l'allegato: direttamente sul ticket, all'interno di una risposta in un thread, oppure su una bozza di transizione. Scegliere l'endpoint sbagliato comporterà una richiesta fallita, quindi è importante comprendere la gerarchia.
> Beam Help è un servizio di supporto esperto indipendente per Zoho — non è il supporto ufficiale di Zoho.
---
Procedura passo dopo passo
Passaggio 1. Verifica gli scope OAuth.
Prima di effettuare qualsiasi chiamata di eliminazione, verifica che l'app connessa abbia ricevuto lo scope Desk.tickets.ALL o Desk.tickets.DELETE. Senza lo scope corretto, l'API rifiuterà la richiesta con un errore di autorizzazione. [6]
Passaggio 2. Recupera l'ID dell'allegato.
Se non disponi già dell'attachmentId, chiama prima l'endpoint di elenco. Invia una richiesta GET a /api/v1/tickets/{ticketId}/attachments, passando il ticketId pertinente come parametro di percorso. La risposta includerà l'ID di ciascun allegato, necessario per la chiamata di eliminazione. [7]
Passaggio 3. Elimina un allegato di primo livello del ticket.
Per gli allegati che appartengono direttamente al ticket (non all'interno di un thread), invia una richiesta DELETE a:
DELETE /api/v1/tickets/{ticketId}/attachments/{attachmentId}
Fornisci sia ticketId che attachmentId come parametri di percorso. Una chiamata riuscita rimuove il file dal record del ticket. [1][2]
In Python, la chiamata è la seguente:
client.delete_ticket_attachment(ticketId="123456", attachmentId="987654")
Passaggio 4. Elimina un allegato all'interno di un thread del ticket.
Se il file è stato allegato a una risposta o a un thread specifico all'interno del ticket, devi includere il thread_id nel percorso. Utilizza:
DELETE /api/v1/tickets/{ticket_id}/threads/{thread_id}/attachments/{attachment_id}
Tutti e tre i parametri di percorso — ticketid, threadid e attachment_id — sono obbligatori. Omettere il segmento del thread causerà il fallimento della richiesta o il targeting della risorsa sbagliata. [3]
In Python:
client.delete_attachment(ticket_id="123456", thread_id="111", attachment_id="987654")
Passaggio 5. Elimina un allegato da una bozza di transizione.
Se l'allegato è associato a una bozza di transizione di un blueprint o di un workflow anziché al corpo del ticket o al thread, si applica un endpoint separato:
DELETE /api/v1/tickets/{ticketId}/transitions/{transitionId}/attachments/{attachmentId}
In questo caso sono necessari il ticketId, il transitionId della bozza e l'attachmentId. [4]
In Python:
client.op_16_delete_attachment_of_transition(
ticketId="123456",
transitionId="555",
attachmentId="987654"
)
---
Errori comuni
- Utilizzare l'endpoint a livello di ticket per gli allegati dei thread. L'endpoint di primo livello
DELETE /api/v1/tickets/{ticketId}/attachments/{attachmentId}non individuerà i file con scope limitato a un thread. Abbina sempre l'endpoint alla posizione effettiva dell'allegato. [1][3]
- Scope mancante o errato. Lo scope
Desk.tickets.DELETEdeve essere incluso esplicitamente nella configurazione OAuth. Se hai richiesto soloREADoWRITE, le chiamate di eliminazione verranno rifiutate. [6]
- Confondere gli allegati dei ticket con gli allegati degli account. Esiste un endpoint separato —
DELETE /api/v1/accounts/{accountId}/attachments/{attachmentId}— per i file allegati ai record degli account. Non utilizzarlo per i file a livello di ticket. [8]
- Non recuperare prima l'ID dell'allegato. Inserire manualmente o indovinare gli ID degli allegati non è affidabile. Utilizza sempre l'endpoint di elenco (
GET /api/v1/tickets/{ticketId}/attachments) per recuperare l'ID corretto prima di tentare l'eliminazione. [7]
---
Cosa verificare
- Parametri di percorso corretti: Verifica che
ticketId,attachmentIde, dove applicabile,thread_idotransitionIdcorrispondano tutti a record reali ed esistenti prima di inviare la richiesta. [1][3][4] - Copertura dello scope OAuth: Verifica che
Desk.tickets.DELETEoDesk.tickets.ALLsia presente nell'elenco degli scope del token attivo. [6] - Posizione dell'allegato: Dopo l'eliminazione, riesegui
GET /api/v1/tickets/{ticketId}/attachmentsper confermare che l'allegato non compaia più nella risposta. [7]