

# Zoho CRM への接続
<a name="connecting-to-data-zoho-crm"></a>

Zoho CRM は、販売、マーケティング、カスタマーサポートのアクティビティをまとめて、プロセス、ポリシー、人材を 1 つのプラットフォームに合理化する単一のリポジトリとして機能します。Zoho CRM は、あらゆるビジネスのタイプや規模の特定のニーズに合わせて簡単にカスタマイズできます。

Zoho CRM の開発者プラットフォームは、作業を自動化し、エンタープライズスタック間でデータを統合し、ウェブやモバイル用のカスタムソリューションを作成するために、ビジネス/企業向けにローコードツールとプロコードツールの適切に組み合わせて提供します。

**Topics**
+ [AWS Glue の Zoho CRM サポート](zoho-crm-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](zoho-crm-configuring-iam-permissions.md)
+ [Zoho CRM の設定](zoho-crm-configuring.md)
+ [Zoho CRM 接続の設定](zoho-crm-configuring-connections.md)
+ [Zoho CRM エンティティからの読み取り](zoho-crm-reading-from-entities.md)
+ [Zoho CRM 接続オプション](zoho-crm-connection-options.md)
+ [Zoho CRM コネクタの制限と注意事項](zoho-crm-connector-limitations.md)

# AWS Glue の Zoho CRM サポート
<a name="zoho-crm-support"></a>

AWS Glue は、Zoho CRM を次のようにサポートします。

**ソースとしてサポートされていますか?**  
はい – Sync と Async。AWS Glue ETL ジョブを使用して、Zoho CRM からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている Zoho CRM API バージョン**  
次の Zoho CRM API バージョンがサポートされています:
+ v7

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="zoho-crm-configuring-iam-permissions"></a>

次のサンプル ポリシーで、接続の作成と使用に必要な AWS IAM 権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

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

------

上記の方法を使用しない場合は、代わりに次のマネージド IAM ポリシーを使用します:
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには AWS Glue 、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス権限を使用できます。このポリシーは、通常、クローラ、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# Zoho CRM の設定
<a name="zoho-crm-configuring"></a>

AWS Glue を使用して Zoho CRM からデータを転送できるようにするには、次の要件を満たす必要があります:

## 最小要件
<a name="zoho-crm-configuring-min-requirements"></a>

以下に、最小要件を示します。
+ Zoho CRM アカウントを持っている。
+ Zoho CRM アカウントで API アクセスが有効になっている。
+ API コンソールの下に OAuth 認証情報を取得するための登録済みの API クライアントがあります。

# Zoho CRM 接続の設定
<a name="zoho-crm-configuring-connections"></a>

