

# Conexão com o Zoho CRM
<a name="connecting-to-data-zoho-crm"></a>

O Zoho CRM atua como um repositório único para reunir as atividades de vendas, marketing e atendimento ao cliente e simplificar processos, políticas e pessoas em uma única plataforma. O Zoho CRM pode ser facilmente personalizado para atender às necessidades específicas de empresas de qualquer tipo e tamanho.

A plataforma de desenvolvedores do Zoho CRM oferece a combinação certa de ferramentas low-code e pro-code para que negócios/empresas automatizem o trabalho, integrem dados em toda a pilha corporativa e criem soluções personalizadas para a Web e dispositivos móveis.

**Topics**
+ [Suporte do AWS Glue ao Zoho CRM](zoho-crm-support.md)
+ [Políticas que contêm as operações de API para criar e usar conexões](zoho-crm-configuring-iam-permissions.md)
+ [Configuração do Zoho CRM](zoho-crm-configuring.md)
+ [Configuração de conexões do Zoho CRM](zoho-crm-configuring-connections.md)
+ [Leitura de entidades do Zoho CRM](zoho-crm-reading-from-entities.md)
+ [Opções de conexão do Zoho CRM](zoho-crm-connection-options.md)
+ [Limitações e notas do conector do Zoho CRM](zoho-crm-connector-limitations.md)

# Suporte do AWS Glue ao Zoho CRM
<a name="zoho-crm-support"></a>

O AWS Glue oferece suporte ao Zoho CRM da seguinte maneira:

**Compatível como fonte?**  
Sim: SYNC e ASYNC. Você pode usar trabalhos de ETL do AWS Glue para consultar dados do Zoho CRM.

**Compatível como destino?**  
N.º

**Versões compatíveis da API do Zoho CRM**  
As seguintes versões da API do Zoho CRM são compatíveis:
+ v7

# Políticas que contêm as operações de API para criar e usar conexões
<a name="zoho-crm-configuring-iam-permissions"></a>

O exemplo de política a seguir descreve as permissões necessárias do AWS IAM para criar e usar conexões. Se você estiver criando um novo perfil, crie uma política que contenha o seguinte:

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

****  

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

------

Se você não quiser usar o método acima, como alternativa use as seguintes políticas do IAM gerenciadas:
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – Concede acesso a recursos que vários processos do AWS Glue exigem para fazer a execução em seu nome. Esses recursos incluem o AWS Glue, Amazon S3, IAM, CloudWatch Logs e Amazon EC2. Se você seguir a convenção de nomenclatura para os recursos especificados nesta política, os processos do AWS Glue terão as permissões necessárias. Esta política geralmente é anexada a funções especificadas durante a definição de crawlers, trabalhos e endpoints de desenvolvimento.
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess): concede acesso total aos recursos do AWS Glue quando uma identidade à qual a política está anexada usa o Console de Gerenciamento da AWS. Se você seguir a convenção de nomenclatura para os recursos especificados nesta política, os usuários poderão acessar todos os recursos do console. Esta política geralmente é anexada aos usuários do console do AWS Glue.

# Configuração do Zoho CRM
<a name="zoho-crm-configuring"></a>

Antes de poder usar o AWS Glue para transferir dados do Zoho CRM, você precisa atender aos seguintes requisitos:

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

Estes são os requisitos mínimos:
+ Ter uma conta do Zoho CRM.
+ A conta do Zoho CRM precisa estar habilitada para acesso à API.
+ Ter um cliente de API registrado no console da API para obter as credenciais do OAuth.

# Configuração de conexões do Zoho CRM
<a name="zoho-crm-configuring-connections"></a>

