Guide: Attachments in Articles


  • Graeme Carmichael
    Community Moderator


    I do not believe there is an easy way to do this. While you can search for tickets with attachments, that does not apply to articles.

    Even using the API to do this, you would first have to get all your article IDs then check each article to see if there is an attachment. If you have access to a developer, they could speed up the process for you. But it does not look easy using the standard tools.

  • Ruth Kusterer

    This script loops over Zendesk Guide articles and prints article ID and its attachment names. If you want it to do something smarter than print, then look up other options here: Article Attachments API. Hope it works for you.

    ## Loop over list of Zendesk Guide articles and then loop over their attachments
    import os
    import requests

    ## Zendesk API endpoint connection
    credentials = 'YOURUSERNAME', 'YOURPW' # delete pw afterwards
    zendesk_baseurl = ''
    language = 'en-US' # "en-US" in our case
    print("I will list all attachments in this output file: "+out_file)
    ## Use credentials to access Zendesk Articles endpoint. 
    endpoint = zendesk_baseurl + '/api/v2/help_center/{locale}/articles.json'.format(locale=language.lower())
    print("Connecting to "+endpoint)
    while endpoint:
        response = requests.get(endpoint, auth=credentials)
        if response.status_code != 200:
            print('Failed to retrieve articles with error {}'.format(response.status_code))
        ## response contains articles and info about pagination, loop over it:
        article_data = response.json()
        ## For each article...
        for article in article_data['articles']:
          ## Skip empty files and ...
            if article['body'] is None:
            ##... print article ID and ...
            print('Found article with ID {id}.'.format(id=articleID))
    ## ... loop over attachments and ...
            attachment_request=zendesk_baseurl + '/api/v2/help_center/articles/{article_id}/attachments.json'.format(article_id=articleID)
            attachment_response = requests.get(attachment_request, auth=credentials)
            if attachment_response.status_code != 200:
                print('Failed to check article for attachments with error {}'.format(attachment_response.status_code))
            attachment_data = attachment_response.json()
          for att in attachment_data['article_attachments']:
          ## ... print all its attachment names
                print("    "+str(att['file_name']))
              ## Also keep a log of all IDs and attachment names in a file
                with open(os.path.join(out_file), mode='a', encoding='utf-8') as f:
                    f.write(str(articleID)+"\t "+str(att['file_name']))
        ## Next loop
        ## Toggle these two to do either a short debug run or loop over all articles:
        #endpoint = [] # EITHER loop over only 30 articles
      endpoint = article_data['next_page'] # OR loop over all articles



Please sign in to leave a comment.

Powered by Zendesk