

# Conexión a Zoho CRM
<a name="connecting-to-data-zoho-crm"></a>

Zoho CRM actúa como un repositorio único para reunir las actividades de ventas, marketing y atención al cliente y optimizar los procesos, las políticas y las personas en una sola plataforma. Zoho CRM se puede personalizar fácilmente para satisfacer las necesidades específicas de cualquier tipo y tamaño de empresa.

La plataforma para desarrolladores de Zoho CRM ofrece la combinación perfecta de herramientas sencillas y programables para que las empresas automaticen el trabajo, integren los datos en toda la gama empresarial y creen soluciones personalizadas para la web y los dispositivos móviles.

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

# Compatibilidad de AWS Glue con Zoho CRM
<a name="zoho-crm-support"></a>

AWS Glue es compatible con Zoho CRM de la siguiente manera:

**¿Es compatible como origen?**  
Sí: sincrónica y asincrónica. Puede usar los trabajos de ETL de AWS Glue para consultar datos de Zoho CRM.

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

**Versiones de la API de Zoho CRM compatibles**  
Las siguientes versiones de la API de Zoho CRM son compatibles:
+ v7

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

En el siguiente ejemplo de política se describen los permisos de AWS IAM 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": "*"
    }
  ]
}
```

------

Si no desea utilizar el método anterior, puede utilizar las siguientes políticas de IAM administradas:
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole): da acceso a recursos que precisan 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): otorga 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 Zoho CRM
<a name="zoho-crm-configuring"></a>

Antes de poder utilizar AWS Glue para transferir datos desde Zoho CRM, debe cumplir estos requisitos:

## Requisitos mínimos
<a name="zoho-crm-configuring-min-requirements"></a>

Los requisitos mínimos son los siguientes:
+ Tiene una cuenta de Zoho CRM.
+ Su cuenta de Zoho CRM tiene acceso a la API.
+ Tiene un cliente de API registrado en la consola de API para obtener las credenciales de OAuth.

# Configuración de conexiones de Zoho CRM
<a name="zoho-crm-configuring-connections"></a>

El tipo de concesión determina cómo se comunica AWS Glue con Zoho CRM para solicitar el acceso a sus datos. Su elección afecta a los requisitos que debe cumplir antes de crear la conexión. Zoho CRM solo admite el tipo de concesión AUTHORIZATION\$1CODE para OAuth 2.0.
+ Este tipo de concesión se considera un OAuth de “tres vías”, ya que se basa en redirigir a los usuarios a un servidor de autorización externo para autenticar al usuario. Se utiliza para crear conexiones a través de la consola de AWS Glue. La consola de AWS Glue redirigirá al usuario a Zoho CRM, donde deberá iniciar sesión y permitir a Glue que los permisos solicitados accedan a su instancia de Zoho CRM.
+ Los usuarios aún pueden optar por crear su propia aplicación conectada en Zoho CRM y proporcionar su propio ID, URL de autenticación, URL de token y URL de instancia al crear conexiones a través de la consola de AWS Glue. En este escenario, se abrirá Zoho CRM 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 seguirá siendo válido durante una hora y se puede actualizar automáticamente sin la interacción del usuario mediante el token de actualización.
+ Para ver la documentación pública de Zoho CRM sobre la creación de una aplicación conectada para el flujo de OAuth con código de autorización, consulte [Authentication](https://www.zoho.com/crm/developer/docs/api/v7/oauth-overview.html).

Configuración de una conexión de Zoho CRM:

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

   1. Al seleccionar un **Tipo de conexión**, seleccione Zoho CRM.

   1. Proporcione el elemento `INSTANCE_URL` de la instancia de Zoho CRM a la que quiere conectarse.

   1. Proporcione el ID de cliente de la aplicación cliente del usuario.

   1. Seleccione la **URL de autenticación** correspondiente en el menú desplegable.

   1. Seleccione la **URL del token** correspondiente en el menú desplegable.

   1. Seleccione el rol de AWS 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. 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`.

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

# Lectura de entidades de Zoho CRM
<a name="zoho-crm-reading-from-entities"></a>

**Requisito previo**

Objetos de Zoho CRM desde los que desea leer. Necesitará el nombre del objeto.

**Entidades compatibles para el origen sincrónico:**