O tipo de concessão determina como o AWS Glue se comunica com o Zoho CRM para solicitar acesso aos seus dados. A escolha afeta os requisitos que você deve atender antes de criar a conexão. O Zoho CRM só é compatível com o tipo de concessão AUTHORIZATION\$1CODE para OAuth 2.0.
+ Esse tipo de concessão é considerado um OAuth de “três pernas”, pois conta com o redirecionamento dos usuários para um servidor de autorização de terceiros para autenticar o usuário. É usado ao criar conexões por meio do console do AWS Glue. O console do AWS Glue redirecionará o usuário para o Zoho CRM, onde ele deverá fazer login e dar autorização para que as permissões solicitadas pelo Glue acessem a instância do Zoho CRM.
+ Os usuários ainda podem optar por criar sua própria aplicação conectada no Zoho CRM e fornecer os próprios ID de cliente, URL de autorização, URL de token e URL de instância quando criarem conexões por meio do Console do AWS Glue. Nesse cenário, eles ainda serão redirecionados para o Zoho CRM para fazer login e autorizar o acesso do AWS Glue aos recursos.
+ Esse tipo de concessão resulta em um token de atualização e um token de acesso. O token de acesso permanecerá válido por uma hora e poderá ser atualizado automaticamente sem a interação do usuário por meio do token de atualização.
+ Para obter a documentação pública do Zoho CRM sobre como criar uma aplicação conectada para o fluxo de código de autorização do OAuth, consulte [Autenticação](https://www.zoho.com/crm/developer/docs/api/v7/oauth-overview.html).

Para configurar uma conexão do Zoho CRM:

1. No AWS Glue Glue Studio, crie uma conexão em **Conexões de dados** seguindo estas etapas:

   1. Ao selecionar um **Tipo de conexão**, selecione Zoho CRM.

   1. Forneça o `INSTANCE_URL` da instância do Zoho CRM à qual você deseja se conectar.

   1. Forneça o ID do cliente da aplicação cliente do usuário.

   1. Selecione o **URL de autorização** apropriado no menu suspenso.

   1. Selecione o **URL do token** apropriado no menu suspenso.

   1. Selecione o perfil do AWS IAM que o AWS Glue pode assumir e tem permissões para as seguintes ações:

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

****  

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

------

   1. Selecione o `secretName` que você deseja usar para essa conexão no AWS Glue para colocar os tokens.

   1. Selecione as opções de rede se quiser usar sua rede.

1. Conceda permissão ao perfil do IAM associado ao seu trabalho do AWS Glue para ler `secretName`.

1. Na configuração do trabalho do AWS Glue, forneça `connectionName` como uma **Conexão de rede adicional**.

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

**Pré-requisito**

Objetos do Zoho CRM dos quais você deseja ler. Você precisará do nome do objeto.

**Entidades compatíveis com a fonte de Sync**:


| Entidade | Pode ser filtrada | Oferece suporte a limite | Oferece suporte a Ordenar por | Oferece suporte a Selecionar \$1 | Oferece suporte a particionamento | 
| --- | --- | --- | --- | --- | --- | 
| Produto | Sim | Sim | Sim | Sim | Sim | 
| Cotação | Sim | Sim | Sim | Sim | Sim | 
| Ordem de compra | Sim | Sim | Sim | Sim | Sim | 
| Solução | Sim | Sim | Sim | Sim | Sim | 
| Chame | Sim | Sim | Sim | Sim | Sim | 
| Tarefa | Sim | Sim | Sim | Sim | Sim | 
| Event | Sim | Sim | Sim | Sim | Sim | 
| Fatura | Sim | Sim | Sim | Sim | Sim | 
| Conta | Sim | Sim | Sim | Sim | Sim | 
| Contato | Sim | Sim | Sim | Sim | Sim | 
| Fornecedor | Sim | Sim | Sim | Sim | Sim | 
| Campaign | Sim | Sim | Sim | Sim | Sim | 
| Oferta | Sim | Sim | Sim | Sim | Sim | 
| Lead | Sim | Sim | Sim | Sim | Sim | 
| Módulo personalizado | Sim | Sim | Sim | Sim | Sim | 
| Ordem de venda | Sim | Sim | Sim | Sim | Sim | 
| Catálogos de preços | Sim | Sim | Sim | Sim | Sim | 
| Caso | Sim | Sim | Sim | Sim | Sim | 

**Exemplo:**

```
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 compatíveis com a fonte de ASYNC**:


| Entidade | Pode ser filtrada | Oferece suporte a limite | Oferece suporte a Ordenar por | Oferece suporte a Selecionar \$1 | Oferece suporte a particionamento | 
| --- | --- | --- | --- | --- | --- | 
| Produto | Sim | Não | Não | Sim | Não | 
| Cotação | Sim | Não | Não | Sim | Não | 
| Ordem de compra | Sim | Não | Não | Sim | Não | 
| Solução | Sim | Não | Não | Sim | Não | 
| Chame | Sim | Não | Não | Sim | Não | 
| Tarefa | Sim | Não | Não | Sim | Não | 
| Event | Sim | Não | Não | Sim | Não | 
| Fatura | Sim | Não | Não | Sim | Não | 
| Conta | Sim | Não | Não | Sim | Não | 
| Contato | Sim | Não | Não | Sim | Não | 
| Fornecedor | Sim | Não | Não | Sim | Não | 
| Campaign | Sim | Não | Não | Sim | Não | 
| Oferta | Sim | Não | Não | Sim | Não | 
| Lead | Sim | Não | Não | Sim | Não | 
| Módulo personalizado | Sim | Não | Não | Sim | Não | 
| Ordem de venda | Sim | Não | Não | Sim | Não | 
| Catálogos de preços | Sim | Não | Não | Sim | Não | 
| Caso | Sim | Não | Não | Sim | Não | 

**Exemplo:**

```
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"
    }
