

# Conexión a Pipedrive
<a name="connecting-to-pipedrive"></a>

 Pipedrive es un CRM de administración de embudos de ventas diseñado para ayudar a las pequeñas empresas a administrar clientes potenciales, dar seguimiento a las actividades comerciales y cerrar más negocios. Pipedrive permite a los equipos de ventas de pequeñas empresas optimizar procesos y consolidar datos de ventas en una única herramienta unificada de CRM de ventas. Si es usuario de Pipedrive, puede conectar AWS Glue a la cuenta de Pipedrive. Tras ello, podrá utilizar Pipedrive como origen de datos en los trabajos de ETL. Ejecute estos trabajos para transferir datos entre Pipedrive y los servicios de AWS u otras aplicaciones compatibles. 

**Topics**
+ [Compatibilidad de AWS Glue con Pipedrive](pipedrive-support.md)
+ [Políticas que contienen las operaciones de la API para crear y usar conexiones](pipedrive-configuring-iam-permissions.md)
+ [Configuración de Pipedrive](pipedrive-configuring.md)
+ [Configuración de las conexiones de Pipedrive](pipedrive-configuring-connections.md)
+ [Lectura de entidades de Pipedrive](pipedrive-reading-from-entities.md)
+ [Referencia de opciones de conexión de Pipedrive](pipedrive-connection-options.md)
+ [Limitaciones](pipedrive-connector-limitations.md)

# Compatibilidad de AWS Glue con Pipedrive
<a name="pipedrive-support"></a>

AWS Glue es compatible con Pipedrive de la siguiente manera:

**¿Es compatible como origen?**  
Sí. Puede utilizar los trabajos de ETL de AWS Glue para consultar datos de Pipedrive.

**¿Es compatible como destino?**  
No.

**Versiones de la API de Pipedrive compatibles**  
 v1. 

# Políticas que contienen las operaciones de la API para crear y usar conexiones
<a name="pipedrive-configuring-iam-permissions"></a>

 En el siguiente ejemplo de política se describen los permisos de AWS necesarios para crear y utilizar conexiones. Si va a crear un nuevo rol, cree una política que contenga lo siguiente: 

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

También puede usar las siguientes políticas de IAM administradas para permitir el acceso:
+  [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole): concede acceso a los recursos que necesitan diversos procesos de AWS Glue para ejecutarse en su nombre. Entre estos recursos se incluyen AWS Glue, Amazon S3, IAM, CloudWatch Logs y Amazon EC2. Si aplica la convención de nomenclatura en los recursos especificados en esta política, los procesos de AWS Glue tienen los permisos necesarios. Normalmente, esta política se asocia a los roles que se especifican a la hora de definir rastreadores, trabajos y puntos de conexión de desarrollo. 
+  [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess): concede acceso total a los recursos de AWS Glue cuando una identidad a la que está asociada la política utiliza la consola de administración de AWS. Si sigue la convención de nomenclatura para los recursos especificados en esta política, los usuarios dispondrán de todas las funciones de la consola. Esta política se suele adjuntar a los usuarios de la consola AWS Glue. 

# Configuración de Pipedrive
<a name="pipedrive-configuring"></a>

Antes de poder utilizar AWS Glue para transferir datos desde Pipedrive, deberá cumplir estos requisitos:

## Requisitos mínimos
<a name="pipedrive-configuring-min-requirements"></a>
+  Tener una cuenta de Pipedrive. 
+  La cuenta de Pipedrive debe estar habilitada para el acceso de API. 

 Si cumple estos requisitos, estará listo para conectar AWS Glue a la cuenta de Pipedrive. Si es una conexión típica, no necesita hacer nada más en Pipedrive. 

# Configuración de las conexiones de Pipedrive
<a name="pipedrive-configuring-connections"></a>

 Pipedrive admite el tipo de concesión AUTHORIZATION\$1CODE para OAuth2. 