| Entidad | Se puede filtrar | Admite límite | Admite Ordenar por | Admite Seleccionar \$1 | Admite partición | 
| --- | --- | --- | --- | --- | --- | 
| Producto | Sí | Sí | Sí | Sí | Sí | 
| Cotización | Sí | Sí | Sí | Sí | Sí | 
| Orden de compra | Sí | Sí | Sí | Sí | Sí | 
| Solución | Sí | Sí | Sí | Sí | Sí | 
| Llame a | Sí | Sí | Sí | Sí | Sí | 
| Tarea | Sí | Sí | Sí | Sí | Sí | 
| Evento | Sí | Sí | Sí | Sí | Sí | 
| Factura | Sí | Sí | Sí | Sí | Sí | 
| Cuenta | Sí | Sí | Sí | Sí | Sí | 
| Contacto | Sí | Sí | Sí | Sí | Sí | 
| Proveedor | Sí | Sí | Sí | Sí | Sí | 
| Campaña | Sí | Sí | Sí | Sí | Sí | 
| Acuerdo | Sí | Sí | Sí | Sí | Sí | 
| Cliente potencial | Sí | Sí | Sí | Sí | Sí | 
| Módulo personalizado | Sí | Sí | Sí | Sí | Sí | 
| Pedido de ventas | Sí | Sí | Sí | Sí | Sí | 
| Libros de precios | Sí | Sí | Sí | Sí | Sí | 
| Caso | Sí | Sí | Sí | Sí | Sí | 

**Ejemplo:**

```
zoho_read = glueContext.create_dynamic_frame.from_options(
    connection_type="ZOHO",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "entityName",
        "API_VERSION": "v7",
        "INSTANCE_URL": "https://www.zohoapis.in/"
    }
```

**Entidades compatibles para el origen asincrónico**:


| Entidad | Se puede filtrar | Admite límite | Admite Ordenar por | Admite Seleccionar \$1 | Admite partición | 
| --- | --- | --- | --- | --- | --- | 
| Producto | Sí | No | No | Sí | No | 
| Cotización | Sí | No | No | Sí | No | 
| Orden de compra | Sí | No | No | Sí | No | 
| Solución | Sí | No | No | Sí | No | 
| Llame a | Sí | No | No | Sí | No | 
| Tarea | Sí | No | No | Sí | No | 
| Evento | Sí | No | No | Sí | No | 
| Factura | Sí | No | No | Sí | No | 
| Cuenta | Sí | No | No | Sí | No | 
| Contacto | Sí | No | No | Sí | No | 
| Proveedor | Sí | No | No | Sí | No | 
| Campaña | Sí | No | No | Sí | No | 
| Acuerdo | Sí | No | No | Sí | No | 
| Cliente potencial | Sí | No | No | Sí | No | 
| Módulo personalizado | Sí | No | No | Sí | No | 
| Pedido de ventas | Sí | No | No | Sí | No | 
| Libros de precios | Sí | No | No | Sí | No | 
| Caso | Sí | No | No | Sí | No | 

**Ejemplo:**

```
zoho_read = glueContext.create_dynamic_frame.from_options(
    connection_type="ZOHO",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "entityName",
        "API_VERSION": "v7",
        "INSTANCE_URL": "https://www.zohoapis.in/",
        "TRANSFER_MODE": "ASYNC"
    }
```

**Detalles de los campos de Zoho CRM**:

Zoho CRM proporciona puntos de conexión para obtener metadatos de forma dinámica para las entidades compatibles. Por lo tanto, la compatibilidad del operador se captura según el tipo de datos.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/zoho-crm-reading-from-entities.html)

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

No se admite la partición en el modo asíncrono.

**Partición basada en filtros (modo sincrónico)**:

Puede proporcionar las opciones adicionales de Spark `PARTITION_FIELD`, `LOWER_BOUND`, `UPPER_BOUND` y `NUM_PARTITIONS` si quiere utilizar 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 utilizará para particionar la consulta.
+ `LOWER_BOUND`: un valor de límite inferior **inclusivo** del campo de partición elegido.

  En el campo Datetime, aceptamos el formato de marca de tiempo de Spark que se utiliza en las consultas SQL de Spark.

  Ejemplos de valor válido:

  ```
  "2024-09-30T01:01:01.000Z"
  ```
+ `UPPER_BOUND`: un valor límite superior **exclusivo** del campo de partición elegido.
+ `NUM_PARTITIONS`: el número de particiones.

Ejemplo:

```
zoho_read = glueContext.create_dynamic_frame.from_options(
    connection_type="zohocrm",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "entityName",
        "API_VERSION": "v7",
        "PARTITION_FIELD": "Created_Time"
        "LOWER_BOUND": "2022-01-01T01:01:01.000Z"
        "UPPER_BOUND": "2024-01-01T01:01:01.000Z"
        "NUM_PARTITIONS": "10"
    }
```

