Alteryx Designer Desktop Discussions

Find answers, ask questions, and share expertise about Alteryx Designer Desktop and Intelligence Suite.

Connecting-to-Qualtrics-with-Alteryx

Fang2023
5 - Atom

Try to find more information about how to set up API integration between Qualtrics and Alteryx.  The content of below link was archived.

https://community.alteryx.com/t5/Alteryx-Designer-Desktop-Discussions/Connecting-to-Qualtrics-with-A...

 

Obtained the Data Center ID, Survey Id, Token, Data Endpoint from Qualtrics,

Obtained the progressId and FileId in Postman, created a new GET Request by using the URL (with the Data Center ID, Survey Id and fileId) to check progress and download the file. 

The file downloaded is the CSV file. And the URL file link can't be used directly in Alteryx workflow. 

 

My question is How to set up API integration between Qualtrics and Alteryx. 

I'd really appreciate any suggestions or help.

 

2 REPLIES 2
Warcry
9 - Comet

To use the provided Python script in the Python Tool in Alteryx, you'll need to follow a few steps to ensure it's integrated properly into your Alteryx workflow. Here's how you can do it:

Steps for Setting Up the Python Tool in Alteryx:

  1. Add Python Tool to Alteryx Workflow:

    • Open Alteryx Designer.
    • Drag and drop the Python Tool from the Tool Palette onto the canvas.
  2. Install Required Libraries:

    • In Alteryx, the Python environment typically comes with a set of pre-installed libraries, but you may need to install requests and pandas if they are not already available.

    To install libraries:

    • Click on the Options menu in Alteryx, then go to User Settings → Edit User Settings → Python.
    • In the Python Settings window, under the Custom Python Modules tab, click on Install Python Packages.
    • In the pop-up window, type requests and pandas, and then click Install.
  3. Configure the Python Tool:

    • Double-click the Python Tool you added to the canvas. This will open the Python code editor within Alteryx.
  4. Paste the Python Script:

    • Copy the Python script provided in the previous response and paste it into the Python Script Editor in Alteryx.

    Here's an example of what to paste in the script editor:

    import requests
    import pandas as pd
    import time
    import io
    
    # Alteryx input (if needed)
    # If you're passing some inputs from the workflow, you can use:
    # df = Alteryx.read("#1")  # Reading from input data if necessary.
    
    # Qualtrics API credentials (replace with your values)
    API_TOKEN = '<your_api_token>'
    DATA_CENTER_ID = '<your_data_center_id>'
    SURVEY_ID = '<your_survey_id>'
    DOWNLOAD_FILE_ID = '<your_file_id>'
    
    BASE_URL = f"https://{DATA_CENTER_ID}.qualtrics.com/API/v3/surveys/{SURVEY_ID}/export-responses/"
    
    # Function to start the export process
    def start_export():
        url = f"{BASE_URL}start"
        headers = {
            "x-api-token": API_TOKEN,
            "Content-Type": "application/json"
        }
        body = {
            "format": "csv"
        }
        
        response = requests.post(url, json=body, headers=headers)
        
        if response.status_code == 200:
            progress_id = response.json()['result']['progressId']
            print(f"Export started successfully. Progress ID: {progress_id}")
            return progress_id
        else:
            print(f"Error starting export: {response.text}")
            return None
    
    # Function to check the progress of the export
    def check_progress(progress_id):
        url = f"{BASE_URL}progress"
        headers = {
            "x-api-token": API_TOKEN,
            "Content-Type": "application/json"
        }
        params = {
            "progressId": progress_id
        }
        
        response = requests.get(url, headers=headers, params=params)
        
        if response.status_code == 200:
            status = response.json()['result']['status']
            print(f"Current export status: {status}")
            if status == 'complete':
                return True
            else:
                return False
        else:
            print(f"Error checking progress: {response.text}")
            return False
    
    # Function to download the file once the export is complete
    def download_file(file_id):
        url = f"{BASE_URL}file/{file_id}"
        headers = {
            "x-api-token": API_TOKEN,
            "Content-Type": "application/json"
        }
        
        response = requests.get(url, headers=headers)
        
        if response.status_code == 200:
            file_url = response.json()['result']['file']['url']
            print(f"File available at: {file_url}")
            
            file_response = requests.get(file_url)
            
            # Convert the downloaded file content to a Pandas DataFrame
            file_content = io.StringIO(file_response.text)
            df = pd.read_csv(file_content)
            print("File downloaded successfully.")
            
            return df  # This will be the output DataFrame
        else:
            print(f"Error downloading file: {response.text}")
            return None
    
    # Main logic
    def main():
        print("Starting the Qualtrics data export process...")
        
        progress_id = start_export()
        if not progress_id:
            return None
        
        while True:
            time.sleep(5)  # Wait for 5 seconds before checking progress again
            if check_progress(progress_id):
                df = download_file(DOWNLOAD_FILE_ID)
                if df is not None:
                    return df  # Return the DataFrame to Alteryx
                break
    
    # Run the main function
    result_df = main()
    
    # Output the DataFrame to Alteryx
    if result_df is not None:
        Alteryx.write(result_df, 1)  # Writing the result to the first output anchor
  5. Configure Input and Output:

    • If you want to pass input data from your Alteryx workflow into the Python tool, use Alteryx.read("#1") to read data from the first input anchor. If you're not using input data, you can skip this step.
    • The script will output the data as a DataFrame, which you can send to the next step in your workflow using Alteryx.write(result_df, 1) to write the DataFrame to the first output anchor.
  6. Run the Workflow:

    • Once you've set up the Python tool with the script, click the Run button on the top toolbar in Alteryx to execute the workflow.
    • The Python tool will execute the script, interact with the Qualtrics API, check the progress, download the CSV file, and then output it as a DataFrame for further processing.

Notes:

  • Ensure that your API Token, Survey ID, Data Center ID, and File ID are correctly replaced in the script.
  • This script assumes that the file is available in CSV format. You can adjust the format or any other parameters according to your needs.
  • The Python Tool in Alteryx is often used for running custom Python scripts within a broader Alteryx workflow, so after you download the data, you can further process it with other Alteryx tools.

Let me know if you need further assistance!

Warcry
9 - Comet

If this solves or leads you in the right direction, please accept this as your solution, thank you.

Labels
Top Solution Authors