L'eliminazione di una voce di tempo da un ticket in Zoho Desk avviene tramite una singola richiesta DELETE autenticata all'endpoint delle voci di tempo, passando sia l'ID del ticket che l'ID della voce di tempo come parametri di percorso.
Perché è importante
Le voci di tempo registrate sui ticket di supporto alimentano la fatturazione, i report SLA e le metriche di produttività degli agenti. Se una voce è stata registrata per errore — ticket sbagliato, invio duplicato o durata errata — è necessario un modo pulito per rimuoverla senza influire sugli altri record. Questo è rilevante anche quando si automatizza la pulizia del tracciamento del tempo tramite script o integrazioni.
> Nota: Beam Help è un 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 API, verifica che il token dell'app connessa includa lo scope Desk.tickets.ALL o Desk.tickets.DELETE. Senza lo scope corretto, la richiesta verrà rifiutata con un errore di autorizzazione. [2]
Passaggio 2. Identifica i due ID richiesti.
Hai bisogno esattamente di due valori:
ticketId— l'identificatore univoco del ticket a cui appartiene la voce di tempo.timeEntryId— l'identificatore univoco della specifica voce di tempo che vuoi rimuovere.
Entrambi sono stringhe. Puoi recuperarli da una precedente chiamata GET all'elenco delle voci di tempo del ticket, oppure dall'URL dell'interfaccia di Zoho Desk. [1]
Passaggio 3. Costruisci la richiesta DELETE.
Invia una richiesta HTTP DELETE al seguente endpoint, sostituendo i tuoi ID reali:
DELETE /api/v1/tickets/{ticketId}/timeEntries/{timeEntryId}
Includi l'intestazione Authorization: Bearer <access_token> e l'intestazione orgId appropriata richiesta dall'API di Zoho Desk. [1]
Passaggio 4. Esegui la chiamata in Python (facoltativo).
Se stai lavorando con un'integrazione Python, la chiamata segue questo schema:
def delete_ticket_time_entry(self, ticketId: str, timeEntryId: str, p: dict = None):
return self.c.request(
"DELETE",
f"/api/v1/tickets/{ticketId}/timeEntries/{timeEntryId}",
p,
None
)
Passa ticketId e timeEntryId come argomenti posizionali; il parametro opzionale p può contenere eventuali parametri di query aggiuntivi richiesti dal tuo ambiente. [1]
Passaggio 5. Gestisci la risposta.
Un'eliminazione riuscita restituisce un HTTP 204 No Content o uno stato di successo simile con un corpo vuoto. Se ricevi una risposta 4xx, verifica nuovamente i tuoi ID e gli scope OAuth prima di riprovare. [1]
---
Errori comuni
- Tipo di entità errato. Le voci di tempo possono essere associate anche a contatti (
/api/v1/contacts/{contactId}/timeEntries/{timeEntryId}) o account (/api/v1/accounts/{accountId}/timeEntries/{timeEntryId}). Assicurati di puntare all'endpoint del ticket e non a uno di questi endpoint analoghi, altrimenti riceverai un errore "non trovato" anche se la voce esiste. [4][8] - Scope OAuth insufficiente. Lo scope
Desk.tickets.READda solo non è sufficiente — devi disporre di uno scope che consenta l'eliminazione, comeDesk.tickets.DELETEoDesk.tickets.ALL. [2] - ID invertiti. Inserire il
timeEntryIdnella posizione delticketId(o viceversa) produrrà un errore di risorsa non trovata. Controlla attentamente l'ordine: l'ID del ticket viene prima nel percorso, l'ID della voce di tempo viene secondo. [1]
---
Cosa verificare
- Copertura degli scope: Conferma che il token OAuth sia stato emesso con
Desk.tickets.DELETEoDesk.tickets.ALLprima di effettuare la chiamata. [2] - Percorso endpoint corretto: Verifica che l'URL sia
/api/v1/tickets/{ticketId}/timeEntries/{timeEntryId}— non la variante per contatti o account. [1][4][8] - Codice di risposta corretto: Un
204(o stato di successo equivalente) conferma la rimozione; qualsiasi valore nell'intervallo4xxindica che la voce non è stata eliminata e richiede un'indagine. [1]