# Opciones de conexión de Zoho CRM
<a name="zoho-crm-connection-options"></a>

Las siguientes son opciones de conexión para Zoho CRM:
+ `ENTITY_NAME`(cadena): (obligatorio) se usa para lectura. El nombre de su objeto en Zoho CRM.
+ `API_VERSION`(cadena): (obligatorio) se usa para lectura. Versión de la API de REST de Zoho CRM que desea usar.
+ `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.
+ `INSTANCE_URL`(cadena): (obligatorio) se usa para lectura. Una URL de la instancia de Zoho CRM válida.
+ `TRANSFER_MODE`(Cadena): se usa para indicar si la consulta debe ejecutarse en modo asíncrono.

# Limitaciones y notas del conector de Zoho CRM
<a name="zoho-crm-connector-limitations"></a>

Las siguientes son limitaciones o notas para el conector de Zoho CRM:
+ Con la versión 7 de la API, puede obtener un máximo de 100 000 registros. Consulte la [documentación de Zoho](https://www.zoho.com/crm/developer/docs/api/v7/get-records.html).
+ En el caso de la entidad del evento, se muestra la etiqueta “Reunión”, tal y como se menciona en la [documentación de Zoho](https://www.zoho.com/crm/developer/docs/api/v7/modules-api.html).
+ Funcionalidad Seleccionar todo:
  + Puede obtener un máximo de 50 campos de SaaS para las llamadas GET y POST.
  + Si desea disponer de datos para algún campo específico que no pertenezca a los primeros 50 campos, tendrá que proporcionar manualmente la lista de campos seleccionados.
  + Si se seleccionan más de 50 campos, todos los campos que superen los 50 campos se recortarán y contendrán datos nulos en Amazon S3. 
  + En el caso de una expresión de filtro, si la lista de 50 campos proporcionada por el usuario no incluye “id” ni “Created\$1Time”, se generará una excepción personalizada para solicitar al usuario que incluya estos campos.
+ Los operadores de filtro pueden variar de un campo a otro a pesar de tener el mismo tipo de datos. Por lo tanto, debe especificar manualmente un operador diferente para cualquier campo que desencadene un error en la plataforma de SaaS. 
+ Funcionalidad Ordenar por:
  + Los datos solo se pueden ordenar por un único campo sin una expresión de filtro, mientras que los datos se pueden ordenar por varios campos cuando se aplica una expresión de filtro.
  + Si no se especifica ningún orden de clasificación para el campo seleccionado, los datos se recuperarán en orden ascendente de forma predeterminada. 
+ Las regiones compatibles con el conector de Zoho CRM son EE. UU., Europa, India, Australia y Japón.
+ [Limitaciones](https://www.zoho.com/crm/developer/docs/api/v7/bulk-read/limitations.html) de la funcionalidad de lectura asíncrona:
  + Las órdenes limitadas por y la partición no son compatibles en el modo asíncrono. 
  + En el modo asíncrono podemos transferir datos de hasta 500 páginas con 200 000 registros por página.
  + Durante un intervalo de un minuto, solo se permiten 10 solicitudes de descarga. Cuando se supera el límite de descargas, el sistema devuelve un error HTTP 429 y detiene todas las solicitudes de descarga por un minuto antes de que se pueda reanudar el procesamiento.
  + Tras completar el trabajo masivo, solo podrá acceder al archivo descargable durante un período de un día. Después de eso, no podrá acceder al archivo a través de puntos de conexión.
  + Se puede proporcionar un máximo de 200 campos seleccionados a través de un punto de conexión. Si especifica más de 200 campos de selección en un punto de conexión, el sistema exportará automáticamente todos los campos disponibles para ese módulo.
  + Sin importar en qué módulos se crearon los campos externos no son compatibles con las API de lectura masiva.
  + La clasificación y las cláusulas `Group_by` no se admiten a través de este punto de conexión de la API.
  + Los valores de los campos con datos de estado confidenciales solo se recuperarán cuando la opción **Restringir el acceso a los datos a través de la API** en la configuración de cumplimiento esté **desactivada**. Si la opción está habilitada, el valor aparecerá como **vacío** en el resultado.
  + Límites de filtrado/criterios
    + El número máximo de criterios que pueden utilizarse en una consulta es 25.
    + No se admite el filtrado ni los criterios en los campos de texto multilínea.