Zoho CRMで顧客管理を行われている場合に、Googleスプレッドシートで管理しているデータや、Googleフォームで収集したデータを自動でZoho CRMに同期したいといったことがあります。

ノーコードでこの同期を実装できる有料のハブツールもいくつか存在しますが、Zoho周辺のサードパーティ製品の多くがまだまだ日本語化に対応していなかったり、サブスクのランニングコストがそれなりの費用であったりするので、ややハードルが高い印象です。

このため、Zoho CRM APIを使用してGASで同期処理を構築しようとすると、こちらもハードルが低くありません。実際に構築をご希望される場合にはお問い合わせいただければと思いますが、構築の流れだけ簡単に説明しておきたいと思います。

Zoho API Consoleでクライアントを作成する

初めに、Zoho API Consoleで、Zoho側にAPI認証用のクライアントを構築する必要があります。

ここでのポイントは「Client Type」を「Server-based Applications」にすることと、「Authorized Redirect URIs」を「https://script.google.com/macros/d/{GASプロジェクトのスクリプトID}/usercallback」で設定することです。

{GASプロジェクトのスクリプトID}は、下図のように、Apps Scrptの「プロジェクトの設定」画面からコピーします。

スクリプトID取得画面
GASスクリプトID取得画面

「Client Name」は何のためのAPIクライアントなのかを表すための名称です。「Homepage URL」は、特にこれでなきゃ駄目というURLはありませんので、GASであれば https://script.google.com で良いかと思います。

クライアント作成画面
APIクライアント作成画面

「CREATE」ボタンをクリックすると、「Client ID」と「Client Secret」が生成されるので、これらの値を使用して、同期に必要なアクセストークンを生成します。

クライアントシークレット取得画面

Zoho CRM APIへのアクセス承認

続いて、OAuthを使用してZoho CRM APIへのアクセス承認作業を行います。この承認作業を行う方法は、大きく2通りありまして、ブラウザを使用して行う方法と、GAS側から要求する方法です。

今回はブラウザを使用して行う方法を簡単にご説明いたします。

https://accounts.zoho.jp/oauth/v2/auth?scope=ZohoCRM.settings.fields.ALL,ZohoCRM.modules.ALL&client_id={取得したClient ID}&response_type=code&access_type=offline&redirect_uri={APIクライアントに設定したAuthorized Redirect URIs}

上記の {取得したClient ID} と {APIクライアントに設定したAuthorized Redirect URIs} の部分を、事前に用意してある値に置き換えてください。そしてそのURLをお使いのブラウザの新規タブに貼り付けてアクセスしてください。

すると、Zoho CRM APIへのアクセス承認画面が表示されるので、「承認する」をクリックします。

Zoho CRM API承認画面

画面が変わったら、アドレスバーに表示されているURLの ?code= と &location の間の値をコピーしてください。

認可コード取得画面
https://script.google.com/macros/d/123456789abcdefg/usercallback?code=1000.1a2ea5gaj5g56afaikokae956rgajifrahufaf63a&location=jp&accounts-server=https%3A%2F%2Faccounts.zoho.jp&

上記の例でいうと、 1000.1a2ea5gaj5g56afaikokae956rgajifrahufaf63a の部分です。

アクセストークンとリフレッシュトークンを発行する

ここまでで取得した値を使用して、最後にアクセストークンとリフレッシュトークンを発行します。

私はWindowsを使用しているので、Windows PowerShellで発行するためのコードを以下に記します。

$body = @{
    code = "1000.1a2ea5gaj5g56afaikokaufaf63a"
    redirect_uri = "https://script.google.com/macros/d/123456789abcdefg/usercallback"
    client_id = "1000.ekgr95gaignkfrahgasg5"
    client_secret = "efaji8e4a6ashehgralkel"
    grant_type = "authorization_code"
}

Invoke-RestMethod -Method Post -Uri "https://accounts.zoho.jp/oauth/v2/token" -Body $body

上記の「code」「redirect_uri」「client_id」「client_secret」をここまでに取得してきた値に全て置き換えてください(上記の例は適当な値なのでエラーになります)。

置き換えた後、WindowsのスタートメニューからPowerShellを開き、コピーしたコードを貼り付けて [ENTER] キーを押下してください。

成功すると、下記のように「access_token」と「refresh_token」が返ってきます。

{
  "access_token": "1000.wefa45gfeawjagf",
  "refresh_token": "1000.e56gakdas92gdahuafd",
  "scope": "ZohoCRM.settings.fields.ALL,ZohoCRM.modules.ALL",
  "api_domain": "https://www.zohoapis.com",
  "token_type": "Bearer",
  "expires_in": 3600
}

ここまで来れば山場を超えたようなもので、後はこの「access_token」と「refresh_token」をGASの処理の中で使用して同期設定を行う形となります。

なお、access_tokenは1時間で失効してしまうので、基本的にはrefresh_tokenを使用して都度access_tokenを生成するような処理を書く必要があります。

ただし!!残念ながら「access_token」と「refresh_token」を発行できないケースも確認されています。

Zoho側の不具合なのか、Windows PowerShellだけでなくcmdでも同様に、「invalid_error」と表示され、行き詰まってしまうことがあるという問題です。

そのような場合には、GAS側でここまでの認証&トークン発行処理を実装させると、「invalid_error」も表示されずに同期も問題なく実施できることを確認しています

ただ、その処理の記述はよりハードルが高めなので、もし必要な場合には実装をお手伝いさせていただきます!

ぜひ、スプレッドシートとZoho CRMを自動同期して、効率的に顧客データを管理してください!