【Zoho CRM】Call Intelligence(コール・インテリジェンス)の情報をZoho CRMへ連携する

【Zoho CRM】Call Intelligence(コール・インテリジェンス)の情報をZoho CRMへ連携する

概要
「Call Intelligence(以下コール・インテリジェンス)」とZoho CRMを連携させる方法です。Call Intelligence(コール・インテリジェンス)の通話情報をZoho CRMのスケジュール処理で定期的に取り込み、キャンペーン、見込み客/連絡先、商談と関連付けます。
コール・インテリジェンスとは?
楽天コミュニケーションズ株式会社が提供する電話の効果測定ツールです。電話でお問い合わせの受付をする広告施策や広告価値の見える化が可能です。


設定
Zoho CRMのスケジュール処理とカスタム関数の機能を使用します。スケジュール処理を実行し、カスタム関数(※)を用いてコール・インテリジェンスから情報を取得します。その情報をもとにCRMにデータを追加したり、既存のデータと関連付けたりします。
※カスタム関数は、Zoho CRMのエンタープライズプランからご利用いただける機能です。

事前準備
Zoho CRMの「キャンペーン」タブに電話番号の項目を作成するか、既存の項目の中で使用する項目を決定してください。
(この電話番号の項目をもとに、コール・インテリジェンスの着信先電話番号とZoho CRMのキャンペーンを関連付けます)
※以下のサンプルの場合、項目名は「電話番号」としていますが、別の名前にする場合はサンプルを書き換えてください。

設定箇所
以下のメニューからスケジュール処理の設定を行ってください。
  • 設定→自動化→予定
以下は、毎日午前12:30に前日の通話データをコール・インテリジェンスから取得してZoho CRMに取り込む場合の設定例です。

スケジュール処理の設定



関数の引数
名前 : 値
  • authToken : Zoho CRMの認証トークンの値を設定(※)
※Zoho CRMの認証トークンを取得していない場合、
 設定→拡張機能&API→APIのメニューで表示される画面の右上の歯車のアイコンのメニューから取得できます。

設定イメージ↓


関数の内容
以下のサンプルで行っている処理
  • 前日の通話履歴をコール・インテリジェンスから取得
  • 通話の着信先の電話番号をもとにZoho CRMのキャンペーンを検索して関連付け
  • 通話の情報をもとにZoho CRMで通話データを作成
  • 通話の発信元の電話番号をもとにZoho CRMの連絡先/見込み客を検索して関連付け
  • 該当の電話番号に対応する連絡先が登録されている場合→該当の連絡先に通話データを関連付け
  • 該当の電話番号に対応する見込み客が登録されている場合→該当の見込み客に通話データを関連付け
  • 該当の電話番号に対応する連絡先も見込み客も登録されていない場合→新しく見込み客を作成し通話データを関連付け

