//■日付
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;
//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";
}
}