```

**Detalhes dos campos do Zoho CRM**:

O Zoho CRM fornece endpoints para a busca de metadados de forma dinâmica para entidades compatíveis. Portanto, o suporte do operador é capturado no nível do tipo de dados.

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

## Particionamento de consultas
<a name="zoho-crm-reading-partitioning-queries"></a>

O particionamento não é compatível no modo ASYNC.

**Particionamento baseado em filtro (modo SYNC)**:

É possível fornecer as opções adicionais do Spark `PARTITION_FIELD`, `LOWER_BOUND`, `UPPER_BOUND` e `NUM_PARTITIONS` se quiser utilizar a simultaneidade no Spark. Com esses parâmetros, a consulta original seria dividida em `NUM_PARTITIONS` subconsultas, que poderiam ser executadas pelas tarefas do Spark simultaneamente.
+ `PARTITION_FIELD`: o nome do campo a ser usado para particionar a consulta.
+ `LOWER_BOUND`: um valor limite inferior **inclusivo** do campo de partição escolhido.

  No campo Datetime, aceitamos o formato de carimbo de data/hora do Spark usado em consultas SQL do Spark.

  Exemplos de valores válidos:

  ```
  "2024-09-30T01:01:01.000Z"
  ```
+ `UPPER_BOUND`: um valor limite superior **exclusivo** do campo de partição escolhido.
+ `NUM_PARTITIONS`: o número de partições.

Exemplo:

```
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"
    }