//■日付
dateString=(((zoho.currentdate.subDay(1).getYear())) + if((zoho.currentdate.subDay(1).getMonth()  <  10),"0" + (zoho.currentdate.subDay(1).getMonth()),(zoho.currentdate.subDay(1).getMonth()).toString())) + if((zoho.currentdate.subDay(1).getDay()  <  10),"0" + (zoho.currentdate.subDay(1).getDay()),(zoho.currentdate.subDay(1).getDay()).toString());
//■コールインテリジェンスからのデータ取得
//認証
authURL="https://XXXXXXXXXXXXXXXXXXXXX/";//コール・インテリジェンスのAPIの認証URL
authParams=map();
authParams.put("service_id","XXXXXXXXXXXXX");//コール・インテリジェンスのサービスID
authParams.put("account","XXXXXXXXXXXXX");//コール・インテリジェンスのAPI用アカウント
authParams.put("password","XXXXXXXXXXXXX");//コール・インテリジェンスのパスワード
authResponse = postUrl(authURL,authParams,false);
authResponseCode=authResponse.get("responseCode");
if(authResponseCode  ==  "200")
{
authResponseBody=authResponse.get("responseText");
authResponseMap=authResponseBody.toMap();
message=authResponseMap.get("message");
token=authResponseMap.get("token");
}
//通話履歴ダウンロード
timeList={"01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23"};
//時間帯ごとにループ
for each t in timeList
{
datetime=dateString + t;
downloadURL="https://XXXXXXXXXXXXXXXXXXXXX/";//コール・インテリジェンスの通話履歴ダウンロードAPIのURL
downloadParams=map();
downloadParams.put("token",token);
downloadParams.put("date",datetime);
downloadResponse = postUrl(downloadURL,downloadParams,false);
downloadResponseCode=downloadResponse.get("responseCode");
if(downloadResponseCode  ==  "200")
{
downloadResponseBody=downloadResponse.get("responseText");
rows=downloadResponseBody.toList("\n");
//データがある場合のみ続行
if(rows.size()  >  2)
{

//データの取得
destinationNumberIndex=1;
callerNumberIndex=19;
incomingTimeIndex=20;
callTimeDurationIndex=25;
statusCodeIndex=30;
//ヘッダー行かどうかの識別フラグ
dataRowFlag=false;
for each dataRow in rows
{
values=dataRow.toList(",");
//データの行の場合のみ処理を続行
if(dataRowFlag)
{
if(values.size()  >  1)
{
destinationNumber=values.get(destinationNumberIndex);
callerNumber=values.get(callerNumberIndex);
incomingTime=values.get(incomingTimeIndex).replaceAll("/","-");
callTimeDuration=(values.get(callTimeDurationIndex)).toLong();
statusCode=values.get(statusCodeIndex);
//■宛先電話番号(API名はPhoneとします)からキャンペーンを検索
campaignRecords = zoho.crm.searchRecords("Campaigns","(Phone:equals:" + destinationNumber + ")");
campaignRecord=campaignRecords.get(0);
if((campaignRecords.size()  ==  1)  &&  !campaignRecord.containKey("id"))
{
}
else
{
campaignID=campaignRecord.get("id");
}
//■発信者電話番号からデータを検索
//連絡先に該当の電話番号が登録されているかどうかをチェック
contactRecords = zoho.crm.searchRecords("Contacts","(Phone:equals:" + callerNumber + ")");
if(contactRecords.size()  ==  0)
{
existsContacts=false;
}
else
{
existsContacts=true;
}
//見込み客に該当の電話番号が登録されているかどうかをチェック
leadRecords = zoho.crm.searchRecords("Leads","(Phone:equals:" + callerNumber + ")");
if(leadRecords.size()  ==  0)
{
existsLeads=false;
}
else
{
existsLeads=true;
}
//連絡先が登録済→連絡先に関連付け
if(existsContacts)
{
contactRecord=contactRecords.get(0);
recordID=contactRecord.get("id");
moduleName="Contacts";
idFieldName="id";
}
//見込み客が登録済→既存の見込み客に関連付け
else if(existsLeads)
{
leadRecord=leadRecords.get(0);
recordID=leadRecord.get("id");
moduleName="Leads";
idFieldName="id";
}
//連絡先も見込み客も未登録→見込み客を作成して関連付け
else
{
addLeadR = zoho.crm.createRecord("Leads",{ "Last_Name" : "お客様", "Phone" : callerNumber, "Description" : "コールインテリジェンス経由で作成" });
recordID=addLeadR.get("Id");
moduleName="Leads";
idFieldName="id";
}
//■キャンペーンに関連づけ
//キャンペーンへの関連づけ
relateResponse = zoho.crm.updateRelatedRecord(moduleName, recordID, "Campaigns", campaignID, {"CAMPAIGNID": campaignID});
info relateResponse;
//updateRelatedRecordsURL="https://crm.zoho.com/crm/private/xml/Campaigns/updateRelatedRecords?scope=crmapi&relatedModule=" + moduleName + "&authtoken=" + input.authToken + "&xmlData=<" + moduleName + "><row no=\"1\"><FL val=\"" + idFieldName + "\">" + recordID + "</FL></row></" + moduleName + ">&id=" + campaignID;
//relateResponse = getUrl(updateRelatedRecordsURL);
//■通話の作成&関連付け
callTimeMinutes=floor((callTimeDuration  /  60));
callTimeSeconds=(callTimeDuration  -  callTimeMinutes  *  60);
callTimeDurationText=callTimeMinutes + ":" + callTimeSeconds;
callMap={ "Subject" : "コールインテリジェンス着信(ステータス:" + statusCode + ")", "Call Type" : "Inbound", "Call Start Time" : incomingTime, "Call Duration" : callTimeDurationText, "SEID" : recordID, "SEMODULE" : moduleName };
callCreateR = zoho.crm.createRecord("Calls",callMap);
}
}
if(!dataRowFlag)
{
dataRowFlag=true;
}
}
}
}
else
{
info "error";
}
}

