Extract custom fields from tickets with Python (API Ticketing) | Community
Skip to main content

Extract custom fields from tickets with Python (API Ticketing)

  • May 30, 2024
  • 2 replies
  • 0 views

Hello, 

 

I have a .py file to extract some data from Zendesk tickets.

The file is ok, I extract an XLSX, but my custom fields data are not extract to my data file, but the ID of custom fields (360019814059 and 360017291360) are ok.


It's my request. Can you help me please ?

# Récupération des données de Zendesk
response = requests.get(url, auth=auth, params={'query': query})
print("Statut de la requête :", response.status_code)  # Afficher le statut de la requête
if response.status_code != 200:
    try:
        error_message = response.json()
    except ValueError:
        error_message = "Erreur inconnue"
    raise Exception("Erreur lors de la récupération des tickets (Code {}) : {}".format(response.status_code, error_message))

# Afficher le nombre de tickets récupérés
tickets = response.json().get('results', [])
print("Nombre de tickets récupérés :", len(tickets))

# Transformation des données
tickets_data = []
for ticket in tickets:
    description = re.sub(r'\n\n+', '\n', ticket['description'])  # Remplacer plusieurs sauts de ligne par un seul
    tickets_data.append({
        'ID du ticket': '#{}'.format(ticket['id']),
        'Statut du ticket': ticket['status'],
        'Canal du ticket': ticket['via']['channel'],
        'Description': description.strip(),  # Supprimer les espaces inutiles aux extrémités
        'Sujet du ticket': ticket['subject'],
        'Email de l\'envoyeur': ticket['requester']['email'] if ticket.get('requester') else 'N/A',
        'Ticket créé le': ticket['created_at'],
        'Ticket résolu le': ticket['resolved_at'] if 'resolved_at' in ticket else 'N/A',
        'Code chantier': next((field['value'] for field in ticket['custom_fields'] if field['id'] == '360019814059'), 'N/A'),
        'Motif des tickets/appels': next((field['value'] for field in ticket['custom_fields'] if field['id'] == '360017291360'), 'N/A')
    })

2 replies

  • May 30, 2024

It looks like your code is almost correct, but there might be an issue with how you're accessing the custom fields. Specifically, the IDs of the custom fields should be integers, not strings. Let's make sure that the IDs are treated as integers and also add some debugging to ensure that the custom fields are being processed correctly.

Here's the updated code:


import requests
import re
import json
# Récupération des données de Zendesk
response = requests.get(url, auth=auth, params={'query': query})
print("Statut de la requête :", response.status_code)  # Afficher le statut de la requête
if response.status_code != 200:
   try:
       error_message = response.json()
   except ValueError:
       error_message = "Erreur inconnue"
   raise Exception("Erreur lors de la récupération des tickets (Code {}) : {}".format(response.status_code, error_message))
# Afficher le nombre de tickets récupérés
tickets = response.json().get('results', [])
print("Nombre de tickets récupérés :", len(tickets))
# Transformation des données
tickets_data = []
for ticket in tickets:
   description = re.sub(r'\n\n+', '\n', ticket['description'])  # Remplacer plusieurs sauts de ligne par un seul
   custom_fields = ticket.get('custom_fields', [])
   
   # Debugging: Print custom fields to ensure they are being processed correctly
   print("Custom fields for ticket {}: {}".format(ticket['id'], json.dumps(custom_fields, indent=2)))
   tickets_data.append({
       'ID du ticket': '#{}'.format(ticket['id']),
       'Statut du ticket': ticket['status'],
       'Canal du ticket': ticket['via']['channel'],
       'Description': description.strip(),  # Supprimer les espaces inutiles aux extrémités
       'Sujet du ticket': ticket['subject'],
       'Email de l\'envoyeur': ticket['requester']['email'] if ticket.get('requester') else 'N/A',
       'Ticket créé le': ticket['created_at'],
       'Ticket résolu le': ticket['resolved_at'] if 'resolved_at' in ticket else 'N/A',
       'Code chantier': next((field['value'] for field in custom_fields if field['id'] == 360019814059), 'N/A'),
       'Motif des tickets/appels': next((field['value'] for field in custom_fields if field['id'] == 360017291360), 'N/A')
   })
# Debugging: Print the transformed data to ensure it's correct
print("Transformed tickets data: {}".format(json.dumps(tickets_data, indent=2)))

  • Author
  • May 31, 2024

Thank you so much, it's perfect now !