Introduction:
Service Provider companies manage cases to provide support or service to customers with resolution to the incident reported by the customer. With the help of automatic record creation and update rules, external source data can be captured to create Dataverse records which help to reduce manual efforts and improve the efficiency of service. For example, with incoming emails, a case record can be created automatically. This is very helpful when the team receives emails on large scale. To know more about automatic record creation and update rule, please refer this link.
Sometimes, it happens that Service Team may receive the emails from an unknown sender or from the sender who belongs to the Company (i.e. Account) present in the Dataverse but the sender (Contact) is not present in CRM. This situation can be managed by Service Team in two ways, either by creating contact automatically for the unknown sender or by mapping a contact in Power Automate.
Here, we will go through three cases and see how to map a contact manually in Power Automate.
- Mapping a primary contact of the same domain if the email is received from an unknown sender.
- Mapping a specified contact for an unknown sender.
- Mapping a contact for known sender i.e. existing customers.
How to map a contact manually in Power Automate:
Before proceeding to Power Automate, make sure you have set ‘Manage unknown senders by’ as ‘Mapping in Power Automate manually’. If not, kindly follow the below steps.
- Navigate to Customer Service App -> Go to ‘Automatic record creation and update rule’ from service management area -> Open the rule on which you want to configure the setting.
- Go to Advanced tab -> In the Before evaluating conditions area, set Allow emails from unknown senders to Yes -> Then select Mapping in Power Automate manually in Manage unknown senders by.
- Click on Save and then Activate the rule.
Mapping in Power Automate manually means that you are creating mapping in Power Automate for the customer field. Basically, whenever any email is received from unknown sender, it will be mapped to the specified customer. Mapping can be created for either contact or account but not for both at the same time. If both account and contacts are mapped in Power Automate flow, it prefers to map to contact.
To map a contact in Power Automate manually, follow the steps given below:
Case I : Mapping a primary contact of same domain if the email is received from an unknown sender.
Let’s say the Service Team receives an email from a sender that is not present in the Dataverse but there is another contact present with same domain as of the sender in Dataverse. In this scenario, it can be mapped to the other contact having same domain as the sender.
- Navigate to Customer Service App -> Switch to Service Management Area -> ‘Automatic record creation and update rule’.
- Select and open the rule which you wish to configure -> Under Basic tab, scroll down to the region Step two: condition to evaluate and actions to take -> Select the rule item for which you want to map a contact in Power Automate manually.
- In selected rule item page, on the Condition buildertab, select Save and open Power Automate. In a new tab, Power Automate workflow will open. According to the action you have set in the Record to create, Power Automate creates a flow in which you can add more actions or edit existing actions.
- Select Continue.
2. If the connection is not created, please sign in to create a connection and select Continue.
3. After selecting Continue, you will see default created Power Automate flow.
The first step ‘When the incoming activity triggers the flow’ is a pre-defined trigger. It comes under ‘Microsoft Dataverse’ connector as ‘When a row is added, modified or deleted’. Here, it is renamed as ‘When the incoming activity triggers the flow’.
Whenever ‘importsequencenumber’ field of ‘Email’ table is modified, this flow will get triggered.
Second Step, ‘Identify email sender’ is an ‘Initialize variable’ action that comes under ‘Variable’ connector. In this step, variable is defined to identify the type of customer. Hence, in ‘Value’ field, dynamic content ‘From’ is selected which is an output of previous step i.e. ‘When the incoming activity triggers the flow’. In this step, email id of the sender will get stored.
4. Add step ‘Search Row’ action of ‘Microsoft Dataverse’ Connector. This action allows you to search a Microsoft Dataverse environment using Relevance Search, and returns the rows that match the search term. We will use this action to search contact that is to be mapping in case an email is received from an unknown sender by providing email id. To add this step, hover to the arrow after Identify email sender step and click on sign. Select Add an action.
Under ‘Microsoft Dataverse’ connector, select ‘Search rows’ action.
To rename this step, click on the ellipsis and select ‘Rename’.
Enter the email id of contact in a ‘Search term’. Enter the table unique name that is to be searched.
5. Define variables to store the domain of sender and contact. Contact will be used for mapping the unknown sender. Domain will be used to find the existing contact with the same domain as of unknown sender. Under ‘Choose an operation’, enter Variable in the search bar, and you will get various variable actions. Choose Initialize variable.
Rename the step. Enter name, select type as String. Set value i.e. contact id by dynamic content which will be used to map if another contact with the same domain is not found in CRM. We will see in Case II how we can use the contact id stored in this variable to map the new case record.
Under ‘Expression’ tab, enter the expression as,
outputs(‘Search_contact_to_be_mapped_(for_unknown_sender)_by_email_id’)?[‘body/value’][0][‘@search.objectid’]
It will set the contact id of 1st searched record from the output of the previous step i.e. Search contact to be mapped (for unknown sender) by email id.
6. Define another variable to store the contact id of the same domain as the unknown sender. Initially, set the value of ‘contactid’ variable in it i.e. ‘contactid2’ using dynamic content.
7. Define the variable ‘domain’ same as above. Set the value by dynamic content. To extract domain from sender, under Expression tab, enter the expression as ‘last(split(variables(‘Customer from email sender’),’@’))’.
This expression will get the domain from email id of sender. Click OK button.
8. Copy the steps ‘Create a record (don’t rename this step)’ and ‘Connect the record to the incoming activity (don’t edit or delete this step)’ to the clipboard which we will use later.
The step ‘Create a record (don’t rename this step)’ is an ‘Add new row’ action of ‘Microsoft Dataverse’ connector. This will be used to create a case. In this step, we will map the contact as well.
Step ‘Connect the record to the incoming activity (don’t edit or delete this step)’ is a ‘Perform an unbound action’ of ‘Microsoft Dataverse’ connector. It will be used to set regarding in email activity with the new case record.
When steps are copied successfully, delete these steps.
9. The step ‘Is this email sender a contact or an account’ is a Condition Control that identifies which block of actions is to be executed based on the evaluation of condition input. It evaluates the type of sender if it is a contact or account.
In the Is this email sender a contact or an account step, for the If no block, delete the step Terminate when no valid customer found as shown below:
Select Delete. On confirmation Dialog, select OK.
This step helps us in identifying if the email received is from an unknown sender or a known sender. So if a record either Account or Contact is found in CRM then it is from a known sender or else it is from an unknown sender.
10. Under If No, Select ‘Add an action ‘.
Select Microsoft Dataverse connector.
Select ‘List rows’ action.
11. Rename the step. Select table name as Contacts. Click on ‘Show advanced options’.
Enter Fetch XML Query, which will find primary contacts with the same domain as the sender.
As shown in the above screenshot, the variable domain is set from dynamic content which helps in matching the domain for the existing contacts.
12. After this, add an action to set variable. Select variable from name dropdown.
Rename step. Set value from dynamic content. Under ‘Find contacts with same domain as sender’, select Contact which will store contact id in the variable.
As we have set the value as Contact of list row ‘Find contacts with same domain as sender’, ‘Apply to each’ control is set automatically on ‘Set contact’ action.
13. Add a step to add condition control.
Set condition to check if the value of contactid2 is same as contactid variable value or changed with the same domain as sender.
14. Under If Yes section, click Add an action. Go to My clipboard, the steps which were copied before (refer to step vi) are displayed. Select ‘Create a record (don’t rename this step)’ step. Copied step will get added.
15. Now open the step ‘Create a record (don’t rename this step)2’. Before specifying the required value in the Customer (Contacts), make sure that you remove the default mappings from Customer (Accounts), Customer (Contacts) and Contact (Contacts).
15. Specify the required value in the Customer (Contacts)field i.e. contactid2 using dynamic content. You can rename the step as well.
Add another copied step i.e. ‘Connect the record to the incoming activity (don’t edit or delete this step)’. Delete PrimaryEntityReference value. Set expression from dynamic content as, outputs (‘Create_a_case_record_for_found_contact’)?[‘body/@odata.editLink’]
Note: Make sure in outputs, ‘step name’ should be the same as the previous step.
16. Save the Power Automate flow.
Note: You can map an account but you should first remove the default mappings from the Customer (Accounts), Customer (Contacts), and Contact (Contacts) boxes and specify only an account in the Customer (Accounts).
So now whenever any new email is received from an unknown sender, email activity will get created by tracking email in Microsoft Dynamics 365 CRM. Power Automate flow will get triggered and it will set the email id in ‘Customer for email sender’. Contact will get searched by provided email id and its contact id will be set in variable ‘contactid’ and value of ‘contactid’ in ‘contactid2’. Domain will be stored in ‘domain’ variable by using split() function on ‘Customer for email sender’ variable value. Thereafter, it will check the sender type, whether it is a contact or account. It will then execute ‘If No’ block if the sender type is neither contact nor account.
In ‘If No’ block, it will search for another contact with same domain using fetch XML query. If any contact with same domain of sender exists in the Dataverse, its contact id will be updated in the ‘contactid2’ variable or else contactid2 variable won’t get updated.
Now, it will check that the contactid2 variable is not a match with contactid variable. If this condition satisfies, it will create a case with mapping the contact of the same domain using contactid2 and on email activity, this case will be set as regarding.
For example, let’s say we have received an email from Vin D who is not present in the Dataverse but his colleague Tiana is present in the Dataverse as a contact. In this case, it will map the contact Tiana as both belong to Company TK Pvt Ltd (i.e. Account).
In the below screenshot, we can see that the contact Tiana K is set on the new case record ‘Required Service for Mobile Support.’
In Email Activity, regarding is set with new case record ‘Required Service for Mobile Support’.
Case II: Mapping a specified contact for an unknown sender
In Case I, we have seen mapping another contact with same domain if an email is received from an unknown sender. But, what if we don’t find another contact matching the same domain? To overcome this, we will set a particular contact to map the email received from an unknown sender.
- In the same Power Automate flow, for If No block of ‘Is contact with same domain as sender’ step, configure the steps by following the step xii to xv as explained in Case I.
- Only the field that needs to be updated is Customer (Contacts). Use the contactid variable to map for unknown senders.
- Save the workflow.
So now whenever any new email is received from an unknown sender, email activity will get created by tracking email in Microsoft Dynamics 365 CRM. Power Automate flow will get triggered and it will set the email id in ‘Customer for email sender’. Contact will get searched by provided email id and its contact id will be set in variable ‘contactid’ and value of ‘contactid’ in ‘contactid2’. Domain will be stored in ‘domain’ variable by using split() function on ‘Customer for email sender’ variable value. Thereafter, it will check the sender type, if it is a contact or account. It will then execute ‘If No’ block if sender type is neither contact nor account.
In ‘If No’ block, it will search for another contact with the same domain using fetch XML query. If any contact with the same domain of sender does not exist in the Dataverse, contactid2 variable will remain as it is. It won’t get updated.
Now, it will check the value of contactid2 variable should not be the same as contactid. If the value of both variables are the same, it will create a case by mapping the contact of id defined in the contactid variable and on email activity, this case will be set as regarding.
For example, let’s say we have an email from the unknown sender ‘Dale Philip’. There isn’t any contact having the same domain as of Dale. In this case, it will map to the user Niel George as the record id of Niel has been used to set in Customer (contact).
In the below screenshot, we can see that the contact Niel George is set on the new case record ‘Required Samsung M31 Mobile Support.’
In Email Activity, regarding is set with new case record ‘Required Samsung M31 Mobile Support’.
Case III: Mapping a contact for a known sender.
We have seen how contacts get mapped for unknown senders in the above cases. Now let’s see about the known sender.
To map a contact for a known sender for which a record is already available in the CRM, follow the steps given below:
In the existing Power automate flow, navigate to step vii explained in Case I i.e. Is email sender a contact or an account. Go to the ‘If Yes’ block of Is email sender a contact or an account.
The step ‘Is email sender a contact’ is a Condition Control which identifies which block of actions to execute based on the evaluation of condition input. It evaluates type of sender whether it is contact or not.
Follow similar steps from xii to xv for If yes and If no blocks of ‘Is email sender a contact’ from Case I.
If Yes block :
- The step ‘Retrieve sender contact’ retrieves the contact from contacts with the help of contact id.
- Rename the step Set parent customer of sender as customer to Set contact as customer. Remove the value of Value field.
- Set Value from Dynamic Content. Select contact under Retrieve Sender Contact.
- In a record for existing contact step, Set Customer (Contact). Type “contacts()”. In bracket, set variable ‘Customer from email sender‘ from dynamic content.
- Save the workflow.
If No section :
- In Set account as customer, clear value of the Value And set new value to Sender(value) from dynamic content.
- In a record for existing account step, Set Customer (Account). Type “accounts()”. In bracket, set variable ‘Customer from email sender‘ from dynamic content.
- Save the workflow.
So now whenever any new email is received from a known sender, email activity will get created by tracking email in Microsoft Dynamics 365 CRM. Power Automate flow will get triggered and it will set email id in ‘Customer for email sender’. Contact will get searched by provided email id and its contact id will be set in variable ‘contactid’ and value of ‘contactid’ in ‘contactid2’. Domain will be stored in ‘domain’ variable by using split() function on ‘Customer for email sender’ variable value. Thereafter, it will check the sender type, if it is a contact or account. It will execute ‘If Yes’ block if sender type is either a contact or account.
In ‘If Yes’ block, it will check again with another condition that if it is of type contact or not. If Yes, it will create case with mapping the contact of id defined in a ‘Customer from email id’ variable and on email activity, this case will be set as regarding. Otherwise, it will create case by mapping the account of id defined in a ‘Customer from email id’ variable and on email activity, this case will be set as regarding.
For example, lets say we have an email from a known sender ‘Elma Smith’. There is a contact record for Elma Smith in a Dataverse. In this case, it will map to the contact itself i.e Elma Smith.
In the below screenshot, we can see that the contact Elma Smith is set on the new case record
‘Need Mobile Support.’
In Email Activity, regarding is set with new case record ‘Need Mobile Support’.
Conclusion:
In this way, the customer service team can easily map a contact for known/unknown senders by using Power Automate flow for the rules that are created for creating or updating case records automatically.