※「xxxxxxxxxx」の部分はコール・インテリジェンスのAPI用の情報で置き換えてください(API用の認証情報が不明な場合、コール・インテリジェンスのご担当者にご確認ください)。

※コール・インテリジェンスへのAPI接続時にはIPアドレスによる認証が必要です。設定に関してはコール・インテリジェンスの窓口にご依頼ください。なお、Zohoの接続元IPアドレスは予告なく変更になる可能性があり、その場合は新しいIPアドレスに変更する必要があります。

※上記のサンプルについてのサポートや動作保証はしておりません。また、今後、コール・インテリジェンスやZoho CRMの仕様変更等により動作しなくなる可能性がありますのでご留意ください。

参考情報



      • Related Articles

      • 【Zoho CRM】カスタム関数の作成

        カスタム関数はエンタープライズプランの機能です。 [設定] > [自動化] > [アクション] > [カスタム関数]に移動してください。 表示された画面で「自分で作成する」をクリックしてください。 カスタム関数の作成画が表示されます。 カスタム関数についての詳細は以下をご参照ください。 https://www.zoho.com/jp/crm/help/automation/custom-functions-programming-dre.html
      • 【Zoho CRM】カスタム関数:1年分の商談の金額を月別に分割して計上する

        サンプルの設定内容は以下です。 タブ 商談 引数 Deal_Name=  商談.商談名 accountID =  商談.取引先のID Closing_Date=  商談.完了予定日 amount =  商談.総額 stage =  商談.ステージ 関数の内容 //登録用のマップ m=map(); //繰り返し処理用のリスト monthIndex={0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}; //月あたりの金額 monthlyAmount=(amount  / ...
      • 【Zoho CRM】複数のレコードに対してカスタム関数を実行したい

        Q. データの一覧から、複数のデータを選択してカスタム関数をボタンから実行したいです。 このとき、関数にデータのIDを引数として渡しますが、各データのIDはどう扱うべきでしょうか? A. 複数のデータを選択してカスタム関数を実行する場合、 引数として渡されるデータのIDは、「|||」で 繋ぐ形で 下記のように、一つの文字列で扱われます。 1000000001|||1000000002|||1000000003|||1000000004 ...
      • 【Zoho CRM】Sansanの名刺データを取得して見込み客データを更新する

        引数 SansanAPIKey = カスタム値(SansanのAPIキー) leadID =  「見込み客」の「見込み客のID」 email = 「見込み客」の「メール」 関数の内容 //認証用ヘッダー h={ "X-Sansan-Api-Key" : input.SansanAPIKey }; //リクエストURL u="https://api.sansan.com/v2.7/bizCards/search"; //範囲(me|all) range="all"; //パラメーターのエンコード ...
      • 【Zoho CRM】商談の項目に自動的に取引先の項目を反映させることはできますか

        Q. 商談の項目に自動的に取引先の項目を反映させることはできますか? A. ルックアップ項目の連動項目で反映可能です。 ...

      Zoho Community

      Zoho ユーザーが集うオンラインフォーラムでは、サービスの使いこなしに関する活発な議論や情報交換が行われています。