Поиск и открытие записей во входящем разговоре
В этом руководстве мы покажем, как можно использовать API Инфраструктуры интеграции каналов Dynamics 365 для поиска и открытия записей.
Пример охватывает четыре сценария:
Контактный номер клиента соответствует одной записи в Dynamics 365. Запись извлекается с помощью API searchAndOpenRecords.
Контактный номер клиента соответствует нескольким записям одного и того же типа сущности в Dynamics 365. Записи извлекаются с помощью API searchAndOpenRecords.
Контактный номер клиента соответствует нескольким записям нескольких типов сущностей в Dynamics 365. В записях сущностей "Организация" и "Контакт" выполняется поиск контактного номера входящего вызова, а затем результаты поиска отображаются на консоли.
Контактный номер клиента не соответствует ни одной записи в Dynamics 365, поэтому мы ищем и открываем пустые результаты, а затем создаем новую запись для клиента с помощью API createRecord .
Предварительные условия
- Visual Studio 2017.
- Для публикации примера приложения в Azure требуется действующая подписка Microsoft Azure.
Внимание
Это руководство является продолжением руководства Начало работы с созданием простого мини-приложения связи. Если вы еще не создали простое мини-приложение Hello World! , которое можно разместить в Инфраструктуре интеграции каналов Dynamics 365, рекомендуем сначала прочитать его.
Создание мини-приложения
Откройте базовый виджет, который вы создали, выполнив действия, указанные в разделе Начало работы с созданием простого мини-приложения связи в 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>
Публикация и настройка мини-приложения
Выполните действия, указанные в разделе Публикация и настройка мини-приложения, чтобы опубликовать виджет. Опубликованное мини-приложение должно выглядеть следующим образом:
См. также
Создание простого мини-приложения связи
Пример кода для интеграции программного телефона
Вопросы и ответы