グラントタイプは、AWS Glue が Zoho CRM と通信してデータへのアクセスをリクエストする方法を決定します。選択すると、接続を作成する前に満たす必要がある要件に影響します。Zoho CRM は、OAuth 2.0 の AUTHORIZATION\$1CODE のグラントタイプのみをサポートしています。
+ このグラントタイプは、ユーザーを認証するためにサードパーティーの認証サーバーにユーザーをリダイレクトすることから、「three-legged」の OAuth と見なされます。AWS Glue コンソール経由で接続を作成するときに使用されます。AWS Glue コンソールでは、ユーザーが Zoho CRM にリダイレクトされます。ここではユーザーがログインし、Zoho CRM インスタンスにアクセスするためのリクエストされた権限を Glue に許可する必要があります。
+ ユーザーは、Zoho CRM で独自の接続アプリを作成し、AWS Glue コンソールを介して接続を作成するときに独自のクライアント ID や認証 URL、トークン URL、インスタンス URL を指定することを選択できます。このシナリオでは、引き続き Zoho CRM にリダイレクトされてログインし、リソースへアクセスするために AWS Glue を承認します。
+ このグラントタイプは、更新トークンとアクセストークンになります。アクセストークンの有効期間は 1 時間のままなので、更新トークンを使用することでユーザーとやり取りすることなく自動的に更新される場合があります。
+ 認可コード OAuth フロー用の接続アプリケーションの作成に関する Zoho CRM の公開ドキュメントについては、「[認証](https://www.zoho.com/crm/developer/docs/api/v7/oauth-overview.html)」を参照してください。

Zoho CRM 接続を設定するには:

1. AWS Glue Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[接続タイプ]** を選択する際に、[Zoho CRM] を選択します。

   1. 接続したい Zoho CRM インスタンスの `INSTANCE_URL` を指定します。

   1. ユーザークライアントアプリケーションのクライアント ID を指定します。

   1. ドロップダウンから適切な **[認証 URL]** を選択します。

   1. ドロップダウンから適切な **[トークン URL]** を選択します。

   1. 次のアクションを実行でき、AWS Glue がその権限を持つ AWS IAM ロールを選択します。

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

****  

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

------

   1. AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1. ネットワークを使用する場合は、ネットワークオプションを選択します。

1. AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

1. AWS Glue ジョブ設定で、**[追加のネットワーク接続]** として `connectionName` を指定します。

# Zoho CRM エンティティからの読み取り
<a name="zoho-crm-reading-from-entities"></a>

**前提条件**

読み取り元の Zoho CRM オブジェクト。オブジェクト名が必要になります。

**Sync ソースに対応するエンティティ**:


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティション分割をサポートする | 
| --- | --- | --- | --- | --- | --- | 
| 製品 | はい | あり | あり | あり | あり | 
| Quote | はい | あり | あり | あり | あり | 
| Purchase Order | はい | あり | あり | あり | あり | 
| ソリューション | はい | あり | あり | あり | あり | 
| 電話 | はい | あり | あり | あり | あり | 
| タスク | はい | あり | あり | あり | あり | 
| イベント | はい | あり | あり | あり | あり | 
| Invoice | はい | あり | あり | あり | あり | 
| アカウント | はい | あり | あり | あり | あり | 
| 連絡先 | はい | あり | あり | あり | あり | 
| Vendor | はい | あり | あり | あり | あり | 
| キャンペーン | はい | あり | あり | あり | あり | 
| Deal | はい | あり | あり | あり | あり | 
| リード | はい | あり | あり | あり | あり | 
| Custom Module | はい | あり | あり | あり | あり | 
| Sales Order | はい | あり | あり | あり | あり | 
| Price Books | はい | あり | あり | あり | あり | 
| ケース | はい | あり | あり | あり | あり | 

**例**:

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

**Async ソースに対応するエンティティ**:


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティション分割をサポートする | 
| --- | --- | --- | --- | --- | --- | 
| 製品 | あり | なし | なし | あり | なし | 
| Quote | あり | なし | なし | あり | なし | 
| Purchase Order | あり | なし | なし | あり | なし | 
| ソリューション | あり | なし | なし | あり | なし | 
| 電話 | あり | なし | なし | あり | なし | 
| タスク | あり | なし | なし | あり | なし | 
| イベント | あり | なし | なし | あり | なし | 
| Invoice | あり | なし | なし | あり | なし | 
| アカウント | あり | なし | なし | あり | なし | 
| 問い合わせ | あり | なし | なし | あり | なし | 
| Vendor | あり | なし | なし | あり | なし | 
| キャンペーン | あり | なし | なし | あり | なし | 
| Deal | あり | なし | なし | あり | なし | 
| リード | あり | なし | なし | あり | なし | 
| Custom Module | あり | なし | なし | あり | なし | 
| Sales Order | あり | なし | なし | あり | なし | 
| Price Books | あり | なし | なし | あり | なし | 
| ケース | あり | なし | なし | あり | なし | 

**例**:

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

**Zoho CRM フィールドの詳細**:

Zoho CRM では、サポートされているエンティティのメタデータを動的に取得するためのエンドポイントが提供されます。したがって、オペレータのサポートはデータ型レベルでキャプチャされます。

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

## パーティショニングクエリ
<a name="zoho-crm-reading-partitioning-queries"></a>

パーティショニングは Async モードではサポートされていません。

**フィルターベースのパーティショニング (Sync モード)**:

Spark で同時実行を使用する場合は、追加の Spark オプション `PARTITION_FIELD`、`LOWER_BOUND`、`UPPER_BOUND`、および `NUM_PARTITIONS` を指定できます。これらのパラメータを使用すると、元のクエリは Spark タスクで同時に実行できるサブクエリの `NUM_PARTITIONS` の数に分割されます。
+ `PARTITION_FIELD`: クエリのパーティション化に使用するフィールドの名前。
+ `LOWER_BOUND`: 選択したパーティションフィールドの**包括的な**下限値。

  Datetime フィールドでは、Spark SQL クエリで使用される Spark タイムスタンプ形式を受け入れます。

  有効な値の例は次のとおりです:

  ```
  "2024-09-30T01:01:01.000Z"
  ```
+ `UPPER_BOUND`: 選択したパーティションフィールドの**排他的**上限値。
+ `NUM_PARTITIONS`: パーティション数。

例:

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

# Zoho CRM 接続オプション
<a name="zoho-crm-connection-options"></a>

Zoho CRM の接続オプションは次のとおりです:
+ `ENTITY_NAME` (文字列) – (必須) 読み取りに使用されます。Zoho CRM のオブジェクトの名前。
+ `API_VERSION` (文字列) – (必須) 読み取りに使用されます。使用する Zoho CRM Rest API バージョン。
+ `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+ `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+ `QUERY`(文字列) - デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。
+ `PARTITION_FIELD`(文字列) - 読み取りに使用されます。クエリをパーティション化するために使用するフィールドです。
+ `LOWER_BOUND`(文字列) - 読み取りに使用されます。選択したパーティションフィールドの包括的な下限値。
+ `UPPER_BOUND` (文字列) - 読み取りに使用されます。選択したパーティションフィールドの排他的上限値。
+ `NUM_PARTITIONS`(整数) – デフォルト: 1。読み込みに使用されます。読み取り用のパーティションの数です。
+ `INSTANCE_URL` (文字列) – (必須) 読み取りに使用されます。有効な Zoho CRM インスタンス URL。
+ `TRANSFER_MODE`(文字列) - クエリを Async モードで実行するかどうかを示すために使用されます。

# Zoho CRM コネクタの制限と注意事項
<a name="zoho-crm-connector-limitations"></a>

Zoho CRM コネクタの制限と注意事項は次のとおりです:
+ API バージョン v7 では、最大 100,000 件のレコードをフェッチできます。[Zoho のドキュメント](https://www.zoho.com/crm/developer/docs/api/v7/get-records.html)を参照してください。
+ イベントエンティティの場合、「会議」というラベルが[Zoho のドキュメント](https://www.zoho.com/crm/developer/docs/api/v7/modules-api.html)で説明されているように表示されます。
+ Select All 機能の場合:
  + GET コールと POST コールの両方で、SaaS から最大 50 個のフィールドをフェッチできます。
  + 最初の 50 個のフィールドに属さない特定のフィールドのデータがある場合は、選択したフィールドのリストを手動で指定する必要があります。
  + 50 以上のフィールドが選択されている場合、50 を超えるフィールドはすべて調整され、Amazon S3 には NULL データが入ります。
  + フィルター式の場合、ユーザーが指定した 50 個のフィールドのリストに「id」と「Created\$1Time」がない場合、カスタム例外が発生し、ユーザーにこれらのフィールドを含めるように求められます。
+ フィルター演算子は、データ型が同じであっても、フィールドに応じて異なる場合があります。したがって、SaaS プラットフォームでエラーをトリガーするフィールドには、別の演算子を手動で指定する必要があります。
+ Sort By 機能の場合:
  + データはフィルター式なしで 1 つのフィールドでのみソートできますが、フィルター式が適用されると複数のフィールドでソートできます。
  + 選択したフィールドにソート順が指定されていない場合、データはデフォルトで昇順で取得されます。
+ Zoho CRM コネクタでサポートされているリージョンは、米国、欧州、インド、オーストラリア、および日本です。
+ Async 読み取り機能 [制限事項:](https://www.zoho.com/crm/developer/docs/api/v7/bulk-read/limitations.html)
  + Async モードでは、制限順序およびパーティショニングはサポートされていません。
  + Async モードでは、最大 500 ページ、1 ページあたり 200,000 レコードのデータを転送できます。
  + 1 分間隔では、ダウンロードできるリクエストは 10 件のみです。ダウンロード制限を超えると、システムは HTTP 429 エラーを返し、すべてのダウンロードリクエストを 1 分間一時停止し、その後処理が再開されます。
  + 一括ジョブが完了したら、ダウンロード可能なファイルには 1 日間のみアクセスできます。その後、エンドポイント経由でファイルにアクセスすることはできません。
  + エンドポイントを介して指定できる選択フィールドは最大 200 個です。エンドポイントで 200 を超える選択フィールドを指定すると、そのモジュールで使用可能なすべてのフィールドが自動的にエクスポートされます。
  + モジュールで作成された外部フィールドは、Bulk Read API ではサポートされていません。
  + この API エンドポイントでは、Sorting および `Group_by` 句はサポートされていません。
  + 機密ヘルスデータを含むフィールドの値は、コンプライアンス設定の **[API を介したデータアクセスの制限]** オプションが **[無効]** になっている場合にのみ取得されます。オプションが有効になっている場合、結果は **[空]** になります。
  + フィルタリング/基準の制限
    + クエリで使用できる基準の最大数は 25 です。
    + 複数行のテキストフィールドでのフィルタリング/基準はサポートされていません。