AWS Contact Center

Building unified customer profiles with Amazon Connect

While on a call, contact center agents often switch between multiple applications to search for the information they need to solve customer issues. This can mean toggling between up to 10 different applications, from their custom agent application to Customer Relationship Management (CRM). To address this problem, some companies invest in complex integrations that stitch customer data from disparate applications together in a homegrown customer database to feed their contact center application. These integrations are challenging and costly as different applications store data in various formats and use different customer identifiers (e.g., account ID, phone numbers, email addresses).

With Amazon Connect Customer Profiles you can now deliver more personalized customer experience with less effort through a unified view of all customer data presented to the agent at the moment of the contact. Amazon Connect Customer Profiles combines customer data from disparate data sources such as Salesforce, Service Now, and home-grown applications with contact history in Amazon Connect to create unified customer profiles. To learn more, see our admin guide and API documentation.

In our previous blog, you learned how to set up connectors to your 3rd party applications within a few clicks. Now that you understand how pre-configured connectors work, this blog we show you how to create a unified customer profile, set up personalized routing and embed customer profiles in your agent desktop.

Solution Overview

For the sake of the blog, we will use AnyCompany, a leading home services provider, which includes plumbing, carpentry, and other maintenance services. AnyCompany has been using Amazon Connect with 1000+ agents for 1 year. They witness high call duration as agents need to spend considerable time finding relevant customer information across their order management system, marketing platform, and enterprise resource planning (ERP) system. We will follow the following steps in the solution:
1. Create a unified customer profile for using Amazon Connect Customer Profile APIs
2. Enable personalized routing by using an AWS Lambda function
3. Simplify and enhance your agent experience using the Amazon Connect Streams JS library



For this walkthrough, you should have the following prerequisites:

Create a unified customer profile

To start, AnyCompany wanted to provide their agents with a holistic view of the customer journey, which includes data from various sources. AnyCompany added up to 50 custom integrations to ingest customer data such as product trial and subscription information as well as product renewal offers or other incentives assigned by the marketing team. With these integrations, agents can quickly detect if the customer was near the end of a trial or subscription or see the exact offer details emailed to the customer.

1. Use the Amazon Connect API PutProfileObjectType to create custom objects such as a MarketingAssignedOffers profile object.

  "DomainName": "AnyCompanyDomain",
  "ObjectTypeName": "MarketingAssignedOffers",
  "Description": "Marketing Managed Offers",
  "AllowProfileCreation": true,
  "ExpirationDays": 1000,
  "Fields": {
      "UserId" : {
          "ContentType": "STRING",
          "Source": "_source.UserId",
          "Target": "_profile.AccountNumber"
      "email" : {
          "ContentType": "EMAIL_ADDRESS",
          "Source": "",
          "Target": "_profile.EmailAddress"
      "phone" : {
          "ContentType": "PHONE_NUMBER",
          "Source": "",
          "Target": "_profile.PhoneNumber"
      "offer" : {
          "ContentType": "STRING",
          "Source": "_source.offerName",
          "Target": "_profile.Attributes.offerName"
      "offerView" : {
          "ContentType": "STRING",
          "Source": "_source.offerViewed",
          "Target": "_profile.Attributes.offerViewed"
  "Keys": {
    "_account" : [
            "FieldNames": ["UserId"],
            "StandardIdentifiers" : [ "PROFILE", "UNIQUE" ]
    "_email": [
        "FieldNames": [
    "_phone": [
        "FieldNames": [

2. Use the PutProfileObject API to create a new MarketingAssignedOffers profile object when an update is triggered from the external applications.

const marketerAssignedObject = {
    UserId: '00001',
    email: '',
    offerName: '30% Renewal',
    offerViewed: 'false'
    "DomainName": "AnyCompanyDomain",
    "ObjectTypeName": "MarketingAssignedOffers",
    "Object": JSON.stringify(marketerAssignedObject)

Full examples of registering profile object types, submitting profile object updates, and searching profiles can be found in the GitHub repository.

Enable personalized automation
Once the customer profiles are set up, AnyCompany can used Amazon Connect Customer Profiles to help identify the caller before they are connected to an agent.

1. Create a Lambda function to search for the customer profile based on the caller’s phone number and perform personalized routing.

var searchResults  = await client.searchProfiles({
    "DomainName": "AnyCompanyDomain",
    "KeyName": "_phone",
    "Values": [customerNumber]

if (searchResults.Items.length > 1) {
    var profileid = searchResults.Items[0].ProfileId;
    var firstname = searchResults.Items[0].FirstName;
    var additionalInformation = searchResults.Items[0].AdditionalInformation;
var listObjectPayload = {
    "DomainName": "AnyCompanyDomain",
    "ObjectTypeName": "CTR",
    "ProfileId": profileid
var listObjectResults = await client.listProfileObjects(listObjectPayload).promise()

var mostRecentCtr = JSON.parse(listObjectResults.Items[0].Object);

var lastCallAbandoned = "false";
if (mostRecentCtr.agent === null){
    console.log("last call was abandoned")
    lastCallAbandoned = "true"

2. Invoke the function from the Contact Flow which returns the callers profile data such as name, profile id and other details.
3. Use the Play Prompt block in the Contact flow to greet the caller by their name.
4. Use the Check contact attribute block the branch on the lastCallAbandoned attribute returned by the Lambda function.
5.  Use the Change routing priority/age block to prioritize the contact if the caller has abandoned the previous call.

Please note: Additional use-cases can be added to the logic here. For example, if a call was detected in the last 24 hours, the sentiment and call categorization of the previous call can be used to personalize routing for the caller. For example, if the customer’s last interaction had a negative sentiment, they will be connected to a more experienced agent. This can be determine by enabling Contact Lens for Amazon Connect.

For example, if the customer’s last interaction had a negative sentiment, they will be connected to a more experienced agent.

By leveraging the customer profiles APIs in the contact flow, AnyCompany is able to create a personalized and dynamic customer experience and quickly connect customers to agents who have the ability to meet their need.

Simplify and enhance your agent experience

AnyCompany not only leveraged customer profiles in the contact flow to provide their customer with a personalized experience, but they also used them in the agent experience. You can enable your agents to view customer profiles in the native agent experience or you can use the Amazon Connect streams JS library to embed customer profiles in a custom agent desktop. With this information readily available, agents can provide a more personalized customer service and faster resolution of customer issues. Agents no longer need to jump across various dashboards and tabs to gain an understanding of the customer’s journey. Instead, all the information is available in one place.

For example, with AnyCompany, an agent can quickly look at the transaction history of the caller to ask questions such as “How was your experience of using the product? Can I answer any questions related to it?”. The agent can also view the contact history attributes, such as transcripts and sentiment, to identify the disposition of earlier calls, thereby increasing the first call resolution metrics of the contact center.


Amazon Connect Customer Profiles customers have reduced their average channel time by removing the need for agents to jump between different applications to gather customer data as well as increased self-service workflows by providing a personalized routing experience to their customers. To learn how to set up a similar experience with your organization, refer to this Github repository. To learn how to enable your agent’s desktop to use the native customer profile widget, follow the instructions here. If instead you want to add customer profiles to a custom CCP, follow the instructions here.