+  Este tipo de concesión se considera un OAuth “de tres vías”, ya que se basa en redirigir a los usuarios al servidor de autorización externo para autenticar al usuario. Se utiliza para crear conexiones a través de la consola de AWS Glue. El usuario que crea una conexión puede, de forma predeterminada, confiar en una aplicación conectada propiedad de AWS Glue en la que no necesita proporcionar ninguna información relacionada con OAuth, excepto la URL de la instancia de Pipedrive. La consola de AWS Glue redirigirá al usuario a Pipedrive, donde deberá iniciar sesión y conceder a AWS Glue los permisos solicitados para acceder a su instancia de Pipedrive. 
+  Los usuarios deberían optar por crear una aplicación conectada propia en Pipedrive y proporcionar su propio ID y secreto de cliente al crear conexiones a través de la consola de AWS Glue. En este escenario, aún se abrirá Pipedrive para iniciar sesión y autorizar a AWS Glue para que acceda a sus recursos. 
+  Este tipo de concesión da como resultado un token de actualización y un token de acceso. El token de acceso permanecerá válido durante una hora y se puede actualizar automáticamente sin la interacción del usuario mediante el token de actualización. 
+  Para obtener más información, consulte la [documentación sobre la creación de una aplicación conectada para el flujo Authorization Code OAuth](https://developers.pipedrive.com/docs/api/v1/Oauth). 

Para configurar una conexión a Pipedrive:

1.  En AWS Secrets Manager, cree un secreto con los siguientes detalles. Es necesario crear un secreto para cada conexión en AWS Glue. 

   1.  En el caso de aplicaciones conectadas administradas por el cliente, el secreto debe contener el secreto del consumidor de la aplicación conectada con USER\$1MANAGED\$1CLIENT\$1APPLICATION\$1CLIENT\$1SECRET como clave. 

1. En AWS Glue Studio, cree una conexión en **Conexiones de datos** según los pasos que se indican a continuación: 

   1.  En Conexiones de datos, elija **Crear conexión**. 

   1. Al seleccionar un **Origen de datos**, elija Pipedrive.

   1. Proporcione la **URL de la instancia** de Pipedrive.

   1.  Seleccione el rol de IAM que AWS Glue pueda asumir y que tenga permisos para las siguientes acciones: 

------
#### [ JSON ]

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1.  Proporcione el ID de cliente de la aplicación cliente administrada por el usuario de Pipedrive a la que se desea conectar. 

   1.  Seleccione el `secretName` que desee usar para esta conexión en AWS Glue para colocar los tokens. 

   1.  Seleccione las opciones de red si quiere usar su red. 

1.  Conceda el rol de IAM asociado a su permiso de trabajo de AWS Glue para leer `secretName`. Elija **Siguiente**. 

1.  Proporcione el **connectionName** y elija **Siguiente**. 

1.  En la página siguiente, elija **Crear conexión**. Se le pedirá que inicie sesión en Pipedrive. Indique su nombre de usuario y la contraseña y elija **Iniciar sesión**. 

1.  Una vez que haya iniciado sesión, seleccione **Continuar a la aplicación**. La conexión está lista para usarse. 

1.  En la configuración de su trabajo de AWS Glue, proporcione `connectionName` como **Conexión de red adicional**. 

# Lectura de entidades de Pipedrive
<a name="pipedrive-reading-from-entities"></a>

 **Requisitos previos** 
+  Un objeto de Pipedrive del que desea leer. Consulte la tabla de entidades compatibles que aparece a continuación para comprobar las entidades disponibles. 

 **Entidades compatibles** 


| Entidad | Se puede filtrar | Admite límite | Admite Ordenar por | Admite Seleccionar \$1 | Admite Partición | 
| --- | --- | --- | --- | --- | --- | 
| Actividades | Sí | Sí | No | Sí | Sí | 
| Tipo de actividad | No | No | No | Sí | No | 
| Registros de llamadas | No | No | No | Sí | No | 
| Divisas | Sí | Sí | No | Sí | No | 
| Acuerdos | Sí | Sí | Sí | Sí | Sí | 
| Leads | Sí | Sí | Sí | Sí | No | 
| Fuentes de clientes potenciales | No | Sí | No | Sí | No | 
| Etiquetas de clientes potenciales | No | No | No | No | No | 
| Notas | Sí | Sí | Sí | Sí | Sí | 
| Organización | Sí | Sí | No | Sí | Sí | 
| Conjuntos de permisos | Sí | No | No | Sí | No | 
| Personas | Sí | Sí | Sí | Sí | Sí | 
| Canalizaciones | No | Sí | No | Sí | No | 
| Productos | Sí | Sí | No | Sí | Sí | 
| Roles | No | Sí | No | Sí | No | 
| Etapas | Sí | Sí | No | Sí | No | 
| Usuarios | No | No | No | Sí | No | 

 **Ejemplo** 

```
pipedrive_read= glueContext.create_dynamic_frame.from_options(
    connection_type="PIPEDRIVE",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "activites",
        "API_VERSION": "v1"
    }
```

 **Detalles de entidades y campos de Pipedrive** 

 Lista de entidades: 
+  Actividades: [ https://developers.pipedrive.com/docs/api/v1/Activities ](https://developers.pipedrive.com/docs/api/v1/Activities) 
+  Tipo de actividad: [ https://developers.pipedrive.com/docs/api/v1/ActivityTypes ](https://developers.pipedrive.com/docs/api/v1/ActivityTypes) 
+  Registros de llamadas: [ https://developers.pipedrive.com/docs/api/v1/CallLogs ](https://developers.pipedrive.com/docs/api/v1/CallLogs) 
+  Divisas: [ https://developers.pipedrive.com/docs/api/v1/Currencies ](https://developers.pipedrive.com/docs/api/v1/Currencies) 
+  Negocios: [ https://developers.pipedrive.com/docs/api/v1/Deals ](https://developers.pipedrive.com/docs/api/v1/Deals) 
+  Clientes potenciales: [ https://developers.pipedrive.com/docs/api/v1/Leads ](https://developers.pipedrive.com/docs/api/v1/Leads) 
+  Fuentes de clientes potenciales: [ https://developers.pipedrive.com/docs/api/v1/LeadSources ](https://developers.pipedrive.com/docs/api/v1/LeadSources) 
+  Etiquetas de clientes potenciales: [ https://developers.pipedrive.com/docs/api/v1/LeadLabels ](https://developers.pipedrive.com/docs/api/v1/LeadLabels) 
+  Notas: [ https://developers.pipedrive.com/docs/api/v1/Notes ](https://developers.pipedrive.com/docs/api/v1/Notes) 
+  Organizaciones: [ https://developers.pipedrive.com/docs/api/v1/Organizations ](https://developers.pipedrive.com/docs/api/v1/Organizations) 
+  Conjuntos de permisos: [ https://developers.pipedrive.com/docs/api/v1/PermissionSets ](https://developers.pipedrive.com/docs/api/v1/PermissionSets) 
+  Personas: [ https://developers.pipedrive.com/docs/api/v1/Persons ](https://developers.pipedrive.com/docs/api/v1/Persons) 
+  Embudos de ventas: [ https://developers.pipedrive.com/docs/api/v1/Pipelines ](https://developers.pipedrive.com/docs/api/v1/Pipelines) 
+  Productos: [ https://developers.pipedrive.com/docs/api/v1/Products ](https://developers.pipedrive.com/docs/api/v1/Products) 
+  Roles: [ https://developers.pipedrive.com/docs/api/v1/Roles ](https://developers.pipedrive.com/docs/api/v1/Roles) 
+  Etapas: [ https://developers.pipedrive.com/docs/api/v1/Stages ](https://developers.pipedrive.com/docs/api/v1/Stages) 
+  Usuarios: [ https://developers.pipedrive.com/docs/api/v1/Users ](https://developers.pipedrive.com/docs/api/v1/Users) 


| Entidad | Tipo de datos | Operadores admitidos | 
| --- | --- | --- | 
| Actividades, negocios, notas, organización, personas y productos. | Date | '=' | 
|  | Entero | '=' | 
|  | Cadena | '=' | 
|  | Booleano | '=' | 

## Consultas de partición
<a name="pipedrive-partitioning-queries"></a>

 En Pipedrive, solo un campo (due\$1date) de la entidad Actividades admite la partición basada en campos. Se trata de un campo de fecha. 

 Puede proporcionar las opciones adicionales de Spark `PARTITION_FIELD`, `LOWER_BOUND`, `UPPER_BOUND` y `NUM_PARTITIONS` si quiere usar la simultaneidad en Spark. Con estos parámetros, la consulta original se dividiría en un número `NUM_PARTITIONS` de subconsultas que las tareas de Spark pueden ejecutar simultáneamente. 
+  `PARTITION_FIELD`: el nombre del campo que se usará para particionar la consulta. 
+  `LOWER_BOUND`: un valor de límite inferior inclusivo del campo de partición elegido. 

   Para la fecha, aceptamos el formato de fecha de Spark que se usa en las consultas de Spark SQL. Ejemplos de valores válidos: `"2024-02-06"`. 
+  `UPPER_BOUND`: un valor límite superior exclusivo del campo de partición elegido. 
+  `NUM_PARTITIONS`: el número de particiones. 

 **Ejemplo** 

```
pipedrive_read = glueContext.create_dynamic_frame.from_options(
    connection_type="PIPEDRIVE",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "activites",
        "API_VERSION": "v1",
        "PARTITION_FIELD": "due_date"
        "LOWER_BOUND": "2023-09-07T02:03:00.000Z"
        "UPPER_BOUND": "2024-05-07T02:03:00.000Z"
        "NUM_PARTITIONS": "10"
    }
```

# Referencia de opciones de conexión de Pipedrive
<a name="pipedrive-connection-options"></a>

Existen las siguientes opciones para establecer conexión con Pipedrive:
+  `ENTITY_NAME`(cadena): (obligatorio) se utiliza para leer y escribir. El nombre del objeto en Pipedrive. 
+  `API_VERSION`(cadena): (obligatorio) se utiliza para leer y escribir. Versión de la API de Rest de Pipedrive que desea usar. Ejemplo: v1. 
+  `INSTANCE_URL`(cadena): (obligatorio) URL de la instancia en la que el usuario desea ejecutar las operaciones. Ejemplo: v1. 
+  `SELECTED_FIELDS`(lista<Cadena>): predeterminado: empty(SELECT \$1). Se usa para leer. Columnas que desee seleccionar para el objeto. 
+  `FILTER_PREDICATE`(cadena): predeterminado: vacío. Se usa para leer. Debe estar en el formato de Spark SQL. 
+  `QUERY`(cadena): predeterminado: vacío. Se usa para leer. Consulta completa de Spark SQL. 
+  `PARTITION_FIELD`(cadena): se usa para leer. Campo que se utilizará para particionar la consulta. 
+  `LOWER_BOUND`(cadena): se usa para leer. Un valor de límite inferior inclusivo del campo de partición elegido. 
+  `UPPER_BOUND`(cadena): se usa para leer. Un valor límite superior exclusivo del campo de partición elegido. 
+  `NUM_PARTITIONS`(entero): predeterminado: 1. Se usa para leer. Número de particiones para leer. 

# Limitaciones
<a name="pipedrive-connector-limitations"></a>

El conector de Pipedrive presenta las siguientes limitaciones:
+ Pipedrive admite la partición basada en campos únicamente para una entidad (Actividades).
+ Pipedrive admite la partición basada en registros para las entidades Actividades, Negocios, Notas, Personas, Organizaciones y Productos.
+ En la entidad Negocios, el campo de estado como filtro devolverá todos los registros si se usa un valor de filtro no válido.
+ En la entidad Negocios, no se admite la ordenación por múltiples campos.
+ Para obtener datos de rendimiento, utilizamos una cuenta de AWS local. Sin embargo, debido a la limitación en la actualización del token de acceso a nivel local, el trabajo de AWS Glue falla al procesar 1 GB de datos. Como consecuencia, hemos optimizado la prueba de rendimiento con 179 MB de datos, y los resultados anteriores se basan en esta optimización. No obstante, hemos observado que, a medida que aumenta la cantidad de particiones, el punto de conexión SaaS tarda más tiempo en comparación con una única partición. Hemos consultado con el equipo de soporte de Pipedrive sobre este comportamiento, y nos informaron que Pipedrive limita silenciosamente las solicitudes y retrasa la respuesta. Por lo tanto, al ejecutar el trabajo de AWS Glue con conjuntos de datos grandes o al llamar varias veces al mismo punto de conexión de la API, se puede producir un problema de tiempo de espera debido a la implementación de la API de Pipedrive. Sin embargo, los tiempos de respuesta del conector y de la capa intermedia disminuyen como se esperaba a medida que aumenta la cantidad de particiones.