```

# Opções de conexão do Zoho CRM
<a name="zoho-crm-connection-options"></a>

Estas são as opções de conexão do Zoho CRM:
+ `ENTITY_NAME` (String): (obrigatório) usado para leitura. O nome do seu objeto no Zoho CRM.
+ `API_VERSION` (String): (obrigatório) usado para leitura. Versão da API Rest do Zoho CRM que você deseja usar.
+ `SELECTED_FIELDS`(Lista<String>): padrão: vazio(SELECIONE \$1). Usado para leitura. Colunas que deseja selecionar para o objeto.
+ `FILTER_PREDICATE`(string): padrão: vazio. Usado para leitura. Deve estar no formato Spark SQL.
+ `QUERY`(String): padrão: vazia. Usado para leitura. Consulta completa do Spark SQL.
+ `PARTITION_FIELD`(string): usado para leitura. Campo a ser usado para particionar a consulta.
+ `LOWER_BOUND`(string): usado para leitura. Um valor limite inferior inclusivo do campo de partição escolhido.
+ `UPPER_BOUND`(string): usado para leitura. Um valor limite superior exclusivo do campo de partição escolhido.
+ `NUM_PARTITIONS`(Inteiro): padrão: 1. Usado para leitura. Número de partições para leitura.
+ `INSTANCE_URL` (String): (obrigatório) usado para leitura. Um URL válido da instância do Zoho CRM.
+ `TRANSFER_MODE` (String): usado para indicar se a consulta deve ser executada no modo ASYNC.

# Limitações e notas do conector do Zoho CRM
<a name="zoho-crm-connector-limitations"></a>

Estas são as limitações ou notas do conector do Zoho CRM:
+ Com a versão v7 da API, você pode buscar no máximo 100 mil registros. Consulte a [documentação do Zoho](https://www.zoho.com/crm/developer/docs/api/v7/get-records.html).
+ Para a entidade Evento, o rótulo “Reunião” é exibido conforme mencionado na [documentação do Zoho](https://www.zoho.com/crm/developer/docs/api/v7/modules-api.html).
+ Na funcionalidade Selecionar tudo:
  + Você pode buscar no máximo 50 campos de SaaS para as chamadas GET e POST.
  + Se você quiser ter dados para algum campo específico que não pertença aos primeiros 50 campos, precisará fornecer manualmente a lista dos campos selecionados.
  + Se mais de 50 campos forem selecionados, todos os campos além dos 50 campos serão removidos e conterão dados nulos no Amazon S3. 
  + No caso de uma expressão de filtro, se a lista de 50 campos fornecida pelo usuário não incluir “id” e “Created\$1Time”, uma exceção personalizada será gerada para solicitar que o usuário inclua estes campos.
+ Os operadores de filtro podem variar de campo para campo, apesar de terem o mesmo tipo de dados. Portanto, você deve especificar manualmente um operador diferente para qualquer campo que acione um erro na plataforma SaaS. 
+ Na funcionalidade Classificar por:
  + Os dados só podem ser classificados por um único campo sem uma expressão de filtro, ao passo que os dados podem ser classificados por vários campos quando uma expressão de filtro é aplicada.
  + Se nenhuma ordem de classificação for especificada para o campo selecionado, os dados serão recuperados em ordem crescente, por padrão. 
+ As regiões compatíveis com o conector do Zoho CRM são EUA, Europa, Índia, Austrália e Japão.
+ [Limitações](https://www.zoho.com/crm/developer/docs/api/v7/bulk-read/limitations.html) da funcionalidade de leitura assíncrona:
  + Limite, ordenar por e particionamento não são compatíveis no modo ASYNC. 
  + No modo ASYNC, podemos transferir dados de até 500 páginas com 200 mil registros por página.
  + Em um intervalo de um minuto, somente dez solicitações podem ser baixadas. Quando você excede o limite de download, o sistema retorna um erro HTTP 429 e pausa todas as solicitações de download por um minuto antes que o processamento possa continuar.
  + Depois de concluir o trabalho em massa, você poderá acessar o arquivo para download somente por um dia. Depois disso, você não poderá acessar o arquivo via endpoints.
  + Um máximo de 200 campos selecionados podem ser fornecidos por um endpoint. Se você especificar mais de 200 campos selecionados em um endpoint, o sistema exportará automaticamente todos os campos disponíveis para esse módulo.
  + Os campos externos criados em qualquer módulo não são compatíveis com as APIs de leitura em massa.
  + A classificação e as cláusulas `Group_by` não são compatíveis via esse endpoint da API.
  + Os valores dos campos com dados de saúde confidenciais serão recuperados somente quando a opção **Restringir acesso a dados por meio da API** nas configurações de conformidade estiver **desabilitada**. Se a opção estiver habilitada, o valor ficará **vazio** no resultado.
  + Limites de filtragem e critérios
    + O número máximo de critérios que podem ser usados em uma consulta é 25.
    + A filtragem e os critérios em campos de texto de várias linhas não são compatíveis.