Споделяне чрез


Търсене и отваряне на записи на входящи разговори

В този урок демонстрираме как можете да търсите и отваряте записи в Dynamics 365 при входящо повикване с помощта на API на Dynamics 365 Channel Integration Framework.

Извадката обхваща четири сценария:

  • Номерът за контакт на клиента съвпада с един запис в Dynamics 365. Записът се извлича с помощта на API searchAndOpenRecords .

  • Номерът за контакт на клиента съвпада с множество записи от един и същ тип обект в Dynamics 365. Записите се извличат с помощта на API searchAndOpenRecords .

  • Номерът за контакт на клиента съвпада с множество записи на множество типове обекти в Dynamics 365. Записите за обекта партньор и обекта за контакт се търсят за номера на контакта на входящото повикване и след това резултатите от търсенето се показват на конзолата.

  • Номерът за контакт на клиента не съвпада с никой запис в Dynamics 365, затова търсим и отваряме празни резултати и след това създаваме нов запис за клиента с помощта на API createRecord .

Предварителни изисквания

  • Visual Studio 2017.
  • Необходим е валиден Microsoft Azure абонамент, за да се публикува примерното приложение в Azure.

Важно

Този урок е продължение на Първи стъпки с изграждането на проста комуникационна графичен компонент. Ако не сте създали прост Hello World! графичен компонент все още, че може да се хоства на Dynamics 365 Channel Integration Framework, ние ви предлагаме да прочетете това първо.

Изградете графичен компонент

  1. Отворете основния графичен компонент, който сте създали, като използвате стъпките, споменати в Първи стъпки с изграждането на проста комуникация графичен компонент през Visual Studio 2017 г.

  2. Index.cshtml Отворете файла и заменете кода във файла с кода, даден по-долу.

    Отворете файла 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>

Публикуване и конфигуриране на графичен компонент

Следвайте стъпките, споменати в Публикуване, и конфигурирайте графичен компонент , за да публикувате графичен компонент. Публикуваните графичен компонент трябва да изглеждат така:

Публикувана примерна графичен компонент в Унифициран интерфейс приложения.

Вижте също

Изградете проста комуникационна графичен компонент
Примерен код за интеграция на софтфон
Често задавани въпроси