受信した会話のレコードを検索して開く
このチュートリアルでは、Dynamics 365 チャネル統合フレームワーク 365 API を使用して、着信会話で Dynamics 365 のレコードを検索して開く方法を説明します。
このサンプルでは、4 つのシナリオを想定しています。
取引先担当者の番号が Dynamics 365 のレコードと一致する場合 レコードは searchAndOpenRecords API を使用して取得されます。
取引先担当者の番号が Dynamics 365 内で同じエンティティの種類の複数のレコードと一致する場合 レコードは searchAndOpenRecords API を使用して取得されます。
取引先担当者の番号が Dynamics 365 内で複数のエンティティの種類の複数のレコードと一致する場合 着信コールの取引先担当者の番号に対して取引先企業エンティティおよび取引先担当者エンティティのレコードが検索され、検索結果がコンソールに表示されます。
顧客の番号が Dynamics 365 のどのレコードとも一致しないため、空の結果を検索して開き、createRecord API を使用して顧客の新しいレコードを作成します。
前提条件
- Visual Studio 2017.
- Azure にサンプル アプリケーションを公開するには、有効な Microsoft Azure サブスクリプションが必要です。
重要
このチュートリアルは、簡単なコミュニケーション ウィジェットの構築の基本 の続編です。 Dynamics 365 チャネル統合フレームワークでホストできる単純な Hello World! ウィジェットをまだ作成していない場合は、最初にこちらを参照することをお勧めします。
ウィジェットをビルド
Visual Studio 2017 の 単純な通信ウィジェットの作成の開始 で説明されている手順を使用して作成した基礎ウィジェットを開きます。
Index.cshtml
ファイルを開き、ファイル内のコードを以下に示すコードに置き換えます。
<!DOCTYPE html>
<style>
.button {
background-color: #4FAFCD;
border: none;
color: white;
padding: 15px 32px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 16px;
margin: 4px 2px;
cursor: pointer;
height: 55px;
width: 200px;
font-size: 12px;
}
</style>
<html>
<body>
<br /><br />
<!--Replace <ORG-URL> in the script tag below with the URL of your Dynamics 365 instance -->
<script type="text/javascript" src="<ORG-URL>/webresources/Widget/msdyn_ciLibrary.js" data-crmurl="<ORG-URL>" data-cifid="CIFMainLibrary">
</script>
<script>
function singlematch() {
// The customer phone number matches one contact in Dynamics 365
var contactno = "555-5555"; // The contact number to be searched
var entityname = "account"; // Entity type whose records are to be searched
Microsoft.CIFramework.searchAndOpenRecords(entityname, "?$select=name,telephone1&$filter=telephone1 eq '" + `${contactno}` + "'" + "&$search=" + `${contactno}`, false).then(
function success(result) {
res = JSON.parse(result);
// Display the name and telephone number of the retrieved contact on the console
console.log(`Record values: Name: ${res[0].name}, Telephone number: ${res[0].telephone1}`);
},
function (error) {
console.log(error.message);
}
);
}
function multiplematchsingletype() {
// More than one contacts are matched with same phone number
// Search and show search results on console
var contactno = "555-5555"; // The contact number to be searched
var entityname = "account"; // Entity type whose records are to be searched
Microsoft.CIFramework.searchAndOpenRecords(entityname, "?$select=name,telephone1&$filter=telephone1 eq '" + `${contactno}` + "'" + "&$search=" + `${contactno}`, false).then(
function success(result) {
res = JSON.parse(result);
count = Object.keys(res).length;
// Print all the retrieved records on the console
while (count >= 1) {
console.log(`Record values: Name: ${res[count - 1].name}, Telephone number: ${res[count - 1].telephone1}`);
count = count - 1;
}
},
function (error) {
console.log(error.message);
}
);
}
function multiplematchmultipletype() {
// More than one records are matched with the same phone number. These records belong to different entity types
// Search and show search results on console
var contactno = "555-5555"; // The contact number to be searched
// Set the value of searchOnly parameter to True if you only want to get results of the search as a promise result and not open the record or search page. More information: https://learn.microsoft.com/dynamics365/customer-engagement/developer/channel-integration-framework/reference/microsoft-ciframework/searchandopenrecords#parameters.
Microsoft.CIFramework.searchAndOpenRecords("contact", "?$select=fullname,telephone1&$filter=telephone1 eq '" + `${contactno}` + "'" + "&$search=" + `${contactno}`, true).then(
function success(result) {
res = JSON.parse(result);
count = Object.keys(res).length;
// Print all the retrieved records on the console
while (count >= 1)
{
console.log(`Contact entity record values: Name: ${res[count - 1].fullname}, Telephone number: ${res[count-1].telephone1}`);
count = count - 1;
}
}, function (error) {
console.log(error.message);
});
Microsoft.CIFramework.searchAndOpenRecords("account", "?$select=name,telephone1&$filter=telephone1 eq '" + `${contactno}` + "'" + "&$search=" + `${contactno}`, true).then(
function success(result) {
res = JSON.parse(result);
count = Object.keys(res).length;
// Print all the retrieved records on the console
while (count >= 1)
{
console.log(`Contact entity record values: Name: ${res[count - 1].name}, Telephone number: ${res[count - 1].telephone1}`);
count = count - 1;
}
}, function (error) {
console.log(error.message);
});
}
function nomatch() {
// Search and show empty search results
// Create new contact based on the details of the incoming call
// Associate new contact to session
var contactno = "000040000025"; // The contact number to be searched
var callername = "Contoso Ltd.";
Microsoft.CIFramework.searchAndOpenRecords("account", "?$select=name,telephone1&$filter=telephone1 eq '" + `${contactno}` + "'" + "&$search=" + `${contactno}`, false).then(
function success(result) {
res = JSON.parse(result);
console.log(res);
// Check if the JSON response returned by the request is empty
if (Object.keys(res).length == 0) {
console.log("No records with contact number as " + contactno);
console.log("Creating a new Account record");
// Creating new Account record
var entityLogicalName = "account";
var data = {
"name": callername,
"telephone1": contactno
}
var jsondata = JSON.stringify(data);
// use createRecord API to create a new entity record
Microsoft.CIFramework.createRecord(entityLogicalName, jsondata).then(
function success(result) {
res = JSON.parse(result);
// Print the AccountID of the created Account record on the console
console.log("Account record created with ID: " + res.id);
})
}
else {
console.log(`Record values: Name: ${res[0].name}, Telephone number: ${res[0].telephone1}`);
}
},
function (error) {
console.log(error.message);
}
);
}
</script>
<button class="button" type="button" onclick="singlematch()">One matching record</button><br /><br />
<!-- singlematch() method is invoked when you click on "One matching record" button. This returns the record which has the same phone number as the number of the incoming call -->
<button class="button" type="button" onclick="multiplematchsingletype()">More than one matching records of same type</button><br /><br />
<!-- multiplematchsingletype() method is invoked when you click on "More than one matching records of same type" button. This returns the all records of one particular entity type, which have the same phone number as the number of the incoming call -->
<button class="button" type="button" onclick="multiplematchmultipletype()">More than one matching records of different types</button><br /><br />
<!-- multiplematchmultipletype() method is invoked when you click on "More than one matching records of different types" button. This returns the all records of mutliple entity types, which have the same phone number as the number of the incoming call -->
<button class="button" type="button" onclick="nomatch()">No match</button><br /><br />
<!-- nomatch() method is invoked when you click on "No match" button. If there is no existing record with the same phone number as the number of the incoming call, it uses the details of the incoming call to create a new record -->
</body>
</html>
ウィジェットを公開して構成します。
ウィジェットを公開するには、ウィジェットを公開して公開する で説明されている手順を実行します。 公開されたウィジェットは次のように表示されます: