このドキュメントでは、Google スプレッドシートの API Connector を使用して Voice REST API を利用し、音声データを Google スプレッドシートに取り込む手順を説明します。正常に連携できるよう、手順に沿って設定してください。
Google スプレッドシートと Google アカウントを利用できること。
Google スプレッドシートに API Connector アドオンがインストールされていること。
OAuthトークンを使用して Voice REST API にアクセスできること。
まず、Workspaceに移動し、API Connector 拡張機能をインストールします。
Google スプレッドシートの[拡張機能]タブに API Connector が表示されていることを確認します。
ステップ3:API Connector を設定します。
Google スプレッドシートの[拡張機能]メニューから API Connector を開きます。
新しいAPIリクエストを設定するには、[作成]をクリックします。
次の詳細を入力します。
[API URL]:[対象のAPI URLをここに挿入]。
[メソッド]:GETまたはPOST(APIの要件に応じて選択)。
[OAuth]:[接続の管理]→[カスタムOAuthを追加]に移動します。
カスタムOAuth接続を設定するには
新しいサーバーベースのアプリケーションを作成します。
[クライアント名]と[ホームページURL]を入力し、[リダイレクトURL]を次のように設定します:https://script.google.com/macros/d/12COOkin8nodCH7fZGIBu0D2jWY8-AEA0uvElt4Ph4wRbLUD4wslqQUfG/usercallback(ドキュメントに記載されているとおり)。
アプリケーションの作成後、生成されたクライアントIDとクライアントシークレットをコピーします。
API Connector内の[カスタムOAuth]フォームで、次の項目を入力します。
[OAuth認可タイプ]:認可コード
[名前]:ZohoVoiceOAuth
[認可ベースURL]:https://accounts.zoho.com/oauth/v2/auth
[トークンURL]:https://accounts.zoho.com/oauth/v2/token
[クライアントID]:Zoho OAuthクライアントIDを貼り付けます
[クライアントシークレット]:Zoho OAuthクライアントシークレットを貼り付けます
7. リクエストを実行するには、[保存して実行]をクリックします。
APIリクエストが成功すると、データが Google スプレッドシートの指定した列に入力されます。
データが想定どおりに出力されていることを確認します。
Zoho Voice → 設定 → ワークフロー → 接続に移動します。
[接続を作成]をクリックします。
サービス一覧からGoogleサービスを選択します。
[接続名]を入力します(googlesheetという名前を正確に使用してください)。
[スコープ]セクションで設定します。
次を検索して選択します:https://www.googleapis.com/auth/spreadsheets
これにより、Google スプレッドシートの読み取り/書き込み権限が付与されます。
[作成]、続いて[接続]をクリックします。
Google アカウントでログインし、アクセスを承認します。
これで、Delugeスクリプトで接続を使用できるようになります。
ステップ2:ワークフローを作成してスクリプトを追加します。
[通話履歴]タブを対象にワークフローを作成します。
関数セクションで、[新しい関数]をクリックします。
提供されたスクリプトを貼り付けます。
スクリプトの先頭で、次の内容を変更します。
sheetID = 'your-google-sheet-id';
sheetName = 'your-sheet-tab-name';
例。
sheetID = '1b8CxYHkh0obXsJphn3sq56GheRnOV199eZu-lS2HIis';
sheetName = 'ZVoiceLogs';
[保存]をクリックし、ワークフローを有効にします。
メモ:Google Sheets APIの有効化:https://console.cloud.google.com/apis/library/sheets.googleapis.comに移動し、[有効にする]をクリックします。
// ---------- CONFIG ----------sheetID = '<SHEET ID';sheetName = '<SHEET NAME>';
// ---------- Fetch Existing Headers ----------
fetchHeaderURL = 'https://sheets.googleapis.com/v4/spreadsheets/'+ sheetID + '/values/' + sheetName + '!A1:Z1';
headersResp = invokeurl
[
url : fetchHeaderURL
type : GET
connection : 'googlesheet'
];
headerMap = Map();
headerRow = List();
indexOfCol = 0;
if(headersResp.containsKey('values'))
{
existingHeaders = headersResp.get('values').get(0);
for each colName in existingHeaders
{
key = colName.toLowerCase();
if(headerMap.containKey(key))
{
key = key + '_col' + indexOfCol;
}
headerMap.put(key, colName);
headerRow.add(colName);
indexOfCol = indexOfCol + 1;
}
}
else
{
// No headers found — create from data keys
headerRow = data.keys();
payload = map();
payload.put('range', sheetName + '!A1:Z1');
payload.put('majorDimension', 'ROWS');
payload.put('values', {headerRow});
headerUpdateURL = 'https://sheets.googleapis.com/v4/spreadsheets/'+ sheetID + '/values/' + sheetName + '!A1:Z1?valueInputOption=RAW';
response = invokeurl
[
url : headerUpdateURL
type : PUT
parameters : payload.toString()
connection : 'googlesheet'
];
for each colName in headerRow
{
headerMap.put(colName.toLowerCase(), colName);
}
}
// ---------- Flatten Multi-value Fields ----------
nestedFields = list();
nestedFields.add('departments');
nestedFields.add('agents');
nestedFields.add('call_queues');
flattenedData = map();
for each key in data.keys()
{
val = data.get(key);
if(nestedFields.contains(key))
{
nameList = list();
for each item in val
{
nameList.add(item.get('name'));
}
flattenedData.put(key, nameList.toString(', '));
}
else
{
flattenedData.put(key, val);
}
}
// ---------- Add New Headers (if needed) ----------
newHeaderFound = false;
for each key in flattenedData.keys()
{
if(!headerMap.containsKey(key.toLowerCase()))
{
headerRow.add(key);
newHeaderFound = true;
}
}
// ---------- Update Header Row if New Headers Exist ----------
if(newHeaderFound)
{
payload = map();
payload.put('range', sheetName + '!A1:Z1');
payload.put('majorDimension', 'ROWS');
payload.put('values', {headerRow});
headerUpdateURL = 'https://sheets.googleapis.com/v4/spreadsheets/'+ sheetID + '/values/' + sheetName + '!A1:Z1?valueInputOption=USER_ENTERED';
response = invokeurl
[
url : headerUpdateURL
type : PUT
parameters : payload.toString()
connection : 'googlesheet'
];
}
// ---------- Construct Row Data ----------
rowData = list();
for each col in headerRow
{
key = col.toLowerCase();
val = flattenedData.get(key);
if(val == null)
{
rowData.add('');
}
else
{
rowData.add(val);
}
}
// ---------- Append Data Row ----------
payload = map();
payload.put('values', {rowData});
appendURL = 'https://sheets.googleapis.com/v4/spreadsheets/'+ sheetID + '/values/' + sheetName + '!A1:append?valueInputOption=USER_ENTERED';
response = invokeurl
[
url : appendURL
type : POST
parameters : payload.toString()
connection : 'googlesheet'
];
info 'Data appended to sheet successfully.';
メモ:追加のサポートが必要な場合は、こちらにお問い合わせください:support@zohovoice.com