Ajuda com as permissões para export crm

# Define o token de autorização e o endpoint

url = "crm/v3/exports/export/async/tasks/

XXXXXX

/status"

headers = {

“Authorization”: "Bearer

XXX

",

“Accept”: “application/json”,

“Content-Type”: “application/json”

}

# Preparar os dados da exportação

payload = {

“exportType”: “VIEW”,

“exportName”: “All contacts”,

“format”: “xlsx”,

“language”: “PT_BR”,

“objectType”: “CONTACT”,

“objectProperties”: [

“email, firstname”

]

}

response = requests.get(url, headers=headers, json=payload)

# Verifica se a resposta foi bem-sucedida

if response.status_code in (200, 201​:disappointed_face:

# Obtém o conteúdo do arquivo

file_content = response.content

# Define o diretório onde você quer salvar o arquivo

directory = r"C:\Users\thiago.silva\Desktop\Explore_hub"

# Se o diretório não existir, cria ele

if not os.path.exists(directory):

os.makedirs(directory)

# Define o caminho completo do arquivo

file_path = os.path.join(directory, “HubSpot_Contatos.xlsx”)

# Salva o conteúdo do arquivo no diretório especificado

with open(file_path, ‘wb’) as file:

file.write(file_content)

print(f"Exportação criada com sucesso e salva em: {file_path}")

else:

print(“Erro ao fazer a exportação no HubSpot:”, response.status_code, response.text)

ERRO: 403 {“status”:“error”,“message”:“Permission to get export file can not be granted to exportId X and portalId X”,

A key ja tem permissões de import/export crm do HubSpot

Oi @TSiilva, obrigada por postar em nossa Comunidade,

Aos nossos colaboradores, @DanielSanchez @Tesore e @Brenner alguma recomendação para @TSiilva?

Obrigada,

Pam

Olá @TSiilva ! Espero que esteja bem.

Pelo que eu vi, esse erro surge por conta de permissões insuficientes ou incorretas. É bom dar um double check nisso.

Aproveitei e pedi para revisarem esse código, não tenho certeza se assim funciona, você pode comparar o código abaixo com o seu e ver se faz sentido os ajustes propostos?

import os
import requests

# Define o token de autorização e o endpoint
export_id = “XXXXXX”
portal_id = “XXXXXX”
url = f"https://api.hubapi.com/crm/v3/exports/export/async/tasks/{export_id}/status"
headers = {
“Authorization”: “Bearer XXX”, # Replace XXX with your actual API key
“Accept”: “application/json”,
“Content-Type”: “application/json”
}

# Preparar os dados da exportação (only needed for export creation, not for checking status)
payload = {
“exportType”: “VIEW”,
“exportName”: “All contacts”,
“format”: “xlsx”,
“language”: “PT_BR”,
“objectType”: “CONTACT”,
“objectProperties”: [
“email”, “firstname”
]
}

# Make the request to check export status
response = requests.get(url, headers=headers)

# Verifica se a resposta foi bem-sucedida
if response.status_code == 200:
# Check if the export is completed successfully
export_status = response.json().get(“status”)
if export_status == “COMPLETED”:
# Export is completed, now retrieve the file
export_url = response.json().get(“fileUrls”).get(“xlsx”)
file_response = requests.get(export_url)
if file_response.status_code == 200:
# Define o diretório onde você quer salvar o arquivo
directory = r"C:\Users\thiago.silva\Desktop\Explore_hub"
# Se o diretório não existir, cria ele
if not os.path.exists(directory):
os.makedirs(directory)
# Define o caminho completo do arquivo
file_path = os.path.join(directory, “HubSpot_Contatos.xlsx”)
# Salva o conteúdo do arquivo no diretório especificado
with open(file_path, ‘wb’) as file:
file.write(file_response.content)
print(f"Exportação criada com sucesso e salva em: {file_path}")
else:
print(“Erro ao fazer o download do arquivo:”, file_response.status_code, file_response.text)
else:
print(“Exportação ainda não está completa. Status:”, export_status)
else:
print(“Erro ao obter o status da exportação no HubSpot:”, response.status_code, response.text)

Obrigado pela menção aqui, @PamCotton !

Segue abaixo o codigo atualizado, o problema acima foi solucionado, usei o seu como base também, o erro agora está nessa parte do codigo:
O intuito e fazer com que o codigo inicie a exportação e baixe a mesmo na maquina.

file_response = requests.get(export_url) # GET para processar o URL

import requests

import json

import time

# Defina o endpoint para iniciar a exportação

url = “https://api.hubapi.com/crm/v3/exports/export/async

# Configure o token de autorização e os headers

headers = {

"Authorization": "Bearer XXX",

"Accept": "application/json",

"Content-Type": "application/json"

}

# Preparar os dados da exportação

data = {

"exportType": "VIEW",

"exportName": "Exportando Contatos (AUTOMATICO)",

"format": "xlsx",

"language": "PT\_BR",

"objectType": "CONTACT",

"objectProperties": \[       #Criando a vizualização correta

    "email", "firstname"

]

}

# Enviar a solicitação para iniciar a exportação

response = requests.post(url, headers=headers, json=data)

# Verifica se a resposta foi bem-sucedida

if response.status_code in (200, 201, 202​:disappointed_face:

print("Exportação iniciada com sucesso.")

response\_data = response.json()

print("ID da tarefa de exportação:", response\_data.get("id"))

else:

print("Erro ao iniciar a exportação no HubSpot:", response.status\_code, response.text)

export_id = response_data.get(“id”) # ID da tarefa de exportação obtido anteriormente

status_url = f"https://api.hubapi.com/crm/v3/exports/export/async/tasks/{export\_id}/status"

while True:

status\_response = requests.get(status\_url, headers=headers)

if status\_response.status\_code == 200:

    status\_data = status\_response.json()

    if "status" in status\_data and status\_data\["status"] == "COMPLETE":

        export\_url = response.json().get("fileUrls").get("xlsx")

        # Tente baixar o arquivo

        file\_response = requests.get(export\_url)  # GET para processar o URL

        directory = r"C:\Users\thiago.silva\Desktop\Explore\_hub"

        if not os.path.exists(directory):

            os.makedirs(directory)

        file\_path = os.path.join(directory, "HubSpot\_Contatos.xlsx")

        with open(file\_path, 'wb') as file:

            file.write(file\_response.content)

        print(f"Arquivo baixado com sucesso: {file\_path}")

        break  # Sai do loop após o download bem-sucedido

    elif "status" in status\_data and status\_data\["status"] == "PROCESSING":

        print("A exportação está em andamento. Aguardando a conclusão...")

        time.sleep(180)  # verifica a cada 3 minutos

    else:

        print("A exportação falhou ou foi cancelada.")

        break

else:

    print("Erro ao verificar o status da exportação:", status\_response.status\_code, status\_response.text)

    break

Estou aberto a sugestões!

Solução

while True:

status_response = requests.get(status_url, headers=headers)

print(f"Status Response Code: {status_response.status_code}") # Debug: Verifica o código de status da resposta

if status_response.status_code in (200, 201, 202​:disappointed_face:

status_data = status_response.json()

print(f"Status Data: {status_data}") # Debug: Imprime os dados de status

export_status = status_data.get(“status”)

print(f"Export Status: {export_status}") # Debug: Imprime o status da exportação

export_status = status_data.get(“status”)

if export_status == “COMPLETE”:

export_url = status_data.get(“result”, “”)

#Verifica se a export_url não está vazia

if export_url:

file_response = requests.get(export_url)

print(f"File Response Code: {file_response.status_code}") # Debug: Verifica o código de status da resposta do arquivo

# Correção feita aqui para usar file_response ao invés de export_url

if file_response.status_code in (200, 201, 202​:disappointed_face:

directory = r"C:\Users\thiago.silva\Desktop\Explore_hub"

if not os.path.exists(directory):

os.makedirs(directory)

file_path = os.path.join(directory, “HubSpot_Contatos.xlsx”)

with open(file_path, ‘wb’) as file:

file.write(file_response.content)

print(f"Arquivo baixado com sucesso e salvo em: {file_path}")

break

else:

print(f"Erro ao baixar o arquivo: {file_response.status_code}")

break

else:

print(“URL de download não encontrada.”)

break

else:

print("A exportação ainda não foi completada. Status atual: " + export_status)

time.sleep(30) # Espera antes de verificar novamente

else:

print(f"Erro ao verificar o status da exportação no HubSpot: {status_response.status_code}")

break