Understanding Contact Center components

<body>
<p id="docs-hc-snippet" style="display: none;">Take a moment to understand the building blocks of Contact Center and how they interact.</p>
<div class="article-banners">
<div id="docs-wmp-link">
<a href="https://support.zendesk.com/hc/en-us/articles/5411234991258-plan" rel="noopener" target="_blank">What's my plan?</a>
</div>

<div class="article-banner" id="addon_contact-center">
<table>
<tbody>
<tr>
<td>
<strong>Add-on</strong>
</td>
<td>Contact Center</td>
</tr>
</tbody>
</table>
</div>

</div>
<div id="docs-ai-summary">
<p id="docs-ai-summary-toggle">Verified AI summary <span id="up-triangle">◀</span><span id="down-triangle">▼</span></p>
<p id="docs-ai-summary-content">Understand the key components of Contact Center: Amazon Connect for handling calls and chats, Amazon Cognito for user authentication, and Amazon CloudFormation for automating AWS resource setup. The Contact Center app enhances the Connect experience with features like an agent desktop and AI tools. Data stays in your AWS account, ensuring security. For updates, use a dual-stack process for safe rollbacks.</p>
</div>

<div class="body">

<p class="p">Take a moment to understand the building blocks of Contact Center and how they
interact.</p>
<p class="p">This article contains the following topics:</p>
<div class="p">
<ul class="ul" id="final_cc_understanding_components_pod__ul_gwn_bsv_g3c">
<li class="li"><a class="xref" href="#amazon-connect">Amazon Connect Customer</a></li>
<li class="li"><a class="xref" href="#amazon-cognito">Amazon Cognito</a></li>
<li class="li"><a class="xref" href="#amazon-cf">Amazon CloudFormation</a></li>
<li class="li"><a class="xref" href="#amazon-lambda">AWS Lambda functions</a></li>
<li class="li"><a class="xref" href="#zd-id-service">Zendesk Identity Provider</a></li>
<li class="li"><a class="xref" href="#cc-app">Contact Center app</a></li>
<li class="li"><a class="xref" href="#dual-stack-upgrade">Dual-stack upgrade process</a></li>
</ul>
</div>
</div>
<div aria-labelledby="ariaid-title2" class="topic nested1" id="amazon-connect">
<h2 class="title topictitle2" id="ariaid-title2">Amazon Connect Customer</h2>
<div class="body">
<p class="p">Amazon Connect Customer (Connect) is a cloud-based contact center service provided by AWS that
helps you set up and manage customer support calls and chats. Think of it as the
telephony and contact routing engine for Contact Center. It handles phone calls,
chat conversations, queues, contact flows, and more. Connect is the foundation of
Contact Center; every customer who uses Contact Center must have their own Connect
instance in their AWS account. Each Contact Center environment links one-to-one with
a specific Connect instance. You can't link multiple Connect instances to one
Contact Center account or vice versa.</p>
</div>
</div>
<div aria-labelledby="ariaid-title3" class="topic nested1" id="amazon-cognito">
<h2 class="title topictitle2" id="ariaid-title3">Amazon Cognito</h2>
<div class="body">
<p class="p">Amazon Cognito is an AWS service for user authentication and authorization. It allows
you to manage user sign-up, sign-in, and access control for web or mobile
applications. Amazon Cognito provides a user pool where user accounts (agents,
supervisors, admins) who will log into Contact Center are stored. Cognito securely
handles passwords and sign-in, so that users can sign into the Contact Center app (web
application). Cognito is used to create and manage agent identities instead of using
a custom system. During setup, a Cognito user pool is automatically created using
CloudFormation to facilitate identity management.</p>
</div>
</div>
<div aria-labelledby="ariaid-title4" class="topic nested1" id="amazon-cf">
<h2 class="title topictitle2" id="ariaid-title4">Amazon CloudFormation</h2>
<div class="body">
<p class="p">AWS CloudFormation is a service that helps you automate the setup of AWS resources
using templates. CloudFormation uses templates to deploy the necessary AWS
components, services, and permissions for Contact Center, with minimal manual
input.</p>
<p class="p">The CloudFormation stack (a collection of AWS resources defined by a template)
creates and configures resources such as the Amazon Cognito user pool, Identity and
Access Management (IAM) roles and permissions, AWS Lambda functions, streaming
connections, and other components that allow Connect and Contact Center to work
together. Using CloudFormation saves time and reduces errors in setting up the
backend services that power Contact Center.</p>
</div>
</div>
<div aria-labelledby="ariaid-title5" class="topic nested1" id="amazon-lambda">
<h2 class="title topictitle2" id="ariaid-title5">AWS Lambda functions</h2>
<div class="body">
<p class="p">AWS Lambda is a serverless compute service that runs code in response to events.
Contact Center uses Lambda functions to automate deployment tasks and process
runtime events from services such as Amazon Connect Customer, Amazon S3, and Amazon
Kinesis.</p>
</div>
<div aria-labelledby="ariaid-title6" class="topic nested2" id="amazon-lambda-deploy">
<h3 class="title topictitle3" id="ariaid-title6">Deployment lambdas</h3>
<div class="body">
<p class="p">These lambdas run during deployment to discover or configure the AWS
resources that Contact Center uses.</p>
<div class="tablenoborder">
<table border="1" cellpadding="4" cellspacing="0" class="table" frame="border" id="amazon-lambda-deploy__table_d53_kkl_kjc" rules="all" summary="">
<colgroup>
<col>
<col>
</colgroup>
<tbody class="tbody">
<tr class="row">
<td class="entry nocellnorowborder" style="vertical-align:top;">Lambda</td>
<td class="entry cell-norowborder" style="vertical-align:top;">What</td>
</tr>
<tr class="row">
<td class="entry nocellnorowborder" style="vertical-align:top;">FetchConnectDetails</td>
<td class="entry cell-norowborder" style="vertical-align:top;">Reads the Connect instance configuration at
deployment time, including storage settings, bucket names, KMS
keys, Kinesis streams, and the Amazon Customer Profiles domain.
The outputs drive nested stack parameters.</td>
</tr>
<tr class="row">
<td class="entry nocellnorowborder" style="vertical-align:top;">SubscribeRecordingBucket</td>
<td class="entry cell-norowborder" style="vertical-align:top;">Enables EventBridge notifications on the recording
S3 bucket at deployment time.</td>
</tr>
<tr class="row">
<td class="entry row-nocellborder" style="vertical-align:top;">ContactLensStreamsLambda</td>
<td class="entry cellrowborder" style="vertical-align:top;">Associates the Amazon Contact Lens Kinesis stream
with the Connect instance storage configuration at
deployment time, if no existing stream is already
configured.</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div aria-labelledby="ariaid-title7" class="topic nested2" id="amazon-lambda-runtime">
<h3 class="title topictitle3" id="ariaid-title7">Runtime lambdas</h3>
<div class="body">
<p class="p">These lambdas run when Contact Center needs to process call activity,
conversation data, or user requests.</p>
<div class="tablenoborder">
<table border="1" cellpadding="4" cellspacing="0" class="table" frame="border" id="amazon-lambda-runtime__table_f53_kkl_kjc" rules="all" summary="">
<colgroup>
<col>
<col>
<col>
</colgroup>
<tbody class="tbody">
<tr class="row">
<td class="entry nocellnorowborder" style="vertical-align:top;">Lambda</td>
<td class="entry nocellnorowborder" style="vertical-align:top;">What</td>
<td class="entry cell-norowborder" style="vertical-align:top;">When</td>
</tr>
<tr class="row">
<td class="entry nocellnorowborder" style="vertical-align:top;">ZendeskVoicePostCall</td>
<td class="entry nocellnorowborder" style="vertical-align:top;">Processes Contact Trace Record stream records,
reads the call recording from S3, and sends call data to the
Zendesk Voice API.</td>
<td class="entry cell-norowborder" style="vertical-align:top;">After a voice call ends, when CTR stream records
are available.</td>
</tr>
<tr class="row">
<td class="entry nocellnorowborder" style="vertical-align:top;">ZendeskVoiceSearch</td>
<td class="entry nocellnorowborder" style="vertical-align:top;">Searches for the caller’s Zendesk ticket or contact
record.</td>
<td class="entry cell-norowborder" style="vertical-align:top;">During a live voice call, when Connect
invokes the Lambda.</td>
</tr>
<tr class="row">
<td class="entry nocellnorowborder" style="vertical-align:top;">ContactLensEventsLambda</td>
<td class="entry nocellnorowborder" style="vertical-align:top;">Consumes the Contact Lens Kinesis stream and
forwards real-time conversation analysis events to
Zendesk.</td>
<td class="entry cell-norowborder" style="vertical-align:top;">When Amazon Contact Lens emits stream
events.</td>
</tr>
<tr class="row">
<td class="entry nocellnorowborder" style="vertical-align:top;">CTRIngestLambda</td>
<td class="entry nocellnorowborder" style="vertical-align:top;">Ingests Contact Trace Record data from Kinesis and
forwards analytics data to Zendesk, including data used for the
Resolution Code dashboard.</td>
<td class="entry cell-norowborder" style="vertical-align:top;">When Connect publishes CTR records to the
stream.</td>
</tr>
<tr class="row">
<td class="entry nocellnorowborder" style="vertical-align:top;">TranscriptIngestLambda</td>
<td class="entry nocellnorowborder" style="vertical-align:top;">Reads chat transcript JSON from S3 and uploads it
to Zendesk.</td>
<td class="entry cell-norowborder" style="vertical-align:top;">When EventBridge detects that a chat transcript
file is available in S3.</td>
</tr>
<tr class="row">
<td class="entry nocellnorowborder" style="vertical-align:top;">RecordingIngestLambda</td>
<td class="entry nocellnorowborder" style="vertical-align:top;">Notifies Zendesk when a voice call recording .wav
file is available in S3.</td>
<td class="entry cell-norowborder" style="vertical-align:top;">When EventBridge detects that a recording file is
available in S3.</td>
</tr>
<tr class="row">
<td class="entry nocellnorowborder" style="vertical-align:top;">ZendeskAPI</td>
<td class="entry nocellnorowborder" style="vertical-align:top;">Serves as the API Gateway proxy for the Zendesk
admin UI. It reads and writes AWS Systems Manager Parameter
Store values and AWS Secrets Manager values.</td>
<td class="entry cell-norowborder" style="vertical-align:top;">When the Zendesk admin UI makes API
requests.</td>
</tr>
<tr class="row">
<td class="entry nocellnorowborder" style="vertical-align:top;">VoiceAIBrokerRegisterContext</td>
<td class="entry nocellnorowborder" style="vertical-align:top;">Registers a Voice AI context and returns the
transfer phone number and DTMF tones needed to continue the call
flow.</td>
<td class="entry cell-norowborder" style="vertical-align:top;">When Connect invokes the Lambda from a
contact flow.</td>
</tr>
<tr class="row">
<td class="entry row-nocellborder" style="vertical-align:top;">MainHandler</td>
<td class="entry row-nocellborder" style="vertical-align:top;">Handles browser requests from the Contact Center
agent UI. It proxies calls to Connect, Customer Profiles,
and Wisdom, generates presigned S3 URLs for transcripts and
attachments, and manages Cognito sessions.</td>
<td class="entry cellrowborder" style="vertical-align:top;">When the agent UI sends browser requests.</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div aria-labelledby="ariaid-title8" class="topic nested1" id="zd-id-service">
<h2 class="title topictitle2" id="ariaid-title8">Zendesk Identity Provider</h2>
<div class="body">
<p class="p">Zendesk provides single sign-on (SSO) by acting as a SAML 2.0 identity provider (IdP)
to the AWS services that power Contact Center. You keep using your corporate IdP to
sign in to Zendesk, such as Okta, Entra ID, or Google Workspace. After you sign in
to Zendesk, it acts as a SAML 2.0 IdP and signs you in to Amazon Connect Customer, Amazon
Cognito, and the AWS Management Console with IdP-initiated SAML SSO. You don’t need
to configure separate SSO integrations for those services, and your multi-factor
authentication (MFA) and access policies stay in your IdP. This is built for Contact
Center’s AWS services, not as a general SAML broker for arbitrary third-party
service providers.</p>
</div>
</div>
<div aria-labelledby="ariaid-title9" class="topic nested1" id="cc-app">
<h2 class="title topictitle2" id="ariaid-title9">Contact Center app</h2>
<div class="body">
<p class="p">Zendesk for Contact Center is a built-by-Zendesk app that works with Connect. It
provides an intuitive agent interface and additional features (like omnichannel
inbox, AI-powered tools, and advanced dashboards) to enhance the Connect experience.
Agents log into the Contact Center web interface to receive calls or messages,
handled through the customer’s Connect instance. </p>
<p class="p">Contact Center is deployed in the customer’s AWS environment. All customer and contact
center data (call recordings, customer info, and so on) stays in the customer’s AWS
account instead of Zendesk's servers. This helps to ensure security and privacy. To
use Contact Center, you need to link the Connect instance to the Contact Center app
and deploy the AWS components (using CloudFormation) that facilitate the
integration. Once set up, Contact Center and Connect operate as a unified contact
center solution.</p>
<p class="p">For more information, see <a class="xref" href="https://support.zendesk.com/hc/en-us/articles/9696121449114" target="_blank">Navigating the Contact Center app</a>.</p>
</div>
</div>
<div aria-labelledby="ariaid-title10" class="topic nested1" id="dual-stack-upgrade">
<h2 class="title topictitle2" id="ariaid-title10">Dual-stack upgrade process</h2>
<div class="body">
<p class="p">The required infrastructure for Contact Center is deployed to your AWS environment
using CloudFormation. Once deployed, that stack is never updated using the
CloudFormation update process. Instead, a new (dual) CloudFormation stack is created
and, once ready, Contact Center is reconfigured to use the new infrastructure. Once
tested and validated, the old stack can be deleted. This ensures you have a safe
rollback point.</p>
<p class="p">To perform an update, an updated template URL must be <a class="xref" href="https://support.zendesk.com/hc/en-us/articles/4408843597850" target="_blank">requested from Zendesk</a>.</p>
</div>
</div>
<script id="docs-schema-markup" type="application/ld+json">{
"@context": "https://schema.org",
"@type": "TechArticle",
"@id": "https://support.zendesk.com/hc/en-us/articles/9829206009242-Understanding-Contact-Center-components",
"url": "https://support.zendesk.com/hc/en-us/articles/9829206009242-Understanding-Contact-Center-components",
"headline": "Understanding Contact Center components",
"description": "You can understand the components and interactions of a cloud-based contact center solution, including its AWS services and deployment processes, to manage customer support calls and chats effectively.",
"articleSection": "Contact Center basics",
"datePublished": "2025-10-15T01:29:51+00:00",
"dateModified": "2026-06-05T15:29:19.636308+00:00",
"inLanguage": "en-US",
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://support.zendesk.com/hc/en-us/articles/9829206009242-Understanding-Contact-Center-components"
},
"author": {
"@type": "Organization",
"name": "Zendesk",
"url": "https://www.zendesk.com"
},
"publisher": {
"@type": "Organization",
"name": "Zendesk"
},
"isPartOf": {
"@type": "WebSite",
"name": "Zendesk Help",
"url": "https://support.zendesk.com/hc/en-us"
},
"about": {
"@type": "SoftwareApplication",
"name": "Zendesk"
}
}</script><script id="ai-summary-script">
//<![CDATA[
const ai_summary_style = document.createElement('style');
ai_summary_style.innerHTML = `#styled-article-body{padding:0 0 0}#article-body #docs-ai-summary{background-color:#f3f3f3;border:1px solid #d3d3d3;padding:10px 10px 6px;margin-bottom:16px}#article-body #docs-ai-summary #docs-ai-summary-toggle{font-size:.9em;font-weight:700;margin-bottom:4px;cursor:pointer;display:flex;justify-content:space-between;align-items:center}#article-body #docs-ai-summary #docs-ai-summary-toggle #up-triangle{margin-left:auto;padding-right:10px;display:none}#article-body #docs-ai-summary #docs-ai-summary-toggle #down-triangle{margin-left:auto;padding-right:10px}#article-body #docs-ai-summary #docs-ai-summary-content{font-size:.9em;padding-left:25px;padding-right:25px;margin-bottom:12px}`;
document.head.appendChild(ai_summary_style);

const toggleAISummary = () => {
const summary = document.getElementById("docs-ai-summary-content");
const upTriangle = document.getElementById("up-triangle");
const downTriangle = document.getElementById("down-triangle");
if (summary.style.display === "none") {
summary.style.display = "block";
upTriangle.style.display = "none";
downTriangle.style.display = "inline";
} else {
summary.style.display = "none";
upTriangle.style.display = "inline";
downTriangle.style.display = "none";
}
};

document.getElementById("docs-ai-summary-toggle").addEventListener("click", toggleAISummary);
//]]>
</script>
</body>