

# Set up Amazon Connect outbound campaigns
<a name="enable-outbound-campaigns"></a>

This topic explains how to set up Amazon Connect outbound campaigns, a feature of Amazon Connect and formerly known as high-volume outbound communications.

## Important things to know
<a name="important-things-to-know-oc"></a>
+ The phone numbers that outbound campaigns can call are based on the AWS Region where your Amazon Connect instance is created. For a list of AWS Regions and countries, see [Outbound campaigns](regions.md#campaigns_region) in the *Availability of Amazon Connect services by Region* topic. 
+ You must obtain pre-authorization by creating an AWS Support ticket to use Amazon Connect outbound campaigns for event-driven mass notifications, such as severe weather warnings, evacuation notices, disaster response communications, or utility disruptions that impact several thousand of customers. 

   This review process helps ensure the reliable delivery of these critical messages while maintaining service quality for all customers. While we may support these use-cases, they require additional technical validation due to their unique nature and implications, such as the impact on carrier networks for voice or SMS communications. 

  Follow the instructions in [Requesting a quota increase](https://docs.aws.amazon.com/servicequotas/latest/userguide/request-quota-increase.html) in the *Service Quotas User Guide* to open a ticket that contains a detailed description of your requirements. Additional charges may apply based on your location and anticipated notification volumes. 

## Before you begin
<a name="campaign-prereq"></a>

You need a few things in order to use outbound campaigns:
+ Make sure your Amazon Connect instance is [enabled for outbound calling](enable-outbound-calls.md). 
+ Create a dedicated outbound campaigns queue to handle any contacts that will be routed to agents as a result of the campaign.
+ Assign the queue to the agent's routing profile.
+ Create and publish a flow that includes a [Check call progress](check-call-progress.md) block. This block enables you to branch based on whether a person or a machine answered a call, for example.

## Create an AWS KMS key
<a name="create-kms-key-campaigns"></a>

When you enable outbound campaigns, you can provide your own [AWS KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys). You create and manage these keys, and AWS KMS charges apply. You can also use an AWS owned key. 

When using an API to enable or disable outbound campaigns, make sure the API user is either the administrator or has the following permissions: `kms:DescribeKey`, `kms:CreateGrant`, and `kms:RetireGrant` for the key.

**Note**  
To switch the KMS key that is associated with outbound campaigns, first you need to disable outbound campaigns, and then re-enable it using a different AWS KMS key.

## Configure outbound campaigns
<a name="configure-outbound-campaigns"></a>

1. Open the Amazon Connect console at [https://console.aws.amazon.com/connect/](https://console.aws.amazon.com/connect/).

1. On the instances page, choose the instance alias. The instance alias is also your **instance name**, which appears in your Amazon Connect URL. The following image shows the **Amazon Connect virtual contact center instances** page, with a box around the instance alias.  
![\[The Amazon Connect virtual contact center instances page, the instance alias.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/instance.png)

1. In the navigation pane, choose **Channels and communications**, **Outbound campaigns**.

1. On the **Outbound campaigns** page, choose **Enable**. If you don't see this option, then check whether [outbound campaigns is available in your AWS Region](regions.md#campaigns_region). 

1. Under **Encryption**, enter your own AWS KMS key or choose **Create an AWS KMS key**.

   If you choose **Create an AWS KMS key**:
   + A new tab in your browser opens for the Key Management Service (KMS) console. On the **Configure key** page, choose **Symmetric**, and then choose **Next**, as shown in the following image.  
![\[The Configure key page, Symmetric option.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/customer-profiles-create-kms-key-configure-key.png)
   + On the **Add labels** page, add a name and description for the key, and then choose **Next**.
   + On the **Define key administrative permissions** page, choose **Next**.
   + On the **Define key usage permissions** page, choose **Next**.
   + On the **Review and edit key policy** page, choose **Finish**.

     In the following example, the name of the key starts with **bcb6fdd**:  
![\[The Review and edit key policy page.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/customer-profiles-create-kms-key-note-key.png)
   + Return to the tab in your browser for the Amazon Connect console, **Enable outbound campaigns** page. Click or tap in the **AWS KMS key** for the key you created to appear in a dropdown list. Choose the key you created.

1. Choose **Enable outbound campaigns**. 

1. It takes a few minutes for outbound campaigns to be enabled. When it's successfully enabled, you can create outbound campaigns in Amazon Connect for voice calls. If it does not enable, verify you have the required [IAM permissions](security-iam-amazon-connect-permissions.md). 

# Create an outbound campaign in Amazon Connect
<a name="how-to-create-campaigns"></a>

1.  Open the Amazon Connect Outbound campaigns page from the Amazon Connect admin website.   
![\[The Amazon Connect navigation menu showing the Outbound campaigns option highlighted in the left navigation pane.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/how-to-create-campaigns-1.png)

1. From the **Output Campaigns**, choose Create Campaign.

    You have two options to create an outbound campaigns. Use visual journey builder to create multi-channel and multi-steps using an intuitive drag-and-drop canvas, or use guided campaign builder to create a single-channel using step-by-step guidance.  
![\[The Campaign management dashboard showing the Create campaign button in the upper right corner.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/how-to-create-campaigns-2.png)

1. Enter a campaign **Name**.
**Note**  
You can also use your own recipient list or campaign management tool by choosing **Host external campaign**. For more information on setting up a campaign with your own resources, see the [High Volume Outbound Communication with Amazon Connect Outbound Campaigns](https://aws.amazon.com/blogs/aws/new-high-volume-outbound-communication-with-amazon-connect-outbound-campaigns/) blog post.  

![\[Host external campaign link.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/how-to-create-campaigns-external-campaign.png)
  
![\[The Campaign setup page showing the Name field where users enter the campaign name.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/how-to-create-campaigns-3.png)

1.  Select a **[Customer Segment](https://docs.aws.amazon.com/connect/latest/adminguide/customer-segments-managing-segments.html)** to use for this campaign.  Recipients for the campaign will be determined at the campaign's scheduled start time using the chosen segment. 
**Important**  
If you are running a campaign initiated by a customer event and using segment powered by Spark SQL, the campaign checks the segment membership as of the last time the segment was exported (segment snapshot), not at the point when the campaign is running. This is provided as an API attribute (lastComputedAt). If you receive a 4XX error, you also need to run a new export (segment snapshot). If you need Connect to automatically check membership as the campaign is running, please use Classic Segmentation.

1.  Choose the **Channel** for the main communication of the campaign. The supported channels include **Agent assisted voice**, **Automated voice**, **Email**, and **SMS**.   
![\[The Channel selection interface showing options for Agent assisted voice, Automated voice, Email, and SMS communication channels.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/how-to-create-campaigns-4.png)

**Note**  
 Recipients with incorrect or invalid endpoints are dropped from the communication. For example, for an Email campaign, a recipient with email address "jane.doe@abc\$1com" is not valid and will not be processed. 

## Outbound campaigns channel configurations
<a name="create-campaigns-channel-configurations"></a>

------
#### [ Email ]

1.  Select an [Outgoing email address](create-email-address1.md) to send the email from.  This address must be one already added to your Amazon Connect Instance.

1.  Optionally enter a **Friendly Sender Name**.  This is the name that the recipients' email client will display. 

1.  Select an **Email Message Template** to use when sending.   

1.  Select the **Template Alias or Version** number to use with the campaign.  If you select an alias, then the contents of emails sent by the campaign may change when the alias is updated to point to a new template version. If you select a version, the campaign will always send the exact same content for the life of the campaign.   
![\[Email campaign creation interface with sender, template, and scheduling configuration options.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/create_campaign_email-1.png)

------
#### [ Agent Assisted Voice ]

1.  Select the **Contact Flow** to use for the outbound call.  If you want reattempts, call classification, or waiting for a prompt, then the flow must contain a [Check call progress](https://docs.aws.amazon.com/connect/latest/adminguide/check-call-progress.html) block. The Check call progress block is not supported for preview dialing mode.

1.  Select an **Agent Queue** to use for the outbound calls.  Any call originating from the campaign is routed to agents assigned to this queue. 

1.  Select a **Source Phone Number**.  This is a phone number associated with the Amazon Connect instance. 

**Important**  
Not all phone numbers can be used for Amazon Connect Outbound campaigns. Outside of the US, UK, Japan, you need to check whether your number is outbound campaigns capable. If you have problems with a specific number not working, contact AWS Support to verify whether your number can be enabled for Outbound campaigns calls.
 Telecom regulations in certain countries dictate use of phone numbers from specific carriers for outbound calling. For more information, see the [Amazon Connect Telecoms Country Coverage Guide](https://d1v2gagwb6hfe1.cloudfront.net/Amazon_Connect_Telecoms_Coverage.pdf) to learn more. 
 Select the dialing mode.  See [Best practices for Outbound Campaigns](https://docs.aws.amazon.com/connect/latest/adminguide/campaign-best-practices.html) for more information on the dialing modes. 
Disable call classification when using preview dialing mode.
 Enable call classification and waiting for a prompt. 
 Input the desired **Dialing Capacity Allocation**.  Allocates dialing capacity for this campaign between multiple active campaigns.  
The purpose of this field is you can indicate the most telecom capacity to be allocated for that specific campaign by the predictive dialer algorithm.  
For example, if there are 3 campaigns concurrently running, and this field has been configured to say:  
50% for Campaign1
70% for Campaign2
90% for Campaign3
The dialer will allocate the most capacity to Campaign3 (up to 90%), then to Camaign2 (up to 70%) and then to Campaign1 (up to 50%) of the telecom capacity dynamically available.   
If two campaigns are idle and only third one has contacts, it get full capacity. Its capacity reduces if any other campaigns start actively dialing.
Enter the desired **Agent Allocation**.  This allocation is a weight assigned to this campaign and used to determine the total number of *available* agents belonging to the provided queue for which an outbound call should be placed.  This allocation is converted to a percentage based on the allocation provided to all other campaigns using the same queue.

**Note**  
 To reduce call connection latency between your customers and available agents we recommend disabling the use of call classification. 
 If you disable call classification, and if your flow includes the [Check call progress](https://docs.aws.amazon.com/connect/latest/adminguide/check-call-progress.html) block, the contact is routed down the Error branch. 
For preview dialing mode, a contact is enqueued only when there is a [Transfer to queue](transfer-to-queue.md) set in the flow. For a list of supported blocks, see **Chat** channel of [Supported channels for flow blocks in Amazon Connect](block-support-by-channel.md).
Preview dialing mode does not support [agent whisper flow](create-contact-flow.md#contact-flow-types), however the [outbound whisper flow](create-contact-flow.md#contact-flow-types) can play the intended whisper to the customer.
For preview dialing mode, please adjust contact flow to use profile id as the default search key in agent workspace. For more information, see [ Use contact attributes to autopopulate customer profiles](https://docs.aws.amazon.com/connect/latest/adminguide/auto-pop-customer-profile.html).  

  ```
  {
    "profileSearchKey": "_profileId",
    "profileSearchValue": "$.Attributes.connect_customer-profile_profile-id"
  }
  ```

![\[Customer Profiles Attributes.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/create-campaign-preview-customer-profiles-attribute.png)

 Ensure **Enable wait for prompt** is selected. If it is not selected, the ML-powered call classifier won't listen for a voicemail prompt, and instead the next block in the flow will be triggered immediately.   

![\[Agent-assisted voice campaign creation interface with configuration options and settings.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/create_campaign_agent-assisted-voice-1.png)


------
#### [ Automated Voice ]

1.  Select the **Contact Flow** to use for the outbound call.  If **Reattempts**, call classification, or waiting for a prompt is desired, then the flow must contain a [Check call progress](https://docs.aws.amazon.com/connect/latest/adminguide/check-call-progress.html) block. 

1.  Select a **Source Phone Number**.  This is a phone number associated with your Amazon Connect instance.

**Important**  
Not all phone numbers can be used for Amazon Connect Outbound campaigns. Outside of the US, UK, Japan, you need to check whether your number is outbound campaigns capable. If you have problems with a specific number not working, contact AWS Support to verify whether your number can be enabled for Outbound campaigns calls.
 Telecom regulations in certain countries dictate use of phone numbers from specific carriers for outbound calling. For more information, see the [Amazon Connect Telecoms Country Coverage Guide](https://d1v2gagwb6hfe1.cloudfront.net/Amazon_Connect_Telecoms_Coverage.pdf) to learn more. 
 Enable call classification if desired.   

![\[Automated voice campaign creation interface showing configuration options for outbound calls.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/create_campaign_automated-voice-1.png)


------
#### [ SMS ]

1.  Select an **Originator**.  This is the phone number used to *send* the text messages. For more information, see [Step 1: Request a number in AWS End User Messaging SMS](setup-sms-messaging.md#get-sms-number).

1.  Select an **SMS Message Template** to use when sending.   

1.  Select the **Template alias or version** number to use with the campaign.  If you select an alias, then the contents of SMS sent by the campaign may change when the alias is updated to point to a new template version.  On the other hand, if select a version, the campaign will always send the exact same content for the life of the campaign.   
![\[SMS configuration panel showing originator selection, SMS message template dropdown, and template alias or version selection options.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/create_campaign_sms-1.png)

------
#### [ WhatsApp ]

**Important**  
To enable Amazon Connect Outbound Campaigns to send messages and Amazon Q Connect to manage and create WhatsApp message templates, your WhatsApp Business Account (WABA) in AWS End User Messaging Social must be tagged with `AmazonConnectEnabled`: `True`.  
If you linked your WABA to Amazon Connect after WhatsApp support for Amazon Connect Outbound Campaigns was launched, this tag is automatically applied. For WABAs linked before this launch, you must manually add this tag to enable these capabilities.  
For information about adding tags to your WABA, see [Getting started with AWS End User Messaging Social](https://docs.aws.amazon.com/social-messaging/latest/userguide/getting-started-whatsapp.html).

1.  Select an **Originator**.  This is the phone number used to *send* the text messages. For more information, see [Set up WhatsApp Business messaging](whatsapp-integration.md).

1.  Select a **WhatsApp Message Template** to use when sending.   

1.  Select the **Template alias or version** number to use with the campaign. If an alias is selected, then the contents of WhatsApp sent by the campaign might change when the alias is updated to point to a new template version. If a Version is selected, the campaign will always send the exact same content for the life of the campaign.   
![\[WhatsApp configuration page showing originator selection, WhatsApp message template dropdown, and template alias or version selection options.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/create_campaign_whatsapp-1.png)

------

## Outbound campaigns attempts
<a name="campaign-attempts"></a>

### Communications per recipient
<a name="communications-per-recipient"></a>

You can control how often each recipient is contacted by setting communication limits for the campaign. Simply specify the maximum number of messages a recipient can receive within a defined time frame (e.g., per day, week, or month). If a recipient has already received the maximum number of communications within any of the time frames you set, Amazon Connect Outbound Campaigns will automatically skip that recipient and they won’t receive additional messages from the campaign.

**Example:**

If you set a limit of 4 communications per 2 days and 6 communications per 2 weeks (14 days), any recipient who has already received 4 messages in the last 2 days or 6 messages in the last 14 days will not be contacted again by this campaign.

Amazon Connect Outbound Campaigns considers any time a recipient has been contacted, regardless of the recipients interaction with the message, as a communication. For example, a phone call ending in a voicemail is still considered a communication. Amazon Connect Outbound Campaigns will adjust the count of communications if it can determine that the message never reached the end user, and will always err on the side of over-counting.

In addition to setting communication limits for individual campaigns, you can also define **Total Communication Limits** at the instance level. These limits control how many messages a recipient can receive across **all campaigns** running within your Amazon Connect instance over a specific time frame. If a recipient reaches the specified limit—for example, 10 communications per week—they will be excluded from further messaging across all campaigns until the time window resets. This helps ensure that overall message volume stays within acceptable boundaries. 

For **critical campaigns**, you have the option to **opt out** of total communication limits by enabling the **Ignore total limits** setting. This allows these campaigns to bypass the instance-wide limits, ensuring important messages are delivered without being blocked by other ongoing campaigns.

**Note**  
The total count of messages across campaigns will not necessarily be incremented immediately, but will eventually be accurate. For example, if two campaigns target the same user at the same moment in time, the first campaign's communication may not be reflected in the total communication count by the time the second campaign checks.
All communications across all campaigns in the active state are considered when determining if a recipient has breached their total limits.
 Amazon Connect Outbound Campaigns measures a day as a rolling 24 hour window from the current moment. 
Any communications sent from a campaign that **ignores total limits** will **not count** toward the instance's total communication limits. These campaigns are treated as **outside the scope** of instance-level limits.

**Total Communication Limits**

![\[Total Communication Limits.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/communications-per-recipient-1.png)


**Campaign Communication Limits frames**

![\[Campaign Communication Limits frames.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/communications-per-recipient-1-1.png)


### Outbound campaigns reattempt rules
<a name="reattempt-rules"></a>

 Outcomes for communication result in disposition codes. You can select a subset of those disposition codes for which you would like to re-attempt a communication.  The **Dispositions** dropdown is pre-populated with possible codes to use. 
+ **Retry**: Select the channel on which to retry.  After the channel is selected, the possible additional configuration appears.
+  **Start**: Select an optional wait time before re-attempting. 

Following is a list of disposition codes that are available in the **Disposition** dropdown menu for you to configure a retry rule. 
+ **Voice channel (Agent and Automated Voice)**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/connect/latest/adminguide/how-to-create-campaigns.html)
**Note**  
By default, you can only re-attempt one time unless you configure engagement preferences and upload data into Customer Profiles.
+ **Email channel**     
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/connect/latest/adminguide/how-to-create-campaigns.html)
+ **SMS channel**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/connect/latest/adminguide/how-to-create-campaigns.html)

The following image shows an example of setting the **Retry** rule for **Bounced** email.

![\[Reattempt rules configuration panel showing retry settings for failed contact attempts.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/reattempt-rules-1.png)


The following image shows if you choose **Send email** in response to a **Bounced** email, you are prompted to provide the **Outgoing email address**, **Friendly sender name**, **Email template**, and version.

![\[The options to configure a new email to send in response to a bounced email.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/reattempt-rules-2.png)


The following image shows if you choose **Send SMS** in response to a **Bounced** email, you are prompted to provide the **Phone number**, **SMS template**, and **Template alias or version**.

![\[The options to configure an SMS message in response to a bounced email.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/reattempt-rules-3.png)


## Campaign set up and Cycling through recipient contact types for communication
<a name="campaign-set-up-and-cycling-through-recipient-contant-types"></a>

The purpose of this section is to showcase how you can configure the campaign to cycle through multiple contact types for each recipient.

**Note**  
Configure engagement preferences and upload data into Customer Profiles. For details about customer profile ingestion before to creating a campaign, see [Ingesting account-based profiles](customer-profiles-object-type-mappings.md#customer-profiles-ingesting-account-based-profiles).
+ The **Max dial re-attempts per number** defines the count of reattempts for each contact type across all dispositions.
+ **Next action - optional** enables switching to the next available contact type for the profile/account as provided using engagement preferences in Customer Profiles

**Note**  
You can set the number of retry attempts and next actions, but communications will not exceed the maximum limits set for each recipient.

![\[You can set the number of retry attempts and next actions, but communications will not exceed the maximum limits set for each recipient.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/campaign-set-up-and-cycling-through-recipient-contant-types-1.png)


**Example scenarios**

Priority dialing order (in Customer Profile):
+ Primary (Mobile)
+ Secondary (Home)
+ Tertiary (Work)

**Scenario A - Call Attempts:** All numbers fail with "Busy"- Retry action: Call again. Max dial attempts per number: 0. Toggled to retry all available numbers for the recipient.

![\[All numbers fail with "Busy"- Retry action: Call again. Max dial attempts per number: 0. Toggled to retry all available numbers for the recipient.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/campaign-set-up-and-cycling-through-recipient-contant-types-example-A.png)



| Attempt | Phone Number | Disposition | Action Taken | Total Attempts | 
| --- | --- | --- | --- | --- | 
| 1 | Mobile | Busy | Move on to next number (home) | 1 | 
| 2 | Home | Busy | Move on to next number (work) | 2 | 
| 3 | Work | Busy | End - max dial attempts reached | 3 | 

**Scenario B - Call Attempts:** All numbers fail with "Busy"- Retry action: Call again. Max dial attempts per number: 2. Toggled to retry all available numbers for the recipient.

![\[All numbers fail with "Busy"- Retry action: Call again. Max dial attempts per number: 2. Toggled to retry all available numbers for the recipient.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/campaign-set-up-and-cycling-through-recipient-contant-types-example-B.png)



| Attempt | Phone Number | Disposition | Action Taken | Total Attempts | 
| --- | --- | --- | --- | --- | 
| 1 | Mobile | Busy | Wait 15 mins, call again | 1 | 
| 2 | Mobile | Busy | Wait 15 mins, call again | 2 | 
| 3 | Mobile | Busy | Move on to next number (Home) | 3 | 
| 1 | Home | Busy | Wait 15 mins, call again | 4 | 
| 2 | Home | Busy | Wait 15 mins, call again | 5 | 
| 3 | Home | Busy | Move on to next number (Work) | 6 | 
| 1 | Work | Busy | Wait 15 mins, call again | 7 | 
| 2 | Work | Busy | Wait 15 mins, call again | 8 | 
| 3 | Work | Busy | End - max dial attempts reached | 9 | 

**Scenario C - Call Attempts:** All numbers fail with "Busy"- Retry action: Call again. Max dial attempts per number: 2. Toggled NOT to retry all available numbers for the recipient.

![\[All numbers fail with "Busy"- Retry action: Call again. Max dial attempts per number: 2. Toggled NOT to retry all available numbers for the recipient.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/campaign-set-up-and-cycling-through-recipient-contant-types-example-C.png)



| Attempt | Phone Number | Disposition | Action Taken | Total Attempts | 
| --- | --- | --- | --- | --- | 
| 1 | Mobile | Busy | Wait 15 mins, call again | 1 | 
| 2 | Mobile | Busy | Wait 15 mins, call again | 2 | 
| 3 | Mobile | Busy | End - max dial attempts reached | 3 | 

**Scenario D - Call Attempts:** Mixed disposition between "Unanswered", "Busy"- Retry action: Call again. Max dial attempts per number: 2. Toggled to retry all available numbers for the recipient.

![\[Mixed disposition between "Unanswered", "Busy"- Retry action: Call again. Max dial attempts per number: 2. Toggled to retry all available numbers for the recipient.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/campaign-set-up-and-cycling-through-recipient-contant-types-example-D.png)



****  

| Attempt | Phone Number | Disposition | Action Taken | Total Attempts | 
| --- | --- | --- | --- | --- | 
| 1 | Mobile | Unanswered | Wait 30 mins, call again | 1 | 
| 2 | Mobile | Busy | Wait 15 mins, call again | 2 | 
| 3 | Mobile | Busy | Move on to next number (Home) | 3 | 
| 1 | Home | Busy | Wait 15 mins, call again | 4 | 
| 2 | Home | Unanswered | Wait 30 mins, call again | 5 | 
| 3 | Home | Unanswered | Move on to next number (Work) | 6 | 
| 1 | Work | Busy | Wait 15 mins, call again | 7 | 
| 2 | Work | Busy | Wait 15 mins, call again | 8 | 
| 3 | Work | Busy | End - max dial attempts reached | 9 | 

## Communication Time
<a name="communication-time"></a>

 You can specify valid times to attempt to contact your users.  The **Active communication time** specifies those valid times, based on the day of the week.  **Exceptions to communication time**, an optional setting, specifies specific days of the year during which you want no communications sent, even if that day happens to fall in an active communication time. 

### Time zone
<a name="time-zone"></a>

 In order for the Campaign to determine appropriate time to attempt communication with a particular recipient, you need to provide a **Time Zone**.  You may either select a **Standard time zone**, which will be used for all recipients, or you may specify the **Recipient's local time zone**. Recipients with no time zone specified are excluded from message deliveries.  
+  **Standard time zone**: 

   The time zone selected will be used for all recipients.  Select this option if you know the time zone of all recipients in your segment or if you want all communications sent at the same moment in time. 
+  **Recipient's local time zone**: 

   Amazon Connect Outbound Campaigns use the provided [Address](https://docs.aws.amazon.com/connect/latest/APIReference/API_connect-customer-profiles_CreateProfile.html#connect-connect-customer-profiles_CreateProfile-request-Address) and/or the area code from the [Phone Number](https://docs.aws.amazon.com/connect/latest/APIReference/API_connect-customer-profiles_CreateProfile.html#connect-connect-customer-profiles_CreateProfile-request-PhoneNumber) to infer the recipients time zone. If the time zone cannot be determined (for example, if either the Address and/or Phone Number is missing or is invalid), the recipient will be dropped from the Campaign. Select this option if it's important to send communications to recipients only during their specific local times. 

![\[Time zone configuration panel for setting campaign contact hours by geographic region.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/time-zone-1.png)


### Active communication time
<a name="active-communication-time"></a>

 The **Active communication time** represents the times during which Amazon Connect Outbound campaigns may send communications for this campaign. To add active communication times: 

1.  Select the channel. Alternatively, select **Apply to all channels** to apply the active communication times to each channel. 

1.  Select the day of the week to configure. You can add multiple active communication times for each day, if desired.

1.  Select the time frame during which Amazon Connect Outbound campaigns can send communications on the given day. 

**Note**  
Amazon Connect Outbound campaigns will evaluate the **From** and **To** times relative to either the **Standard time zone** or the **Recipient's local time zone**, whichever is specified. 
 If no **Active communication time** is provided, communications to intended recipients will be attempted as soon as the campaign is published.

![\[Active communication time configuration panel showing day and time selection for campaign outreach.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/active-communication-time-1.png)


### Exceptions to communication time - (optional)
<a name="exceptions-to-communication-time-optional"></a>

 **Exceptions to communication time** is an optional set of specific calendar days for which you do not want communications sent.  If exceptions are included in the Campaign, then active communication times must also be specified.  To add exceptions to communication time: 

1.  Select the channel.  

1.  Add a **Name** for the exception.  This name is only for informational purposes and does not affect the running of the campaign. 

1.  Select the **Date range** for the exception. 
**Important**  
The end date is exclusive. For example, if you select July 12 - 13, it blocks all communications only from 00:00 July 12 to 23:59 July 12. **July 13 would have no exception**.

![\[Configuration panel for setting exceptions to standard communication time rules.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/exceptions-to-communication-time-optional-1.png)


## Schedule campaign
<a name="schedule-campaign"></a>

Specify when you want your campaign to begin:
+  **Start now**: Start the campaign right away.
+  **Start later**: Select the specific day and time for the campaign to begin.
+  **Expiry Date and Time**: The date and time at which Amazon Connect Outbound campaigns should end the campaign. An expired campaign appears with a **Completed** status a few moments after expiry time.

The start and end times of a campaign are based on your local time zone.

![\[Campaign schedule wizard step showing Start now and Start later options, expiry date and time fields, and the Refresh campaign section with an unchecked Refresh checkbox.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/campaign-schedule-page-1.png)


### Refresh - (optional)
<a name="schedule-campaign-refresh"></a>

If you want your campaign to periodically re-evaluate the segment to find newly eligible profiles and enroll them, select the **Refresh** checkbox.

When refresh is enabled, the following settings become available:
+  **Refresh frequency**: How often the segment is checked for new or updated profiles. Specify a numeric value and select a time unit (**hours** or **days**). The minimum refresh frequency is 1 hour.

  For example, if you schedule your campaign to start at 7:00 AM EST and set a refresh frequency of 1 hour, the segment is re-evaluated every hour starting at 7:00 AM EST.

**Important**  
A recipient may be active only in a campaign once at any given time. So if they are still waiting to exit the campaign when the next Segment Snapshot is created, and are a member of that Snapshot, they are **NOT** allowed to enter the campaign as a part of the second Snapshot.
If a recipient is a part of a segment Snapshot and is not currently in the campaign, they are allowed to enter, regardless of whether they have previously gone through the campaign.

![\[Refresh campaign section with Refresh enabled, refresh frequency set to 1 hour, Customize entry limits unchecked, showing default values of Entry limit Unlimited and Entry interval limit None.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/campaign-schedule-page-2.png)


 **Entry limits**: Entry limits control how many times and how often the same profile can enter the campaign. By default, profiles can enter the campaign unlimited times with no interval restriction. To customize entry limits, select the **Customize entry limits** checkbox.

The following entry limit fields are available:
+  **Entry limit**: The maximum number of times the same profile can enter the campaign. Set to 0 for unlimited entries.
+  **Entry interval limit**: The minimum time that must pass before a profile can enter the campaign again. Specify a numeric value and select a time unit (hours or days). Set to 0 for no minimum interval. If the entry interval limit is shorter than the refresh frequency, the refresh frequency takes precedence.

 **Example**: Consider a campaign that targets profiles whose subscription expires within 7 days. With a refresh frequency of 1 hour, an entry limit of 3, and an entry interval of 3 hours:
+ The segment is re-evaluated every hour.
+ Each profile can enter the campaign up to 3 times.
+ A profile won't enter again for at least 3 hours, even though the campaign refreshes hourly.

![\[Refresh campaign section with Refresh enabled, refresh frequency set to 1 day, Customize entry limits checked, showing Entry limit and Entry interval limit input fields.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/campaign-schedule-page-3.png)


## Review and publish
<a name="review-and-publish"></a>

Take a moment to review your campaign prior to publishing. The Review page displays a summary of all campaign settings, including the schedule and refresh configuration.

**Important**  
These settings cannot be changed once your campaign has been published.

Once you have reviewed your campaign, choose **Publish** to publish your campaign.

![\[Review and publish page showing campaign configuration summary including schedule and refresh settings before final publication.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/campaign-review-1.png)


## Campaign states
<a name="campaign-states"></a>

After a campaign is running, you can stop it. You can also delete a campaign at any time.

![\[Campaign state diagram showing transitions between Active, Paused, Stopped, and Failed states.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/campaign-states-1.png)


 Following is a description of each campaign state: 
+  **Draft**: The campaign is being developed and hasn't been published yet. 
+  **Active**: The campaign has been developed and published. Depending on the campaign's schedule, the campaign may currently be running or scheduled to start running at a later time. 
+  **Stopped**: The campaign is stopped. You can't resume a campaign that is stopped. 
+  **Error**: An error state caused the campaign to fail. 
+  **Completed**: The campaign has finished running. All participants have entered the campaign and no participants are waiting to complete the campaign. 

![\[Detailed view of campaign state options and actions available for campaign management.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/campaign-states-2.png)


# Create a multi-step and multi-channel journey
<a name="create-a-multi-step-and-multi-channel-journey"></a>

On the Outbound Campaigns page, you will have two options to create an outbound campaigns: Visual Journey Builder for multi-channel and multi-steps using an intuitive drag-and-drop canvas, or Guided Campaign Builder to create a single-channel with step-by-step guidance. 

1. From the **Outbound Campaigns** page, choose **Create Journey**.

1. Enter a journey **Name**.

1. Select a Customer Segment or Customer event to use for this journey. Recipients for the journey will be determined at the journey's scheduled start time using the chosen segment or customer event. 

1. To connect with a journey, first create a **journey flow** that supports multi-step experiences triggered by events or audience segments, then select the flow you want to connect to this journey. 

1. If you haven’t created a journey flow yet, you can click “create journey flow” and will take you to the flow canvas. Please refer to **Journey flow blocks definition** for details. 

1. If the selected journey flow has voice channel, you will use the **Voice setup** option to define the details. 

1. You can choose Agent assisted voice or automated voice and complete the channel configuration. Please refer to details on [Outbound campaigns channel configurations](how-to-create-campaigns.md#create-campaigns-channel-configurations). 

## Delivery guardrails
<a name="create-a-multi-step-and-multi-channel-journey-delivery-guardrails"></a>

### 
<a name="communications-per-recipient"></a>

You can control how often each recipient is contacted by setting communication limits for the Journey. Simply specify the maximum number of messages a recipient can receive within a defined time frame (e.g., per day, week, or month). If a recipient has already received the maximum number of communications within any of the time frames you set, Amazon Connect Outbound Campaigns will automatically skip that recipient and they won’t receive additional messages from the Journey.

**Example:**

If you set a limit of 4 communications per 2 days and 6 communications per 2 weeks (14 days), any recipient who has already received 4 messages in the last 2 days or 6 messages in the last 14 days will not be contacted again by this Journey.

Amazon Connect Outbound Campaigns considers any time a recipient has been contacted, regardless of the recipients interaction with the message, as a communication. For example, a phone call ending in a voicemail is still considered a communication. Amazon Connect Outbound Campaigns will adjust the count of communications if it can determine that the message never reached the end user, and will always err on the side of over-counting. In addition to setting communication limits for individual journeys, you can also define **Total Communication Limits** at the instance level. These limits control how many messages a recipient can receive across all journeys running within your Amazon Connect instance over a specific time frame. If a recipient reaches the specified limit—for example, 10 communications per week—they will be excluded from further messaging across **all journeys** until the time window resets. This helps ensure that overall message volume stays within acceptable boundaries.

For **critical journeys**, you have the option to **opt out** of total communication limits by enabling the **Ignore total limits** setting. This allows these journeys to bypass the instance-wide limits, ensuring important messages are delivered without being blocked by other ongoing journeys. 

**Note**  
The total count of messages across journeys will not necessarily be incremented immediately, but will eventually be accurate. For example, if two journeys target the same user at the same moment in time, the first journey's communication may not be reflected in the total communication count by the time the second campaign checks.   
All communications across all journeys in the active state are considered when determining if a recipient has breached their total limits.  
Amazon Connect Outbound Campaigns measures a day as a rolling 24 hour window from the current moment.  
Any communications sent from a journey that **ignores total limits** will not count toward the instance's total communication limits. These journeys are treated as **outside the scope** of instance-level limits.

### Communication time
<a name="communication-time"></a>

You can specify valid times to attempt to contact your users. The **Active communication time** specifies those valid times, based on the day of the week. **Exceptions to communication** time, an optional setting, specifies specific days of the year during which you want no communications sent, even if that day happens to fall in an active communication time.

#### Time zone
<a name="communication-time-zone"></a>

In order for the Journey to determine appropriate time to attempt communication with a particular recipient, you need to provide a **Time Zone**. You may either select a **Standard time zone**, which will be used for all recipients, or you may specify the **Recipient's local time zone**. Recipients with no time zone specified are excluded from message deliveries.
+ Standard time zone: The time zone selected will be used for all recipients. Select this option if you know the time zone of all recipients in your segment or if you want all communications sent at the same moment in time.
+ Recipient's local time zone: Amazon Connect Outbound Campaigns use the provided Address and/or the area code from the Phone Number to infer the recipients time zone. If the time zone cannot be determined (for example, if either the [Address](https://docs.aws.amazon.com/connect/latest/APIReference/API_connect-customer-profiles_CreateProfile.html#connect-connect-customer-profiles_CreateProfile-request-Address) and/or [Phone Number](https://docs.aws.amazon.com/connect/latest/APIReference/API_connect-customer-profiles_CreateProfile.html#connect-connect-customer-profiles_CreateProfile-request-PhoneNumber) is missing or is invalid), the recipient will be dropped from the Journey. Select this option if it's important to send communications to recipients only during their specific local times.

#### Active communication time (optional)
<a name="active-communication-time"></a>

The **Active communication time** represents the times during which Amazon Connect Outbound campaigns may send communications for this journey. To add active communication times: Select the channel. Alternatively, select Apply to all channels to apply the active communication times to each channel. Select the day of the week to configure. You can add multiple active communication times for each day, if desired. Select the time frame during which Amazon Connect Outbound campaigns can send communications on the given day. 

#### Exceptions to communication time (optional)
<a name="exceptions-to-communication-time"></a>

**Exceptions to communication time** is an optional set of specific calendar days for which you do not want communications sent. If exceptions are included in the Journey, then active communication times must also be specified. To add exceptions to communication time:

Select the channel. Add a **Name** for the exception. This name is only for informational purposes and does not affect the running of the journey. Select the **Date range** for the exception. 

### Schedule journey
<a name="schedule-journey"></a>

Specify when you want your journey to begin:
+ **Start now**: Start the journey right away.
+ **Start later**: Select the specific day and time for the journey to begin.
+ **Expiry Date and Time**: The date and time at which Amazon Connect Outbound campaigns should end the journey. An expired journey appears with a **Completed** status a few moments after expiry time.

The start and end times of a journey are based on your local time zone.

#### Refresh (optional)
<a name="journey-refresh"></a>

If you want your journey to periodically re-evaluate the segment to find newly eligible profiles and enroll them, select the **Refresh** checkbox.

When refresh is enabled, the following settings become available:

 **Refresh frequency**: How often the segment is checked for new or updated profiles. Specify a numeric value and select a time unit (**hours** or **days**). The minimum refresh frequency is 1 hour. For example, if you schedule your journey to start at 7:00 AM EST and set a refresh frequency of 1 hour, the segment is re-evaluated every hour starting at 7:00 AM EST.

**Important**  
A recipient may be active only in a journey once at any given time. So if they are still waiting to exit the journey when the next Segment Snapshot is created, and are a member of that Snapshot, they are **NOT** allowed to enter the journey as a part of the second Snapshot.
If a recipient is a part of a segment Snapshot and is not currently in the journey, they are allowed to enter, regardless of whether they have previously gone through the journey.

 **Entry limits**: Entry limits control how many times and how often the same profile can enter the journey. By default, profiles can enter the journey unlimited times with no interval restriction. To customize entry limits, select the **Customize entry limits** checkbox.

The following entry limit fields are available:
+  **Entry limit**: The maximum number of times the same profile can enter the journey. Set to 0 for unlimited entries.
+  **Entry interval limit**: The minimum time that must pass before a profile can enter the journey again. Specify a numeric value and select a time unit (hours or days). Set to 0 for no minimum interval. If the entry interval limit is shorter than the refresh frequency, the refresh frequency takes precedence.

 **Example**: Consider a journey that targets profiles whose subscription expires within 7 days. With a refresh frequency of 1 hour, an entry limit of 3, and an entry interval of 3 hours:
+ The segment is re-evaluated every hour.
+ Each profile can enter the journey up to 3 times.
+ A profile won't enter again for at least 3 hours, even though the journey refreshes hourly.

### Review and publish
<a name="journey-review-and-publish"></a>

Take a moment to review your journey prior to publishing. The Review page displays a summary of all journey settings, including the schedule and refresh configuration.

**Important**  
These settings cannot be changed once your journey has been published.

Once you have reviewed your journey, choose **Publish** to publish your journey.

# Journey flow block definitions
<a name="journey-flow-block-definitions"></a>

Use flow blocks to design customer journeys in the Amazon Connect Flow Designer. Drag blocks onto the canvas and connect them to define how each journey progresses. The following table lists all available flow blocks that you can use. Choose any block name in the Block column for more information. 


| Block | Description | 
| --- | --- | 
| [Send communication](journey-flow-block-send-communication.md) |  Sends an outbound communication such as voice, SMS, WhatsApp, or email.  | 
| [Set attributes](journey-flow-block-set-attributes.md) |  Stores key-value pairs for use across a journey.  | 
| [Check attributes](journey-flow-block-check-attributes.md) |  Branches the flow based on comparisons between attribute values.  | 
| [Check communication status](journey-flow-block-check-communication-status.md) |  Evaluates the delivery or contact status of a previous communication.  | 
| [Distribute by percentage](journey-flow-block-distribute-by-percentage.md) |  Routes profiles randomly to branches based on configured percentages (e.g. for A/B testing).  | 
| [Loop](journey-flow-block-loop.md) |  Repeats a branch for a defined number of iterations before continuing.  | 
| [Wait](journey-flow-block-wait.md) |  Waits for a specified period of time and optionally for specified events.  | 
| [Custom action](journey-flow-block-custom-action.md) |  Invokes an Lambda function and uses returned data in the flow.  | 
| [Customer profiles](journey-flow-block-customer-profiles.md) |  Checks segment membership or attributes from Amazon Connect Customer Profiles.  | 
| [End flow](journey-flow-block-end-flow.md) | Ends the current journey flow. | 

# Send communication
<a name="journey-flow-block-send-communication"></a>

**Important**  
Before using this block, ensure you completed [channel configuration](how-to-create-campaigns.md) including claimed phone numbers for agent assisted voice or automated voice, claim a phone number or originating identity in AWS End User Messaging SMS and then import the number into Amazon Connect for SMS or WhatsApp, and enabled email at Amazon Connect instance. For instructions, see [Set up SMS messaging](setup-sms-messaging.md), [Enable email campaigns](enable-email.md).

## Description
<a name="journey-flow-block-send-communication-description"></a>

Use this block to send communications through channels such as voice, SMS, WhatsApp, or email. Before using this block, ensure channel setup is complete:
+ Voice: Claim phone numbers for automated or agent-assisted calls.
+ SMS / WhatsApp: Claim numbers or originating identities in AWS End User Messaging, then import them into Connect.
+ Email: Enable email campaigns in your Connect instance.

**Example use cases**
+ Send onboarding, appointment reminder, or promotional messages.
+ Trigger fallback logic to reach a customer on another channel when a prior attempt fails.

## Contact types
<a name="journey-flow-block-send-communication-channels"></a>


| Contact type | Supported? | 
| --- | --- | 
| Voice | Yes | 
| SMS | Yes | 
| WhatsApp | Yes | 
| Email | Yes | 
| Custom channel | Yes, via Custom action | 

## How to configure this block
<a name="journey-flow-block-send-communication-configure"></a>

You can configure the **Send communication** block by using the Amazon Connect admin website or by using the SendCommunication action in Flow language.

### Common properties
<a name="journey-flow-block-send-communication-common-properties"></a>


| Property | Description | 
| --- | --- | 
| From | Select the originating phone number or email address claimed for your instance. | 
| Message template (non-voice) | Choose a predefined template for SMS, WhatsApp, or email. | 
| Template alias / version | Select a specific version or alias of the message template. | 
| Store outbound communication | Optionally save the outbound message ID in flow attributes for delivery tracking. | 
| Dial criteria (voice) | Specify dialing behavior or targeting logic for voice calls. | 
| Engagement preference (voice) | Define how to prioritize multiple contact numbers per customer. | 

## Send an SMS (text message)
<a name="journey-flow-block-send-communication-sms"></a>

Configure the following properties on the page to send an SMS message:
+ **From**: The phone number that the message is to be sent from. The dropdown menu shows a list of phone numbers that are claimed for your Amazon Connect instance.
+ **Message template**: Use the dropdown menu to choose from a list of SMS templates. You can choose one template to be sent to the customer.
+ **Template alias or version**: Use the dropdown menu to choose different SMS template alias or version.
+ **Store outbound communication**: You can choose to store outbound communication in flow attributes. By saving the outbound message ID in a flow attribute, you can track its delivery status.

## Send an email
<a name="journey-flow-block-send-communication-email"></a>

Configure the following properties on the page to send an email message:
+ **From**: The email address that the message is to be sent from. The dropdown menu shows a list of email addresses that are claimed for your Amazon Connect instance.
+ **Display name**: You can personalize how you email address appears to your customers in their inbox.
+ **Message template**: Use the dropdown menu to choose from a list of email templates. You can choose one template to be sent to the customer.
+ **Template alias or version**: Use the dropdown menu to choose different email template alias or version.
+ **Store outbound communication**: You can choose to store outbound communication in flow attributes. By saving the outbound message ID in a flow attribute, you can track its delivery status.

## Voice call
<a name="journey-flow-block-send-communication-voice"></a>

Configure the following properties on the page to use outbound voice channel:
+ **Dial criteria**: Configure how the voice call should be handled based on detection criteria. Use the dropdown to choose a segment that the voice call will target for.
+ **Engagement preference**: If your contact list includes single account with more than 1 profile, such as joint account holders, and 1 profile could have more than 1 phone number, you can use engagement preference to set contact strategy based on preference.
+ **Store outbound communication**: You can choose to store outbound communication in flow attributes. By saving the outbound message ID in a flow attribute, you can track its delivery status.

# Set attributes
<a name="journey-flow-block-set-attributes"></a>

This topic defines the flow block for storing key-value pairs that can be referenced throughout a journey flow. You can define and update attributes at any step to pass data between blocks or personalize later actions. 

## Description
<a name="journey-flow-block-set-attributes-description"></a>

The Set Attributes block stores key-value pairs that can be referenced throughout a journey flow. You can define and update attributes at any step to pass data between blocks or personalize later actions.

For example, you can:
+ Store campaign or contact-level data such as customerSegment, preferredChannel, or accountType to drive conditional logic
+ Capture and reuse values returned from external systems through Lambda functions, such as offer eligibility or compliance status
+ Record message delivery results, such as SMS delivery status or email bounce reason, for use in follow-up logic
+ Set loop-level counters or flags to control iterations in multi-step journeys

The Set Attributes block supports the following namespaces:
+ Flow attributes – Attributes that persist within the journey execution context
+ Lambda invocation – Attributes generated or returned by Lambda function calls
+  Loop – Attributes created or updated within looping constructs in a journey
+  Delivery receipts – Attributes populated based on message delivery results, such as DeliveryStatus. 
+  Outbound communication – Attributes related to outbound campaign execution, such as ChannelType or outbound communication ID. 

Example use case:
+ You can use the Set Attributes block to retry a failed SMS message on another channel. When an SMS delivery receipt returns a DeliveryStatus of failed, you can set an attribute preferredChannel to Email and route the flow to an email delivery branch. This helps ensure the customer still receives the message without manual intervention.

## How to configure this block
<a name="journey-flow-block-set-attributes-configure"></a>

You can configure the Set attributes block by using the Amazon Connect admin website or by using the SetAttributes action in Flow language. 

## Common properties
<a name="journey-flow-block-set-attributes-common-properties"></a>


| Property | Description | 
| --- | --- | 
| Attribute name | Enter the key name for the attribute. | 
| Value | Define a literal value or reference another attribute. | 
| Namespace | Choose the applicable namespace for the attribute. | 

# Check attributes
<a name="journey-flow-block-check-attributes"></a>

This topic defines the flow block for branching based on a comparison to the value of an attribute.

## Description
<a name="journey-flow-block-check-attributes-description"></a>

The Check Attributes block branches the journey flow based on comparisons between attribute values. It evaluates contact, flow, or system attributes to determine which path the journey should take next.

You can use this block to apply conditional logic such as:
+ Routing customers to different paths based on segment, preferred channel, or message outcome
+ Checking Lambda-returned values such as eligibility results or risk scores
+ Comparing delivery receipt attributes to decide follow-up actions
+ Controlling loop progression based on counters or flags set in earlier steps

**Example use cases**
+ Channel fallback: If an SMS delivery receipt returns a DeliveryStatus of failed, use the Check Attributes block to branch the journey and send an email instead.
+ Personalization and targeting: Branch based on customer segment. For example, if customerSegment equals premium, send a high-value offer; otherwise, continue to a standard path.
+ Dynamic scheduling: Evaluate an attribute such as DaysSinceLastEngagement. If greater than 30, send a re-engagement message; if less than 7, skip outreach.
+ Lambda-driven logic: After a Lambda function returns an eligibilityStatus, continue only if the value equals true.
+ Loop control: Use Check Attributes to evaluate loop counters. If loopCount is less than 3, continue retrying; otherwise, end the loop.

## How to configure this block
<a name="journey-flow-block-check-attributes-configure"></a>

You can configure the **Check attributes** block by using the Amazon Connect admin website or by using the CheckAttributes action in Flow language.

### Common properties
<a name="journey-flow-block-check-attributes-common-properties"></a>


| Property | Description | 
| --- | --- | 
| Attribute key | Select the attribute to evaluate. | 
| Operator | Choose the comparison condition (Equals, Contains, Greater than, etc.). | 
| Value | Specify the target value for comparison. | 

Supported comparison conditions include: **Equals**, **Is less than**, **Is less or equal**, **Is greater than**, **Is greater or equal**, **Starts with**, **Ends with**, **Contains**, **Exists**, **Key exists**.

**Supported attribute namespaces**

The Check Attributes block can read attributes from the same namespaces supported by the Set Attributes block:
+ Flow attributes
+ Lambda invocation
+ Loop
+ Delivery receipts
+ Outbound communication

# Check communication status
<a name="journey-flow-block-check-communication-status"></a>

## Description
<a name="journey-flow-block-check-communication-status-description"></a>

Use this block to verify whether an outbound message or voice call succeeded before proceeding. You can add up to 5 conditions.

**Example use cases**
+ Follow up only after an SMS or email is delivered.
+ Retry or route to an agent if a call fails or reaches voicemail.

## How to configure this block
<a name="journey-flow-block-check-communication-status-configure"></a>

You can configure the **Check communication status** block in the admin website or using the CheckCommunicationStatus action in Flow language.

## Supported status
<a name="journey-flow-block-check-communication-status-supported"></a>


| Channel | Status | 
| --- | --- | 
| WhatsApp | Failed | 
|  | Delivered | 
|  | Sent | 
|  | Read | 
| SMS | Text invalid | 
|  | Text blocked | 
|  | Text delivered | 
|  | Text successful | 
|  | Text queued | 
|  | Text pending | 
|  | Text TTL expired | 
|  | Text carrier unreachable | 
|  | Text invalid message | 
|  | Text carrier blocked | 
|  | Text spam | 
|  | Text unknown | 
| Voice | Voicemail beep | 
|  | Voicemail no beep | 
|  | AMD unanswered | 
|  | Sit tone busy | 
|  | Sit tone invalid number | 
|  | Human answered | 
|  | AMD unresolved | 
|  | AMD unresolved\$1silence | 
|  | AMD not applicable | 
|  | Sit tone detected | 
|  | Fax machine detected | 
|  | AMD error | 
|  | Outbound destination endpoint error | 
|  | Outbound resource error | 
|  | Outbound attempt failed | 
|  | Outbound preview discarded | 
|  | Expired | 
|  | AMD disabled | 
|  | Initiated | 
|  | connected\$1to\$1system | 
|  | Contact data updated | 
|  | Queued | 
|  | Connected to agent | 
|  | Disconnected | 
|  | Completed | 
| Email | Bounce | 
|  | Complaint | 
|  | Delivery | 
|  | Send | 
|  | Reject | 
|  | Open | 
|  | Click | 
|  | Rendering Failure | 
|  | DeliveryDelay | 
|  | Subscription | 

# Distribute by percentage
<a name="journey-flow-block-distribute-by-percentage"></a>

## Description
<a name="journey-flow-block-distribute-by-percentage-description"></a>
+ This block is useful for doing A/B testing. It routes profiles randomly based on a percentage.
+ Profiles are distributed randomly, so exact percentage splits may or may not occur.

## How it works
<a name="journey-flow-block-distribute-by-percentage-works"></a>

This block creates static allocation rules based on how you configure it. Internal logic generates a random number between 1-100. This number identifies which branch to take. It doesn't use current or historical volume as part of it's logic.

For example, say a block is configure like this:
+ 20% = A
+ 40% = B
+ 40% remaining = Default

When a profile is being routed through a flow, Amazon Connect generates the random number.
+ If number is between 0-20, the contact is routed down the A branch.
+ Between 21-60 it's routed down the B branch.
+ Greater than 60 it's routed down the Default branch.

# Loop
<a name="journey-flow-block-loop"></a>

## Description
<a name="journey-flow-block-loop-description"></a>

Counts the number of times customers are looped through the **Looping** branch.
+ After the loops are completed, the **Complete** branch is followed.

## Configuration tips
<a name="journey-flow-block-loop-configuration-tips"></a>

If you enter 0 for the loop count, the **Complete** branch is followed the first time this block runs.

# Wait
<a name="journey-flow-block-wait"></a>

## Description
<a name="journey-flow-block-wait-description"></a>
+ This block pauses the flow for the specified wait time or for the specified event.
+ For example, you want to send a SMS reminder after an initial introduction email. You can either set up a fixed duration (e.g. 3 days) or Wait until specific time and date. The next activity block will execute once the wait time is timeout.

## How to configure this block
<a name="journey-flow-block-wait-configure"></a>

You can configure the **Wait** block in the admin website or using the Wait action.

### Common properties
<a name="journey-flow-block-wait-common-properties"></a>


| Property | Description | 
| --- | --- | 
| Set duration | Enter a fixed delay (e.g., 3 hours or 2 days). | 
| Wait until | Specify an exact date/time within 7 days. | 

# Custom action
<a name="journey-flow-block-custom-action"></a>

## Description
<a name="journey-flow-block-custom-action-description"></a>

Use this block to call Lambda functions that fetch, validate, or transform data for use in the journey.

## How to configure this block
<a name="journey-flow-block-custom-action-configure"></a>

You can configure the **Custom action** block in the admin website or using the InvokeLambda action.

### Common properties
<a name="journey-flow-block-custom-action-common-properties"></a>


| Property | Description | 
| --- | --- | 
| Action | Select Invoke Lambda action | 
| Function ARN | Select a registered Lambda function. | 

**Example**

Invoke a Lambda to check offer eligibility, store the result in eligibilityStatus, and branch accordingly.

## Configuration
<a name="journey-flow-block-custom-action-configuration"></a>

Before you can invoke a Lambda using this block, you need to set up your Lambda functions at your Amazon Connect instance at AWS admin console. For similar information, see [Grant Amazon Connect access to your AWS Lambda functions](connect-lambda-functions.md).

When you do this for a journey flow block, you use the **Outbound campaigns** under the **Channels and communications** section, and to choose your Lambda function, you use the **Set up custom actions** section and then the **Lambda Functions** drop down.

# Customer profiles
<a name="journey-flow-block-customer-profiles"></a>

## Description
<a name="journey-flow-block-customer-profiles-description"></a>

Use this block to determine whether a profile belongs to a particular segment or meets specific profile criteria.

## How to configure this block
<a name="journey-flow-block-customer-profiles-configure"></a>

You can configure the **Customer profiles** block in the admin website or using the CheckSegmentMembership action.

### Common properties
<a name="journey-flow-block-customer-profiles-common-properties"></a>


| Property | Description | 
| --- | --- | 
| Action | Select check segment membership action | 
| Segment name | Select the segment to check. | 

**Example**

Proceed only for customers in the "Loyalty Gold" segment.

# End flow
<a name="journey-flow-block-end-flow"></a>

## Description
<a name="journey-flow-block-end-flow-description"></a>

**Important**  
The End flow block is a terminal flow block. It enables you to end a flow and the profiles will exit the Journey.
+ Ends the current journey flow.
+ This block is used for profiles exiting the journey flow.

**Configuration**

No configuration is required. Simply connect this block to the end of a branch.

# Create an outbound campaign using event triggers
<a name="how-to-create-campaigns-using-event-triggers"></a>

**Set up event triggers in the Amazon Connect admin website**

1. On the **Campaign set up** page, select **Customer event** under **Recipients**.  
![\[Campaign setup page with Customer event selected under Recipients section for event-triggered campaigns.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/how-to-create-campaigns-using-event-triggers-1.png)

1. Select an **Event source** to specify where the data originates, and configure the attribute conditions that will activate the event trigger.

   Event sources are based on integrations in your Customer Profiles domain. details on setting up your external application, see [Integrate with external applications](integrate-external-apps-customer-profiles.md#setup-integrations-title-menu). You can also integrate with [Kinesis](customer-profiles-kinesis-integration.md) or [S3](customer-profiles-object-type-mappings.md).  
![\[Event source selection panel showing integration options and attribute condition configuration.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/how-to-create-campaigns-using-event-triggers-2.png)

1. Select the **Delivery mode** and additional communication settings.  
![\[Delivery mode selection and additional communication settings for event-triggered campaigns.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/how-to-create-campaigns-using-event-triggers-3.png)

1. (Optional) Configure the **Recommendations** section to integrate Predictive Insights with your event-triggered campaign. This enables you to deliver personalized template content through email and SMS channels.  
![\[Recommendations section in Amazon Connect console showing Recommender dropdown with frequently_paired_items selected, Calculated attribute for recommender with _last_interacted_item_id, Number of recommendations set to 3, and Recommendation attributes with Name, Price, Description, ImageLink, and Category selected.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/how-to-create-campaigns-recommendations.png)

   Configure the following settings:
   + **Recommender name** – Select the name of the recommender you want to use to generate recommendations for the profiles associated with the campaign. You can only use recommenders that are active to generate recommendations.

     Predictive Insights offers several types of recommendations. For more information, see [Step 3: Creating Predictive Insights](predictive-insights-get-started.md#create-predictive-insights).
   + **Calculated Attribute for recommender** – This setting is only required when using a *Similar items* or *Frequently paired items* recommender type. This context helps the recommendation engine understand which product to base suggestions on, enabling more relevant and targeted recommendations for your customers.

     For example, you might use a calculated attribute like `_last_interacted_item_id` that captures the purchased item ID.
   + **Number of recommendations** – The maximum number of recommendations to generate for a profile. This can range between 1 to 3 recommendations.
   + **Recommendation attributes** – Define which attributes of the recommendations response are used in your message template.

   For more information about Predictive Insights, see [Get started with Predictive Insights](predictive-insights-get-started.md).

1. Verify your configurations and choose **Publish**.  
![\[Final review screen for event-triggered campaign configuration with Publish button.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/how-to-create-campaigns-using-event-triggers-4.png)

## Create outbound campaigns with event triggers using APIs
<a name="how-to-create-campaigns-using-event-triggers-api"></a>

**Amazon Connect Customer Profiles event trigger APIs**
+ Two API calls are made to create a functioning event trigger: 
  +  [CreateEventTrigger](https://docs.aws.amazon.com/connect/latest/APIReference/API_connect-customer-profiles_CreateEventTrigger.html): Defines which action to perform based on a specified condition.
  +  [PutIntegration](https://docs.aws.amazon.com/connect/latest/APIReference/API_connect-customer-profiles_PutIntegration.html): Defines the action to use.

**Example of an event trigger request:**

```
{
"Description": "string",
"EventTriggerConditions": [
{
"EventTriggerDimensions": [
{
"ObjectAttributes": [
{
"ComparisonOperator": "string",
"FieldName": "string",
"Source": "string",
"Values": [ "string" ]
}
]
}
],
"LogicalOperator": "string"
}
],
"EventTriggerLimits": {
"EventExpiration": number,
"Periods": [
{
"MaxInvocationsPerProfile": number,
"Unit": "string",
"Unlimited": boolean,
"Value": number
}
]
},
"ObjectTypeName": "string",
"SegmentFilter": "string",
"Tags": {
"string" : "string"
}
}
```

**The `ComparisonOperator` supports the following values:**


|  ComparisonOperator  |  Comment  |  Supported type  | 
| --- | --- | --- | 
|  INCLUSIVE  |  Checks if the target includes all the specified values.  |  String  | 
|  EXCLUSIVE  |  Checks if the target does not contain all the specified values.  |  String  | 
|  CONTAINS  |  Checks if the target contain any of the specified values.  |  String  | 
|  BEGINS\$1WITH  |  Checks if the target begins with the specified value.  |  String  | 
|  ENDS\$1WITH  |  Checks if the target ends with the specified value.  |  String  | 
|  GREATER\$1THAN  |  True if the target is greater than the specified value.  |  Number  | 
|  LESS\$1THAN  |  True if the target is less than the specified value.  |  Number  | 
|  GREATER\$1THAN\$1OR\$1EQUAL  |  True if the target is greater than or equal to the specified value.  |  Number  | 
|  LESS\$1THAN\$1OR\$1EQUAL  |  True if the target is less than or equal to the specified value.  |  Number  | 
|  EQUAL  |  True if the target is equal to the specified value.  |  Number  | 
|  BETWEEN  |  True if the target is within specific value range or timestamp.  |  Number/Date\$1  | 
|  NOT\$1BETWEEN  |  True if the target is not within specific value range or timestamp.  |  Number/Date\$1  | 
|  BEFORE  |  True if the target is before the specified timestamp.  |  Date  | 
|  AFTER  |  True if the target is after the specified timestamp.  |  Date  | 
|  ON  |  True if the target is on the specified timestamp.  |  Date  | 
+ **Source**: Used to define an attribute in the object.
  + Only one attribute is allowed in a single `ObjectAttribute` entry. 
+ **FieldName**: Used to point to the mapped attribute in Data Mapping.
  + Only one attribute is allowed in a single `ObjectAttribute` entry. 
+ **ObjectTypeName**: Supports all default and custom object type names, but not standard object types, such as `_profile`, `_asset`, `_order`, and others. 
+ **EventTriggerLimits**:
  +  Allow max of concurrent 20 event triggers per customer domain by default. 
  +  Default limit of 10 invocations per day, per profile, per trigger. You can override this by specifying `UNLIMITED` in `MaxInvocationPerProfile`. 
  +  **MaxInvocationPerProfile**:
    + Valid Range: Minimum value of 1. Maximum value of 1000. (or `UNLIMITED`)
  +  Unit:
    + Valid Values: HOURS, DAYS, WEEKS, MONTHS
  +  Value:
    + Valid Range: Minimum value of 1. Maximum value of 24
+  Time range comparison 
  +  Customer Profiles uses standard libraries to parse time values. For global services, it is important to account for timezone conversions to ensure accurate processing. 
+ The `EventExpiration` value is specified in milliseconds. When used to trigger a campaign, the maximum expiration time is capped at 15 minutes.

**Outbound campaigns event trigger APIs**
+ **CreateCampaignV2**

  The only changes needed for creating an event triggered campaign are the highlighted fields. The rest of the fields are the same as Scheduled Campaigns.

  ```
  {
      "name": "string",
      "connectInstanceId": "string",
      "channelSubtypeConfig": { 
      // or other channel parameters 
          "email": {
              "outboundMode": {
                  "agentless":{
                  }
              },
              "defaultOutboundConfig":{
                  "connectSourceEmailAddress":"example@example.com",
                  "wisdomTemplateArn":"arn:aws:wisdom:us-west-2:123456789012:message-template/dXXXXX0Pc8-195a-776f-0000-EXAMPLE/51219d5c-b1f4-4bad-b8d3-000673332",
                  "sourceEmailAddressDisplayName": "testEmailDisplayName"
              }
          }
      },
      "connectCampaignFlowArn": <Flow ARN>,
      "schedule": {
              "endTime": "2024-12-11T21:22:00Z",
              "startTime": "2024-10-31T20:14:49Z",
              "timeZone": "America/Los_Angeles"
      },
      "source": {
          "eventTrigger": {
              "customerProfilesDomainArn": <Domain ARN>
  }
  ```
+ **PutProfileOutboundRequestBatch**

  You are not able to directly invoke this API, but it will be logged within your Cloudtrail logs. This API is used to trigger a campaign after receiving an event, and is the mechanism that initiates a voice call, email, or SMS. 

# Enable outbound campaigns and Customer Profiles
<a name="enable-outbound-campaigns-customer-profiles"></a>

 **To enable Amazon Connect Customer Profiles and Amazon Connect outbound campaigns** 

1.  When creating an Amazon Connect instance, when you get to **Step 4 - Data storage**, keep **Enable Customer Profiles** selected, as shown in the following image. This option enables  Amazon Connect Customer Profiles and outbound campaigns.

![\[The Data storage page the Enable Customer Profiles option.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/enable-outbound-campaigns-customer-profiles-1.png)


1.  Select **Customize data storage (advanced)** to select a customer managed key for Customer Profiles and outbound campaigns from a dropdown list. An AWS owned key is used if you don't provide a custom key.  

1.  When a Amazon Connect instance is created successfully, outbound campaigns and Customer Profiles is enabled by default.  

## Existing customers enable outbound campaigns
<a name="existing-customers-enable-outbound-campaigns"></a>

**To enable Amazon Connect Outbound campaigns**

1.  Select the Amazon Connect instance you wish to enable outbound campaigns for.

1.  Choose **Outbound campaigns** in the left navigation pane.

1.  If you are setting up outbound campaigns for the first time, you will see an **Enable** button.  
![\[Outbound campaigns page showing the Enable button for first-time setup.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/existing-customers-enable-outbound-campaigns-1.png)

1.  Choose **Enable** to go to the KMS configuration page for outbound campaigns.    
![\[KMS configuration page for outbound campaigns showing encryption options.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/existing-customers-enable-outbound-campaigns-2.png)
**Note**  
The KMS configuration will only be used for the outbound campaigns configuration and the KMS key cannot be updated once it is created.

1. Choose **Enable outbound campaigns**. Upon enabling outbound campaigns, a Customer Profiles domain, and an Connect AI agents knowledge base with KnowledgeType `MESSAGE_TEMPLATES` will be created if none existed previously.

1. You will be redirected to the home page and see a notification bar indicating that resources are being created.  
![\[Notification banner indicating resources are being created for outbound campaigns.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/existing-customers-enable-outbound-campaigns-3.png)

1. A success banner will be display upon successfully enabling outbound campaigns.  
![\[Success banner confirming outbound campaigns have been successfully enabled.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/existing-customers-enable-outbound-campaigns-4.png)

1.  After successfully enabling an outbound campaign, and configuring a KMS key, the KMS (AWS Key Management Service) key that was previously selected for the campaign will be displayed.

1.  Choose **Manage email** to be redirected to the AWS Connect Email console. In the AWS Connect Email console, you can set up and configure your email domain, including verifying the domain, creating email addresses, and managing email sending and receiving settings.

1.  Choose **Manage SMS** to be directed to the AWS End User Messaging SMS console. In the AWS End User Messaging SMS, you can configure and set up SMS phone numbers for your application, including purchasing numbers, managing sender IDs, and configuring SMS messaging settings.

1. Choose **Manage voice** to be redirected to the Amazon Connect admin website. In the Amazon Connect admin website, you can claim and manage voice phone numbers for your contact center, set up call routing, and configure various voice-related features.

 **To upgrade outbound campaigns if you have a Amazon Connect instance with outbound campaigns enabled** 

1.  Select the Amazon Connect instance you wish to upgrade outbound campaigns for.

1.  Choose **Outbound campaigns**.

1.  If outbound campaigns was previously enabled, the **Upgrade** button will be displayed.
**Note**  
 Upgrading outbound campaigns will allow you to use segmentation and orchestration capabilities in the Amazon Connect admin website
 Upgrading outbound campaigns will update the current outbound campaigns page to new experience.

![\[Outbound campaigns page showing the Upgrade button for previously enabled campaigns.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/existing-customers-enable-outbound-campaigns-5.png)


1. Choose **Upgrade**.

![\[Upgrade confirmation dialog for outbound campaigns explaining new capabilities.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/existing-customers-enable-outbound-campaigns-6.png)


1.  After successfully upgrading an outbound campaign, the KMS (AWS Key Management Service) key that was previously selected for the campaign will be displayed. 

1.  Choose **Manage email** to be redirected to the Amazon Connect Email console. In the Amazon Connect Email console, you can set up and configure your email domain, including verifying the domain, creating email addresses, and managing email sending and receiving settings. 

1. Choose **Manage SMS** to be directed to the Amazon End User Messaging console. In the End User Messaging console, you can configure and set up SMS phone numbers for your application, including purchasing numbers, managing sender IDs, and configuring SMS messaging settings. 

1. Choose **Manage voice** to be redirected to the Amazon Connect admin website. In the Amazon Connect admin website, you can claim and manage voice phone numbers for your contact center, set up call routing, and configure various voice-related features. 

## How to delete Outbound campaigns configuration
<a name="how-to-delete-outbound-campaigns-configuration"></a>

 You can delete the Outbound campaigns configuration by using the Outbound campaigns `DeleteConnectInstanceConfig` API. The option to toggle the Outbound campaigns configuration on/off has been removed. The only way to turn off the Outbound campaigns feature in the UI is to delete your Amazon Connect instance.

### Error state and troubleshooting
<a name="error-state-and-troubleshooting"></a>

 When creating instance if you see a warning banner, you are either missing some permissions to enable these features or some failed to be created. You can configure those permissions at a different time.  

![\[Warning banner showing permission issues or failed resource creation during instance setup.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/error-state-and-troubleshooting-1.png)


If you navigate to the Outbound campaigns **Settings** page and see the following banner, you do not have the required permissions to access total communications limits.

![\[Warning banner showing total communications limits permission issues.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/error-state-and-troubleshooting-4.png)


In order to enable total limits permissions, you can navigate to the Amazon Connect admin website and under **Outbound campaigns**, choose **Upgrade permission**.

![\[Upgrade permission button in the Outbound campaigns section of the Amazon Connect admin website\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/error-state-and-troubleshooting-5.png)



|  **Error message**  |  **Cause**  |  **Resolution**  |  **Screenshot**  | 
| --- | --- | --- | --- | 
|  Already associated with another customer profiles domain, cannot be associated with multiple domains. |  An Outbound campaign can only be associated to one customer profile or one knowledge base at a time.   | You can either use the associated Customer Profiles domain, go back to the Customer Profiles domain page, and re-associate the domain, or you can find out which domain is associated by using the connect-campaign:ListConnectInstanceIntegrations API to find the Customer Profiles domain Arn. If needed, you can delete the integration between Outbound campaigns and Customer Profiles and re-associate it by deleting the integration by using the connect-campaigns:DeleteConnectInstanceIntegration API. |  ![\[Error message indicating a campaign is already associated with another customer profiles domain.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/error-state-and-troubleshooting-2.png)  | 
|  Outbound campaigns has been created. However, some features may not work as expected. Please check your settings and try again. |  A resource failed to configure correctly. However, some resources succeeded. The error message will help indicate to the customer what went wrong. |  Follow the instructions on the warn/error banner. |  ![\[Warning message showing partial success with outbound campaigns creation but with potential issues.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/error-state-and-troubleshooting-3.png)  | 

# Enable email campaigns for your Amazon Connect instance
<a name="enable-email"></a>

This topic is for administrators who have access to the Amazon Connect console. It explains how to enable email campaigns for your instance using the console. For the APIs used to enable email campaigns programmatically, see [APIs to enable email for campaigns](#apis-email-setup1). 

When you enable email, you get an autogenerated email domain. Optionally, you can also use custom domains.
+ **Amazon Connect email domain**. The email domain is **instance-alias*.email.connect.aws*. 
+ **Custom domains**. You can specify up to 5 custom domains that have been [onboarded to Amazon SES](https://docs.aws.amazon.com/ses/latest/dg/creating-identities.html#just-verify-domain-proc).

## Step 1: Move Amazon SES into production mode
<a name="move-ses-production1"></a>

Amazon Connect uses Amazon SES for sending emails. If you have a new Amazon SES instance, you need to take it out of sandbox mode. For instructions, see [Request production access (Moving out of the Amazon SES sandbox)](https://docs.aws.amazon.com/ses/latest/dg/request-production-access.html) in the *Amazon SES Developer Guide*. 

After you move Amazon SES into production mode, if you already enabled email when you created your Amazon Connect instance, skip to these topics:
+ [(Optional) Step 4: Use your own custom email domains](#use-custom-email1)
+ [Step 5: Configure a CORS policy on your attachments bucket](#config-email-attachments-cors)

Otherwise, proceed to Step 2.

## Step 2: Enable email and create an Amazon S3 bucket for storing email and attachments
<a name="enable-email-buckets1"></a>

These steps apply only if you already created an Amazon Connect instance but didn't enable email.

You need to update your **Data storage** settings to enable sending email campaigns and specify the Amazon S3 bucket where email messages and attachments are to be stored. Email requires two Amazon S3 bucket pointers. They can be to the same Amazon S3 bucket or two different buckets.

**Important**  
If you choose **Enable Attachments sharing** for your instance, you must create an Amazon S3 bucket and [configure a CORS policy on your attachments bucket](#config-email-attachments-cors), as described in this topic. If you don't do this, **email will not work for your instance**.

1. Open the Amazon Connect console at [https://console.aws.amazon.com/connect/](https://console.aws.amazon.com/connect/).

1. On the instances page, choose the instance alias. The instance alias is also your **instance name**, which appears in your Amazon Connect URL. The following image shows the **Amazon Connect virtual contact center instances** page, with a box around the instance alias.  
![\[The Amazon Connect virtual contact center instances page, the instance alias.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/instance.png)

1. On the left navigation menu, choose **Data storage**, and then choose **Enable email**. If you want to allow email attachments, choose **Attachments** as well. 

The following image of the **Data storage** page shows the Amazon S3 bucket for email messages and attachments. 

![\[The Amazon S3 bucket to store emails and attachments.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/email-s3-bucket.png)


## Step 3: Get an Amazon Connect email domain
<a name="get-email-domain1"></a>

These steps apply only if you already created an Amazon Connect instance but didn't enable email. Complete these steps to get an email domain from Amazon Connect.

1. In the Amazon Connect console, on the left navigation menu, choose **Email**, and then choose **Add Domain** as shown in the following image.  
![\[The Email option on the Amazon Connect console.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/email-aws-console.png)

1. In the **Add email domain** box, choose **Amazon Connect email domain**, as shown in the following image. When you choose this option, the name of the domain is autogenerated: **instance-alias*.email.connect.aws*. You cannot change this email address.  
![\[The Add email domain box, the Amazon Connect email domain option.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/email-add-email-domain.png)

## (Optional) Step 4: Use your own custom email domains
<a name="use-custom-email1"></a>

You can import up to five custom domains that have been [onboarded to Amazon SES](https://docs.aws.amazon.com/ses/latest/dg/creating-identities.html#just-verify-domain-proc).

1. In the Amazon Connect console, on the left navigation menu, choose **Email**, and then choose **Add Domain** as shown in the following image.  
![\[The Add domain option on the Amazon Connect console.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/email-aws-console.png)

1. Choose **Use custom email domain**. Use the dropdown box to choose custom domains that have been [verified by Amazon SES](https://docs.aws.amazon.com/ses/latest/dg/creating-identities.html#just-verify-domain-proc).  
![\[The Use custom email domain option.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/email-add-custom-domain.png)

## Step 5: Configure a CORS policy on your attachments bucket
<a name="config-email-attachments-cors"></a>

To allow customers and agents to upload and download files, update your cross-origin resource sharing (CORS) policy to allow `PUT` and `GET` requests for the Amazon S3 bucket you are using for attachments. This is more secure than enabling public read/write on your Amazon S3 bucket, which we don't recommend.

**To configure CORS on the attachments bucket**

1. Find the name of the Amazon S3 bucket for storing attachments: 

   1. Open the Amazon Connect console at [https://console.aws.amazon.com/connect/](https://console.aws.amazon.com/connect/).

   1. In the Amazon Connect console, choose **Data storage**, and locate the Amazon S3 bucket name. 

1. Open the Amazon S3 console at [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. In the Amazon S3 console, select your Amazon S3 bucket. 

1. Choose the **Permissions** tab, and then scroll down to the **Cross-origin resource sharing (CORS)** section.

1. Add a CORS policy that has one of the following rules on your attachments bucket. For example CORS policies, see [Cross-origin resource sharing: Use-case scenarios](https://docs.aws.amazon.com/AmazonS3/latest/userguide/cors.html#example-scenarios-cors) in the *Amazon S3 Developer Guide*.
   + Option 1: List the endpoints from where attachments will be sent and received, such as the name of your business web site. This rule allows cross-origin PUT and GET requests from your website (for example, http://www.example1.com).

     Your CORS policy may look similar to the following example:

     ```
     [
         {
             "AllowedHeaders": [
                 "*"
             ],
             "AllowedMethods": [
                 "PUT",
                 "GET"
             ],
             "AllowedOrigins": [
                 "*.my.connect.aws",
                 "*.awsapps.com"
             ],
             "ExposeHeaders": []
         }
     ]
     ```
   + Option 2: Add the `*` wildcard to `AllowedOrigin`. This rule allows cross-origin PUT and GET requests from all origins, so you don't have to list your endpoints.

     Your CORS policy may look similar to the following example:

     ```
     [
         {                               
             "AllowedMethods": [
                 "PUT",
                 "GET"            
             ],
             "AllowedOrigins": [   
                 "*" 
                 ],
            "AllowedHeaders": [
                 "*"
                 ]
         }    
     ]
     ```

## APIs to enable email for campaigns
<a name="apis-email-setup1"></a>

Use the following APIs to enable email programmatically:
+ [CreateInstance](https://docs.aws.amazon.com/connect/latest/APIReference/API_CreateInstance.html)
+ [CreateIntegrationAssociation](https://docs.aws.amazon.com/connect/latest/APIReference/API_CreateIntegrationAssociation.html)
+ [AssociateInstanceStorageConfig](https://docs.aws.amazon.com/connect/latest/APIReference/API_AssociateInstanceStorageConfig.html)
+ [DisassociateInstanceStorageConfig](https://docs.aws.amazon.com/connect/latest/APIReference/API_DisassociateInstanceStorageConfig.html)
+ [DescribeInstanceStorageConfig](https://docs.aws.amazon.com/connect/latest/APIReference/API_DescribeInstanceStorageConfig.html)

# Invoke Lambda functions
<a name="lambda-invoke-functions"></a>

## Step 1: Create a Lambda function
<a name="lambda-create-function"></a>

During campaign execution, outbound campaigns will invoke your Lambda function with a batch of profiles and expects a response containing results for each.

### Request Payload
<a name="lambda-request-payload"></a>

When your Lambda function is invoked, it will receive a JSON payload with the following structure:

#### Payload Structure
<a name="lambda-payload-structure"></a>

```
{
  "InvocationMetadata": {
    "CampaignContext": {
      "CampaignId": "string",
      "RunId": "string",
      "ActionId": "string",
      "CampaignName": "string"
    }
  },
  "Items": {
    "CustomerProfiles": [
      {
        "ProfileId": "string",
        "CustomerData": "string",
        "IdempotencyToken": "string"
      }
    ]
  }
}
```

#### Field Descriptions
<a name="lambda-field-descriptions"></a>

##### InvocationMetadata
<a name="lambda-invocation-metadata"></a>
+ **CampaignContext**: Contains metadata about the campaign execution
+ **CampaignId**: Unique identifier for the campaign
+ **RunId**: Unique identifier for this specific campaign run
+ **ActionId**: The identifier of the flow action being executed by outbound campaigns
+ **CampaignName**: Human-readable name of the campaign

##### Items
<a name="lambda-items"></a>
+ **CustomerProfiles**: Array of customer profiles to process (batched for efficiency)
+ **ProfileId**: Unique identifier for the customer profile
+ **CustomerData**: JSON string of the customer profile
+ **IdempotencyToken**: Unique token for this specific invocation to ensure idempotent processing

#### Example Request Payload
<a name="lambda-example-request"></a>

```
{
  "InvocationMetadata": {
    "CampaignContext": {
      "CampaignId": "campaign-12345",
      "RunId": "run-67890",
      "ActionId": "activity-abc123",
      "CampaignName": "Welcome Campaign"
    }
  },
  "Items": {
    "CustomerProfiles": [
      {
        "ProfileId": "customer-001",
        "CustomerData": "{\"firstName\":\"John\",\"lastName\":\"Doe\",\"email\":\"john.doe@example.com\"}",
        "IdempotencyToken": "token-xyz789"
      },
      {
        "ProfileId": "customer-002",
        "CustomerData": "{\"firstName\":\"Jane\",\"lastName\":\"Smith\",\"email\":\"jane.smith@example.com\"}",
        "IdempotencyToken": "token-abc456"
      }
    ]
  }
}
```

### Expected Response Payload
<a name="lambda-response-payload"></a>

Your Lambda function must return a JSON response with the following structure:

#### Response Structure
<a name="lambda-response-structure"></a>

```
{
  "Items": {
    "CustomerProfiles": [
      {
        "Id": "string",
        "ResultData": {}
      }
    ]
  }
}
```

#### Field Descriptions
<a name="lambda-response-field-descriptions"></a>

##### Items
<a name="lambda-response-items"></a>
+ **CustomerProfiles**: Array of results corresponding to each customer profile in the request
+ **Id**: Must match the `ProfileId` from the request
+ **ResultData**: Custom JSON object containing your processing results (optional)

#### Example Response Payload
<a name="lambda-example-response"></a>

```
{
  "Items": {
    "CustomerProfiles": [
      {
        "Id": "customer-001",
        "ResultData": {
          "recommendedProduct": "Premium Plan",
          "score": 85,
          "nextAction": "send_email"
        }
      },
      {
        "Id": "customer-002",
        "ResultData": {
          "error": "Invalid customer data",
          "errorCode": "VALIDATION_ERROR"
        }
      }
    ]
  }
}
```

## Important Constraints
<a name="lambda-constraints"></a>

### Payload Size Limits
<a name="lambda-payload-size-limits"></a>
+ **Maximum Response Payload Size**: 32 KB per customer profile
+ If your `ResultData` exceeds this limit, the invocation will be marked as invalid

### Response Requirements
<a name="lambda-response-requirements"></a>
+ You must provide a response for every `ProfileId` included in the request
+ Missing responses will be treated as errors
+ The `Id` field in the response must exactly match the `ProfileId` from the request

### Error Handling
<a name="lambda-error-handling"></a>
+ If your Lambda function throws an exception, all profiles in the batch will be marked as failed
+ Include error details in `ResultData` for debugging purposes

### Invocation Type
<a name="lambda-invocation-type"></a>
+ **Invocation Type**: `REQUEST_RESPONSE` (synchronous)
+ Your function should return results within 30 seconds rather than processing asynchronously. Responses taking longer than 30 seconds will result in action failure

## Step 2: Grant Outbound Campaigns access to your Lambda function
<a name="lambda-grant-access"></a>

1. Open the Amazon Connect console at [https://console.aws.amazon.com/connect/](https://console.aws.amazon.com/connect/).

1. On the instances page, choose your instance name in the **Instance Alias** column. This instance name appears in the URL you use to access Amazon Connect.

1. In the navigation pane under **Channels and communications**, choose **Outbound campaigns**.

1. Under the **Set up custom actions** section, use the **Lambda functions** drop-down box to select the function to add to your outbound campaigns instance.

1. Choose **Add Lambda Function**. Confirm that the ARN of the function is added under **Lambda Functions**.

## Step 3: Invoke a Lambda from a Campaign
<a name="lambda-invoke-from-journey"></a>

1. Open or create a **Journey** flow.

1. Add a **Custom action** block (in the **Integrate** group) to the grid. Connect the branches to and from the block.

1. Choose the title of the **Custom action** block to open its properties page.

1. Under **Function ARN**, choose from the list of functions you've added to your outbound campaigns instance.

## Step 4: Consume the Lambda function response
<a name="lambda-consume-response"></a>

### Access variables directly
<a name="lambda-access-variables"></a>

To access these variables directly in a flow block, add the block after the **Custom action** block, and then reference the attributes as shown in the following example:

```
RecommendedProduct - $.LambdaInvocation.ResultData.recommendedProduct
Score - $.LambdaInvocation.ResultData.score
```

Make sure that the name specified for the source attribute matches the key name in the `ResultData` returned from the Lambda.

# Disable outbound campaigns in Amazon Connect
<a name="disable-outbound-campaigns"></a>

**Important**  
You must delete all existing campaigns before you can disable outbound campaigns.

1. Open the Amazon Connect console at [https://console.aws.amazon.com/connect/](https://console.aws.amazon.com/connect/).

1. On the instances page, choose the instance alias. The instance alias is also your **instance name**, which appears in your Amazon Connect URL. The following image shows the **Amazon Connect virtual contact center instances** page, with a box around the instance alias.  
![\[The Amazon Connect virtual contact center instances page, the instance alias.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/instance.png)

1. In the navigation pane, choose **Telephony under Channels and communications**.

1. To disable outbound campaigns, clear the **Enable outbound campaigns** checkbox. 

1. Choose **Save**.

   You can no longer create outbound campaigns.

# Outbound campaign metrics in Amazon Connect
<a name="outbound-campaign-metrics"></a>

The following outbound campaign driven metrics are available on the [outbound campaigns performance dashboard](outbound-campaigns-performance-dashboard.md) and by using the GetMetricDataV2 API. 

## Average dials per minute
<a name="average-dials-hmetric"></a>

This metric measures the average number of outbound campaign dials per minute for the specified start time and end time.

**Metric type**: Double

**Metric category**: Outbound campaigns driven metric

**How to access using the Amazon Connect API**: 
+ [GetMetricDataV2](https://docs.aws.amazon.com/connect/latest/APIReference/API_GetMetricDataV2.html) API metric identifier: `AVG_DIALS_PER_MINUTE`

**How to access using the Amazon Connect admin website**: 
+ Dashboard: [Outbound campaigns performance dashboard](outbound-campaigns-performance-dashboard.md), Avg. dials per minute

**Notes**:
+ This metric is available only for outbound campaigns that use the agent assisted voice and automated voice delivery modes.
+ Data for this metric is available starting from June 25, 2024 0:00:00 GMT.

## Average wait time after customer connection
<a name="average-wait-time-hmetric"></a>

This metric measures the average duration of total wait time by the customer after they answer the outbound call through the Amazon Connect dialer. 

**Metric type**: String (*hh:mm:ss*)

**Metric category**: Outbound campaigns driven metric

**How to access using the Amazon Connect API**: 
+ [GetMetricDataV2](https://docs.aws.amazon.com/connect/latest/APIReference/API_GetMetricDataV2.html) API metric identifier: `AVG_WAIT_TIME_AFTER_CUSTOMER_CONNECTION`

**Notes**:
+ This metric is available only for outbound campaigns that use the agent assisted voice and automated voice delivery modes.
+ Data for this metric is available starting from June 25, 2024 0:00:00 GMT.

## Campaign contacts abandoned after X
<a name="campaign-contacts-abandoned-hmetric"></a>

This metric counts the outbound campaign calls that were connected to a live customer but did not get connected to an agent within X seconds. The possible values for X are from 1 to 604800 inclusive. This metric is only available with answering machine detection enabled. For more information about answering machine detection, see [Best practices for answering machine detection](campaign-best-practices.md#machine-detection). 

**Metric type**: Integer

**Metric category**: Outbound campaigns driven metric

**How to access using the Amazon Connect API**: 
+ [GetMetricDataV2](https://docs.aws.amazon.com/connect/latest/APIReference/API_GetMetricDataV2.html) API metric identifier: `CAMPAIGN_CONTACTS_ABANDONED_AFTER_X`

**How to access using the Amazon Connect admin website**: 
+ Dashboard: [Outbound campaigns performance dashboard](outbound-campaigns-performance-dashboard.md), Campaign contacts abandoned after x seconds rate

**Notes**:
+ This metric is available only for outbound campaigns using the agent assisted voice and automated voice delivery modes.
+ Data for this metric is available starting from June 25, 2024 0:00:00 GMT.

## Campaign contacts abandoned after X rate
<a name="campaign-contacts-abandoned-rate-hmetric"></a>

This metric measures the percentage of outbound campaign calls that were connected to a live customer but did not get connected to an agent within X seconds divided by the count of contacts connected to a live customer in an outbound campaign. The possible values for X are from 1 to 604800 inclusive. 

**Metric type**: Percent
+ Min value: 0.00%
+ Min value: 100.00%

**Metric category**: Outbound campaigns driven metric

**How to access using the Amazon Connect API**: 
+ [GetMetricDataV2](https://docs.aws.amazon.com/connect/latest/APIReference/API_GetMetricDataV2.html) API metric identifier: `CAMPAIGN_CONTACTS_ABANDONED_AFTER_X_RATE`

**How to access using the Amazon Connect admin website**: 
+ Dashboard: [Outbound campaigns performance dashboard](outbound-campaigns-performance-dashboard.md), Campaign contacts abandoned rate

**Notes**:
+ This metric is only available with answering machine detection enabled. For more information about answering machine detection, see [Best practices for answering machine detection](campaign-best-practices.md#machine-detection). This metric is available only for outbound campaigns using the agent assisted voice and automated voice delivery modes.
+ Data for this metric is available starting from June 25, 2024 0:00:00 GMT.

## Campaign interactions
<a name="campaign-interactions-hmetric"></a>

This metric counts the outbound campaign interactions after a successful delivery attempt. Example interactions include `Open`, `Click`, and `Compliant`. 

**Metric type**: Integer

**Metric category**: Outbound campaigns driven metric

**How to access using the Amazon Connect API**: 
+ [GetMetricDataV2](https://docs.aws.amazon.com/connect/latest/APIReference/API_GetMetricDataV2.html) API metric identifier: `CAMPAIGN_INTERACTIONS`
+ Dashboard: [Outbound campaigns performance dashboard](outbound-campaigns-performance-dashboard.md) 

**Notes**:
+ This metric is available only for outbound campaigns that use the email delivery mode. 
+ Data for this metric is available starting from November 6, 2024 0:00:00 GMT.

## Campaign progress rate
<a name="campaign-progress-rate-hmetric"></a>

This metric measures the percentage of outbound campaign recipients attempted for delivery, out of the total number of recipients targeted. This is calculated as: (Recipients attempted / Recipients targeted) \$1 100.

**Metric type**: Percent
+ Min value: 0.00%
+ Max value: 100.00%

**Metric category**: Outbound campaigns driven metric

**How to access using the Amazon Connect API**: 
+ [GetMetricDataV2](https://docs.aws.amazon.com/connect/latest/APIReference/API_GetMetricDataV2.html) API metric identifier: `CAMPAIGN_PROGRESS_RATE`
+ Dashboard: [Outbound campaigns performance dashboard](outbound-campaigns-performance-dashboard.md) 

**Notes**:
+ This metric is only available for outbound campaigns initiated using a customer segment. It is not available for event triggered campaigns.
+ Data for this metric is available starting from April 30, 2025 0:00:00 GMT.

## Campaign send attempts
<a name="campaign-send-attempts-hmetric"></a>

This metric counts the outbound campaign send requests sent by Amazon Connect for delivery. A campaign send request represents a send attempt made to reach out to an recipient using email, SMS, or telephony delivery mode. 

**Metric type**: Integer

**Metric category**: Outbound campaigns driven metric

**How to access using the Amazon Connect API**: 
+ [GetMetricDataV2](https://docs.aws.amazon.com/connect/latest/APIReference/API_GetMetricDataV2.html) API metric identifier: `CAMPAIGN_SEND_ATTEMPTS`

**How to access using the Amazon Connect admin website**: 
+ Dashboard: [Outbound campaigns performance dashboard](outbound-campaigns-performance-dashboard.md), Send attempts

**Notes**:
+ Data for this metric is available starting from November 6, 2024 0:00:00 GMT.

## Campaign send exclusions
<a name="campaign-send-exclusions-hmetric"></a>

This metric measures the count of outbound campaign send attempts that were excluded from the targeted segment during a campaign execution. Example exclusion reasons: MISSING\$1TIMEZONE, MISSING\$1CHANNEL

**Metric type**: Integer

**Metric category**: Outbound campaigns driven metric

**How to access using the Amazon Connect API**: 
+ [GetMetricDataV2](https://docs.aws.amazon.com/connect/latest/APIReference/API_GetMetricDataV2.html) API metric identifier: `CAMPAIGN_SEND_EXCLUSIONS`

**How to access using the Amazon Connect admin website**: 
+ Dashboard: [Outbound campaigns performance dashboard](outbound-campaigns-performance-dashboard.md), Campaign send exclusions

**Notes**:
+ For more details on the exclusion reasons, see campaign\$1event\$1type under [Outbound Campaign Events](https://docs.aws.amazon.com/connect/latest/adminguide/data-lake.html#campaign-events) in the Data Lake documentation.
+ Data for this metric is available starting from April 30, 2025 0:00:00 GMT.

## Delivery attempts
<a name="delivery-attempts-hmetric"></a>

This metric measures the delivery outcome of a campaign outreach attempt. The count of outbound campaign contact outcomes from the Amazon Connect dialer, or the count of outbound campaign email or SMS message outcomes that were successfully sent to Amazon Connect to be delivered. 

**Metric type**: Integer

**Metric category**: Outbound campaigns driven metric

**How to access using the Amazon Connect API**: 
+ [GetMetricDataV2](https://docs.aws.amazon.com/connect/latest/APIReference/API_GetMetricDataV2.html) API metric identifier: `DELIVERY_ATTEMPTS`

**How to access using the Amazon Connect admin website**: 
+ Dashboard: [Outbound campaigns performance dashboard](outbound-campaigns-performance-dashboard.md), Delivery attempts

**Notes**:
+ For details about telephony disposition definitions, see DisconnectReason for outbound campaigns and AnsweringMachineDetectionStatus in the [ContactTraceRecord](ctr-data-model.md#ctr-ContactTraceRecord). For details about email and SMS disposition definitions, see campaign\$1event\$1type in the [Outbound campaign events](data-lake-outbound-campaigns-data.md#data-lake-oc-events) table. 
+ Data for this metric is available starting from June 25, 2024 0:00:00 GMT for the Telephony delivery mode and November 6, 2024 0:00:00 GMT for the Email and SMS delivery modes.

## Delivery attempt disposition rate
<a name="delivery-attempt-disposition-rate-hmetric"></a>

This metric measures the percentage of each delivery outcome from a campaign outreach. The percent of call classification by answering machine detection or disconnect reason from outbound campaign contacts executed by the Amazon Connect dialer, or the percent of outbound campaign email or SMS message outcomes that was successfully sent to Amazon Connect to be delivered. 

**Metric type**: Percent
+ Min value: 0.00%
+ Max value: 100.00%

**Metric category**: Outbound campaigns driven metric

**How to access using the Amazon Connect API**: 
+ [GetMetricDataV2](https://docs.aws.amazon.com/connect/latest/APIReference/API_GetMetricDataV2.html) API metric identifier: `DELIVERY_ATTEMPT_DISPOSITION_RATE`

**Notes**:
+ Dispositions for the agent assisted voice and automated voice delivery modes are available with answering machine detection enabled. 
+ Data for this metric is available starting from June 25, 2024 0:00:00 GMT for the Telephony delivery mode and November 6, 2024 0:00:00 GMT for the Email and SMS delivery modes.

## Human answered
<a name="human-answered-hmetric"></a>

This metric counts the outbound campaign calls that were connected to a live customer. This metric is available only when answering machine detection is enabled. 

**Metric type**: Integer

**Metric category**: Outbound campaigns driven metric

**How to access using the Amazon Connect API**: 
+ [GetMetricDataV2](https://docs.aws.amazon.com/connect/latest/APIReference/API_GetMetricDataV2.html) API metric identifier: `HUMAN_ANSWERED_CALLS`

**How to access using the Amazon Connect admin website**: 
+ Dashboard: [Outbound campaigns performance dashboard](outbound-campaigns-performance-dashboard.md), Human answered

**Notes**:
+ This metric is available only for outbound campaigns that use the agent assisted voice and automated voice delivery modes.
+ Data for this metric is available starting from June 25, 2024 0:00:00 GMT.

## Recipients attempted
<a name="recipients-attempted-hmetric"></a>

This metric measures the approximate count of outbound campaign recipients attempted for delivery.

**Metric type**: Integer

**Metric category**: Outbound campaigns driven metric

**How to access using the Amazon Connect API**: 
+ [GetMetricDataV2](https://docs.aws.amazon.com/connect/latest/APIReference/API_GetMetricDataV2.html) API metric identifier: `RECIPIENTS_ATTEMPTED`

**How to access using the Amazon Connect admin website**: 
+ Dashboard: [Outbound campaigns performance dashboard](outbound-campaigns-performance-dashboard.md), Recipients attempted

**Notes**:
+ This metric is only available for outbound campaigns initiated using a customer segment. It is not available for event triggered campaigns.
+ Data for this metric is available starting from April 30, 2025 0:00:00 GMT.

## Recipients interacted
<a name="recipients-interacted-hmetric"></a>

This metric measures the approximate count of outbound campaign recipients who interacted with the engagement after a successful delivery attempt. Example interactions include: Open, Click, Complaint

**Metric type**: Integer

**Metric category**: Outbound campaigns driven metric

**How to access using the Amazon Connect API**: 
+ [GetMetricDataV2](https://docs.aws.amazon.com/connect/latest/APIReference/API_GetMetricDataV2.html) API metric identifier: `RECIPIENTS_INTERACTED`

**How to access using the Amazon Connect admin website**: 
+ Dashboard: [Outbound campaigns performance dashboard](outbound-campaigns-performance-dashboard.md) 

**Notes**:
+ This metric is only available for outbound campaigns initiated using a customer segment. It is not available for event triggered campaigns.
+ Data for this metric is available starting from April 30, 2025 0:00:00 GMT.

## Recipients targeted
<a name="recipients-targeted-hmetric"></a>

This metric measures the count of outbound campaign recipients identified as the target audience for the campaign.

**Metric type**: Integer

**Metric category**: Outbound campaigns driven metric

**How to access using the Amazon Connect API**: 
+ [GetMetricDataV2](https://docs.aws.amazon.com/connect/latest/APIReference/API_GetMetricDataV2.html) API metric identifier: `RECIPIENTS_TARGETED`

**How to access using the Amazon Connect admin website**: 
+ Dashboard: [Outbound campaigns performance dashboard](outbound-campaigns-performance-dashboard.md), Recipients targeted

**Notes**:
+ This metric is only available for outbound campaigns initiated using a customer segment. It is not available for event triggered campaigns.
+ Data for this metric is available starting from April 30, 2025 0:00:00 GMT.

# Security profile permissions for outbound communications in Amazon Connect
<a name="security-profile-outbound-communication"></a>

To enable agents to make outbound calls, assign **Make outbound calls** permissions to the agent's security profile as shown in the following image:

![\[The CCP security profile permissions page, the make outbound calls permission.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/outboundcalls-security-profile-permissions.png)


To enable call center managers to create outbound campaigns, assign the following permissions to their security profile:
+ **Routing**, **Queues**, **View** permission
+ **Outbound campaigns**, **Campaigns**, **View** permission
+ **Channels and Flows**, **Flows**, **View** permission

For information about how to add more permissions to an existing security profile, see [Update security profiles in Amazon Connect](update-security-profiles.md).

By default, the **Admin** security profile already has permissions to perform all activities.

# Best practices for Amazon Connect outbound campaigns using Pinpoint
<a name="campaign-best-practices"></a>

**Important**  
**End of support notice:** On October 30, 2026, AWS will end support for Amazon Pinpoint. After October 30, 2026, you will no longer be able to access the Amazon Pinpoint console or Amazon Pinpoint resources (endpoints, segments, campaigns, journeys, and analytics). For more information, see [Amazon Pinpoint end of support](https://docs.aws.amazon.com/console/pinpoint/migration-guide). **Note:** APIs related to SMS, voice, mobile push, OTP, and phone number validate are not impacted by this change and are supported by AWS End User Messaging.

The topics in this section explain best practices for outbound calling campaigns using Pinpoint. These practices can increase agent productivity, help you comply with regulations, and help protect the integrity of your phone numbers.

**Note**  
Amazon Connect outbound campaigns work in concert with Amazon Pinpoint journeys. Journeys have their own best practices. The topics in this section describe some of those practices, but for more information, see [Tips and best practices for journeys](https://docs.aws.amazon.com/pinpoint/latest/userguide/journeys-best-practices.html), in the *Amazon Pinpoint User Guide*.

**Topics**
+ [Choose the right campaign](#right-campaign-for-cc)
+ [Agent staffing best practices](#agent-staffing)
+ [Connection latency best practices](#call-latency)
+ [Best practices for answering machine detection](#machine-detection)
+ [Journey best practices](#journey-settings)
+ [Schedule best practices](#schedule-settings)
+ [Best practices for activity settings](#activity-no-call)
+ [Do Not Call best practices](#dnc)
+ [Best practices for managing redials](#manage-redials)

## Choose the right campaign
<a name="right-campaign-for-cc"></a>

Amazon Connect provides several types of dialing campaigns. The following sections describe each type so that you can implement the campaign that best meets your needs.

**Topics**
+ [Predictive campaigns](#predictive-campaigns)
+ [Progressive campaigns](#progressive-campaigns)
+ [Agentless campaigns](#agentless-campaigns)
+ [Preview campaigns](#preview-campaigns)

### Predictive campaigns
<a name="predictive-campaigns"></a>

When agent productivity, cost per calls, or contact center efficiency are critical metrics, use predictive dialers. Predictive dialers anticipate that many calls won't be answered. They counterbalance that by dialing as many phone numbers in a list as possible during an agent's shift by making predictions about agent availability. 

 The predictive algorithm calls ahead based on certain performance metrics. This means that calls can be connected before an agent becomes available, and a customer is connected to the next available agent. The predictive algorithm constantly analyzes, evaluates, and makes agent availability predictions in real-time so that agent productivity and efficiency can improve.

### Progressive campaigns
<a name="progressive-campaigns"></a>

When you need to reduce answer speeds, use progressive mode. A progressive mode campaign dials the next phone number in a list after an agent completes the previous call. If there are multiple campaigns targeting the same set of agents, then each of them may end up dialing contacts for the same agents. There are two ways to prevent this: 
+ Change the bandwidth allocation of the campaigns so the sum of the bandwidth allocation of each of those campaigns is less than or equal to 100%. This greatly reduces the likelihood of multiple campaigns dialing contacts for the same agents, but it does not completely eliminate it. 
+ If a 1:1 guarantee is required, then have an exclusive set of agents for each campaign. To do this, assign the campaign's queue to a single routing profile. That routing profile must only have this campaign's queue, must only allow voice calls, and no inbound contacts should be put into this queue.

You can use integrated answering machine detection to help identify a live customer pickup or a voicemail, and customize your contact strategy accordingly. For example, if a person answers a call, you can present options for them to select. If a call goes to voicemail, you can leave a message.

You can also manage pacing by specifying capacity for each campaign. For example, you can send more voice notifications faster by setting a higher capacity for a given agentless campaign compared to other dialer campaigns.

### Agentless campaigns
<a name="agentless-campaigns"></a>

You use agentless campaigns to send high-volume personalized voice notifications, appointment reminders, or to enable self-service using the Interactive Voice Response (IVR) with no agents needed.

### Preview campaigns
<a name="preview-campaigns"></a>

Use preview dialing for personalized customer conversations and to support compliance. Preview dialing enables agents to review recipient details such as name, address, product usage, prior interactions before initiating an outbound call, ensuring personalized and efficient proactive engagement while supporting compliance.

Best Practice for Preview Dialing Mode: disable call classification.

## Agent staffing best practices
<a name="agent-staffing"></a>

When call recipients answer a call and hear silence in return, they often hang up. For predictive campaigns, use the following best practices to help reduce that silence:
+ Ensure that you have enough agents logged in to your call queue. For more information about staffing, see [Forecasting, capacity planning, and scheduling in Amazon Connect](forecasting-capacity-planning-scheduling.md).
+ Consider using Amazon Connect's machine learning services.
  + [Forecasting](forecasting.md). Analyze and predict contact volume based on historical data. What will future demand—the contact volume and handle time—look like? Amazon Connect forecasting provides accurate and auto-generated forecasts that are automatically updated daily.
  + [Capacity planning](capacity-planning.md). Predict how many agents your contact center will require. Optimize plans by scenarios, service level goals, and metrics, such as shrinkage.
  + [Scheduling](scheduling.md). Generate agent schedules for day-to-day workloads that are flexible, and meet business and compliance requirements. Offer agents flexible schedules and work-life balance. How many agents are needed in each shift? Which agent works in which slot?

    [Schedule adherence](schedule-adherence.md). Enable contact center supervisors to monitor schedule adherence and improve agent productivity. Schedule adherence metrics are available after the agent schedules are published.

## Connection latency best practices
<a name="call-latency"></a>

Successful outbound calling campaigns avoid silent calls, the period of silence after a person answers a call and before an agent comes on the line. Legal requirements to limit the number of silent or abandoned calls and keep the called party informed may also apply. You can configure Amazon Connect in different ways to reduce call connection delays.

**Topics**
+ [Pinpoint segment attributes](#pinpoint-segment-attributes)
+ [Outbound agent-staffed calling](#outbound-agent-staffed)
+ [Outbound agentless calling](#outbound-agentless)
+ [Whisper and queue flow best practices](#whisper-and-queue)
+ [User administration best practices](#user-admin)
+ [Workstation and network best practices](#workstations)
+ [Testing best practices](#testing)

### Pinpoint segment attributes
<a name="pinpoint-segment-attributes"></a>

When creating an Amazon Pinpoint segment file, add the data (attributes) required for routing logic, custom greetings, or agent screen pop. Do not use Lambda functions in the flow to extract additional information, such as `EffectiveDate`, A`ttributes.CampaignIdentifier`, or `User.UserId` before connecting to an agent.

![\[The fields that you do not add to a Pinpoint segment file.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/cmpgn-pinpoint-attributes-small.png)


For more information, see [Supported attributes](https://docs.aws.amazon.com/pinpoint/latest/userguide/segments-importing.html#segments-importing-available-attributes) in the *Amazon Pinpoint User Guide*.

### Outbound agent-staffed calling
<a name="outbound-agent-staffed"></a>

When using the [Check call progress](check-call-progress.md) flow block:
+ Call Answered branch - Remove all flow blocks between the [Check call progress](check-call-progress.md) and [Transfer to queue](transfer-to-queue.md) blocks. This minimizes delay between the dialed party saying hello, and the agent answer time.
+ Not Detected branch - This branch should be treated in the same manner as a Call Answered with routing to a [Transfer to queue](transfer-to-queue.md) block. This branch is used when the ML-model was not able to classify the answer type. Since this could be a voicemail or a live person, you can play a message before to the **Transfer to queue** block in the event that there is a voicemail answering a message can be left.

  For example, "This is Example Corp. calling to confirm your appointment. We couldn't tell if you or your voicemail answered this call. Please stay on the line while we connect you with an agent."

### Outbound agentless calling
<a name="outbound-agentless"></a>

Outbound campaigns often use custom greetings and self service functions. Do not use Lambda functions to get contact attributes. Instead, provide customer data (attributes) via the campaign segment. Use these attributes from the campaign segment to play custom greetings.
+ Example - Call Answered or Not Detected: "Hello, `$.Attributes.FirstName`. This is `$.Attributes.CallerIdentity` calling to confirm your upcoming appointment on `$.Attributes.AppointmentDate` at `$.Attributes.AppointmentTime`. If this is still a good time and date for you, just say, "Confirm". If you would like to use our self service system to modify your appointment, just say, "self service" or stay on the line and we will connect you with the next available agent."
+ Example - Voicemail with or without beep: "Hello, `$.Attributes.FirstName`. This is `$.Attributes.CallerIdentity` calling to confirm your upcoming appointment on `$.Attributes.AppointmentDate` at `$.Attributes.AppointmentTime`. If this is still a good time and date for you, we will see you then. If you would like to modify your appointment, please call us back at `$.SystemEndpoint.Address` to reschedule your appointment"
+ Error branch - Occasionally there could be an issue that causes a call to follow the Error branch. As a best practice, use a [Play prompt](play.md) block with a message that applies to the contact that was dialed, with instruction to "Please call us at `$.SystemEndpoint.Address` to confirm or reschedule your appointment." Do this before the [Disconnect / hang up](disconnect-hang-up.md) block in case the call recipient answered, but an error occurred in the processing.

![\[Flow block with answered calls transferred to queue.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/outbound-contact-attributes.png)


### Whisper and queue flow best practices
<a name="whisper-and-queue"></a>
+ Remove the **Loop prompts** from the **Default customer queue** flow and replace them with **End flow / Resume**.  
![\[The Default customer queue set to End flow / Resume.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/cmpgn-default-customer-queue.png)
+ If agents don't answer within 2 seconds of calls going to queue, you can minimize silent calls by using **Loop prompts** and play a message for the customer. The following image shows a typical flow block with a Loop prompt.  
![\[The Default customer queue with a Loop prompt.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/cmpgn-queue-with-loop-prompt.png)
+ Use the **Disable agent whisper** and **Disable customer whisper** options on the [Set whisper flow](set-whisper-flow.md) block. This is so customers perceive less connection latency as part of an outbound campaign. The following image shows the location of the **Disable agent whisper** setting on the block's properties page.  
![\[The Set whisper flow block, the Disable agent whisper setting.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/set-whisper-flow-properties4.png)

### User administration best practices
<a name="user-admin"></a>

We recommend setting the following options for your users to reduce connection times. To access these settings, in the Amazon Connect admin website navigate to **Users**, **User management**, **Edit**. 

These options apply to soft phones only. 
+ [Enable the Auto-accept calls](enable-auto-accept.md). It reduces the potential for call connection latency/delay after a dialed party answers.
+ [Set After Contact Work (ACW) timeout](configure-agents.md) to 30. Minimizing the ACW time will optimize the dialing algorithm when using Predictive dialing campaigns. 
+ [Enable persistent connection](enable-persistent-connection.md). This maintains agent connection after a call ends. It enables subsequent calls to connect faster.

 The following image shows the **Settings** section of the **Edit user** page.

![\[The Auto-accept calls, After Contact Work timeout, and Enable persistent connection settings.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/cmpgn-user-admin-settings.png)


### Workstation and network best practices
<a name="workstations"></a>

The following best practices can help optimize agent efficiency by ensuring adequate hardware and network resources.
+ Ensure that agent workstations meet the minimum requirements. For more information, see [Agent headset and workstation requirements for using the Contact Control Panel (CCP)](ccp-agent-hardware.md).
+ Ensure that the agent has the CCP or agent workspace open and present on their desktop. This reduces the time spent bringing the screen to the front before greeting the caller.
+ On the local network, ensure that the agents are connected to a LAN. This mitigates potential wireless network latency
+ If possible, minimize the geographic distance between the AWS Region that hosts your Amazon Connect instance and the agents that interact with the outbound campaigns. The greater the geographic distance between your agents and the hosting Region, the higher the possible latency.

**Note**  
Outbound campaigns have limitations on the numbers that agents can dial, depending on the origin of the Amazon Connect instance. For more information, see the [Amazon Connect Telecoms Country Coverage Guide](https://d1v2gagwb6hfe1.cloudfront.net/Amazon_Connect_Telecoms_Coverage.pdf).

### Testing best practices
<a name="testing"></a>

As a best practice, run tests at scale. To achieve the lowest call connection latency, use outbound campaigns to make hundreds of thousands of continuous calls to mimic your production environment. Call connection latency can be relatively high when making a handful of campaign calls.

## Best practices for answering machine detection
<a name="machine-detection"></a>

To use Answering Machine Detection (AMD) in a campaign, use the [Check call progress](check-call-progress.md) flow block. It provides call progress analysis. This is an ML-model that detects an answered call condition so that you can provide different experiences for calls answered by people and calls answered by machine, with or without a beep. The flow block also provides a branch for routing calls when the ML-model can't distinguish between people and voicemail, or when errors occur in call processing.

AMD uses the following criteria to detect live calls:
+ Background noise associated with a pre-recorded message.
+ Long strings of words such as "Hello, I am sorry I missed your call. Please leave a message at…"
+ A live caller saying something similar to "Hello, hello?" followed by a post-greeting silence.

Forty to 60-percent of calls to consumers go to voicemail. AMD helps eliminate the number of voicemail calls over live calls. However, the detection accuracy has limitations.
+ If the voicemail greeting is a short "Hello" or includes a pause, AMD detects it as a live customer (a false negative).
+ Sometimes a long greeting by a live customer is incorrectly detected as a voicemail (a false positive).
+ There is a small delay while the system connects the call to an agent, which could result in the customer possibly hanging up.
+ PBX (private branch exchange) numbers with multiple levels of voicemail prompts are not supported.

### The pros, cons, and best uses of Answering Machine Detection
<a name="amd-pros-cons"></a>

The use of Answering Machine Detection (AMD) may not comply with telemarketing laws. You are responsible for implementing AMD in a manner that is compliant with applicable laws, and you should always consult your legal advisor regarding your specific use case.

Use case 1: AMD is on and leaving automatic voicemails
+ **Pros** – Agents primarily interact with live calls 95-percent of the time, maximizing talk time. AMD can leave automatic voicemails if a voicemail is detected.
+ **Cons** – The technology leaves a voicemail 50-percent to 60-percent of the time due to false positives due to the large variety of answering machine types. Also, AMD can irritate customers because it adds a short delay to live calls.
+ **Best uses** – Calling consumers during the day when you may get a large quantity of answering machines and it’s not urgent to ensure every call receives a voicemail.

Use case 2: AMD is on but not leaving automatic voicemails
+ **Pros** – Agents primarily interact with live calls 95-percent of the time, maximizing talk time.
+ **Cons** – Cannot leave any voicemails. Adds a delay to live calls which can annoy customers.
+ **Best uses** – Calling consumers during the day when you may get a large quantity of voicemails and you don’t want to leave any voicemails.

Use case 3: AMD is off and agents can leave manual voicemails
+ **Pros** – Voicemails can be left 100-percent of the time.
+ **Cons** – Agents must determine whether they are receiving a live call or voicemail. Must manually leave a voicemail. Most time consuming and can lower the number of calls your agents make in a day.
+ **Best uses** – Calling consumers or businesses and leaving customized voicemails.

Use case 4: AMD is off and agents can leave a prerecorded voicemail
+ **Pros** – Agents can leave a personalized, pre-recorded voicemail 100% of the time saving significant time by avoiding repeating the same message over and over with 'Voicemail Drop'.
+ **Cons** – Agents must determine whether they are receiving a live call or voicemail. More time consuming than AMD but quicker than manually leaving a voicemail.
+ **Best uses** – Calling consumers or businesses and leaving generic voicemails.

## Journey best practices
<a name="journey-settings"></a>

As a best practice, create a well-defined scenario for each Amazon Pinpoint journey. Limit the scope of a scenario to a specific aspect of a larger customer experience that enables you to monitor, refine, and manage a customer's specific experience. You can then create a sequence of related journeys.

For example, a journey can welcome new customers and provide recommended first steps during their first seven days as a customer. Based on each customer's actions during the first journey, you can route them to additional journeys tailored to their initial level of engagement. One journey might provide next steps for customers who were highly engaged in the first journey. Another subsequent journey might promote different products or services to customers who were less engaged in the first journey. By creating a sequence of scoped journeys, you can continually refine and manage the customer experience throughout the customer lifecycle.

After you define a scenario, choose journey settings that support your goals for the scenario. The settings define the timing, volume, and frequency with which any part of a journey can engage participants. 

**Note**  
The following steps assume that you have at least one project and one journey in Amazon Pinpoint. If not, see [Managing Amazon Pinpoint projects](https://docs.aws.amazon.com/pinpoint/latest/userguide/projects-manage.html), and [Create a journey](https://docs.aws.amazon.com/pinpoint/latest/userguide/journeys-create.html), both in the *Amazon Pinpoint User Guide*

**To access journey settings**

1. Open the Amazon Pinpoint console at [https://console.aws.amazon.com/pinpoint/](https://console.aws.amazon.com/pinpoint/).

1. In the navigation pane, choose **Journeys**, then open a journey with a status of **Draft** or **Paused**. 

   You can also choose **Stop journey** to stop a journey.

1. Open the **Actions** list and choose **Settings**. 

1. Expand the following sections to implement the various best practices.

### Time zone detection
<a name="time-zone-mgt"></a>

Time zone detection helps estimate an endpoint's time zone based on `Endpoint.Location.Country` and any combination of `Endpoint.Address` and `Endpoint.Location.PostalCode`. The endpoint's time zone is used to avoid calling at inappropriate times of the day, when quiet time is configured, and also when a journey sends messages based on a local time zone. Time zone estimation is only performed on endpoints that do not have a value for the `Demographic.Timezone` attribute.

**Note**  
AWS GovCloud (US-West) does not support time zone detection.

If a journey contains endpoints with multiple time zones:
+ When you enable `Recipient's local time zone`: 
  + The journey calls or sends a message according to the latest time zone for an endpoint.
  + The journey stops sending when all messages have been sent, or according to the earliest time zone for an endpoint.

### Journeys with endpoints in multiple time zones and quiet time
<a name="quiet-time-journeys"></a>

When you enable **Quiet time**, and you have endpoints on multiple time zones, the journey does not call or send messages to an endpoint during the quiet time of any timezone. The journey only calls and sends messages when all the endpoints can receive them, as controlled by the journey's sending rules.

For example, if your journey's quiet time runs from 20:00 (8:00 PM) to 08:00 (8:00 AM), and the journey uses endpoints in UTC-8 America/Los\$1Angeles and UTC-5 America/New\$1York, the journey starts sending messages at 08:00 America/Los\$1Angeles (11:00 America/New\$1York) and stops sending messages at 17:00 America/Los\$1Angeles (20:00 America/New\$1York).

### Store and use local time zones
<a name="use-local-time-zones"></a>

To optimize participant engagement in a journey that has a scheduled start and end time, configure the journey to use each participant's local time zone. This helps to ensure that journey activities occur when a participant is most likely to participate in those activities.

**To use recipient time zones**
+ Under **When to send**, choose the **Recipeints local time zone** radio button.

**Note**  
That setting's usefulness depends on whether you store local time zone values in the endpoint definitions for participants. If you use this setting and the endpoint definition for a participant doesn't specify a time zone, Amazon Pinpoint doesn't include the participant in the journey. To avoid this issue, use the `Demographic.Timezone` attribute to store time zone information for participants. This is a standard attribute provided by Amazon Pinpoint.

### Address quiet time conflicts
<a name="address-qt-conflicts"></a>

If you configure an activity to send messages at a time that conflicts with the quiet-time settings for the journey, Amazon Pinpoint doesn't send messages until the quiet time ends. If you chose to resume sending messages after quiet time ends, Pinpoint also sends any messages held during quiet time. If not, it drops the held messages.

### Journey limits
<a name="advanced-limits"></a>

For certain use cases, such as telemarketing, organizations limit attempts to call an endpoint over a certain number of days. Amazon Pinpoint provides the following ways to configure the number of attempts: 
+ Specify the maximum contact attempts made to an endpoint in a 24 hour period.
+ Specify the maximum number of times you can reach an endpoint for a particular journey, and across journeys.
+ Set a rolling limit by specifying the maximum number of times you can reach an endpoint within a certain time period. For example, contact an endpoint at most 2 times over the next 7 days.

The following image shows the various journey limit settings.

![\[The advanced journey settings.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/cmpgn-journey-advanced-settings.png)


## Schedule best practices
<a name="schedule-settings"></a>

Amazon Connect outbound campaigns enable you to limit calls to certain times of day and avoid calls during quiet times in the evening or during weekends. You can also set calling exceptions in an Amazon Pinpoint journey. The exceptions overwrite the sending times configured for days of the week.

We recommend using both features. For more information about scheduling in Amazon Connect, see . For more information about scheduling in Amazon Pinpoint, see [Step 4: Choose when to send the campaign](https://docs.aws.amazon.com/pinpoint/latest/userguide/campaigns-schedule.html), in the *Amazon Pinpoint User Guide*.

In addition to exceptions, you can:
+ Stop calls from predictive and progressive campaigns by logging all agents out of the campaign queue.
+ Use the Amazon Connect console to manually pause a campaign.

## Best practices for activity settings
<a name="activity-no-call"></a>

In the **Entry** activity of your journey, only use the **Add participants from a segment** option.

## Do Not Call best practices
<a name="dnc"></a>

Many countries have created DNC (Do Not Call) lists. These allow telephone subscribers to not receive marketing calls. Companies must check customer phone numbers against such DNC lists, and remove those numbers before placing a call. You use Amazon Pinpoint to manage DNC lists in outbound campaigns.

Journeys allow you to check the status of an endpoint against third-party data sources before sending the messages. You can also add an AWS Lambda function that conducts external DNC checks and does or does not dial based on the response.

The following image shows the suggested DNC flow.

![\[Image showing the DNC flow described in the text above.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/cmpgn-dnc-flow.png)


## Best practices for managing redials
<a name="manage-redials"></a>

The following sections provide best practices for managing redials and differentiating your call center from spammers.

### Automate workflows and use multiple channels
<a name="workflow-channels"></a>

As a best practice, don't persistently call leads and hope the contact answers. The more you call, the less likely the contact may be to answer. Instead, use automation to move the contact to another list and call back 30 days later, then perhaps 60 days later.

Also, look at the number of times a call goes to voicemail. At some point, you may want to stop calling that lead.

An optimal strategy uses automated workflows with multiple communication channels to build an outreach cadence. For example, you start with a phone call, then send an SMS message, then an email. This can significantly increase the chances of contacting the lead. For more information about setting up multiple channels, see:
+  [Tutorial: Using Postman with the Amazon Pinpoint API](https://docs.aws.amazon.com/pinpoint/latest/developerguide/tutorials-using-postman.html), in the *Amazon Pinpoint Developer Guide*.
+  [Tutorial: Setting up an SMS registration system](https://docs.aws.amazon.com/pinpoint/latest/developerguide/tutorials-two-way-sms.html), in the *Amazon Pinpoint Developer Guide*.

The next sections provide other tips for managing redials.

### Manage your call volume
<a name="call-volume"></a>

The following best practices can help differentiate your call center from spammers and help protect the integrity of your phone numbers.
+ Place no more than 50 calls per area code, per carrier, per day.
+ To configure how often a number is dialed, use the **Send through a contact center** activity with a **Wait** activity in your journey. Amazon Pinpoint supports a maximum of three **Send through a contact center** activities per journey. Use that activity strategically.

  For example, use it when a call is **Not answered**, but choose another follow up method for **Voicemail beep** and **Voicemail no beep**, such as email or SMS. Those channels can still provide in-session engagement with the contact by using hyperlinks in emails, or keyword responses such as YES in SMS, to provide self service or contact an agent. This allows contacts to connect when they want to.

**To limit dialing**

1. As needed, [create a journey in Amazon Pinpoint](https://docs.aws.amazon.com/pinpoint/latest/userguide/journeys-create.html).

1. Set up the journey entry and add the **Send through a contact center** activity.

   For more information about doing that, see [Set up the journey entry activity](https://docs.aws.amazon.com/pinpoint/latest/userguide/journeys-entry-activity.html), in the *Amazon Pinpoint User Guide*.

1. After the activity, add a multivariate split.

   For more information about doing that, see [Set up a multivariate split activity](https://docs.aws.amazon.com/pinpoint/latest/userguide/journeys-add-activities.html#journeys-add-activities-procedures-multivariate-split), in the *Amazon Pinpoint User Guide*.

1. Open the split and add **Branch B** and **Branch C**.

1. Edit the branches in the split as follows:
   + **Branch A**

     1. Open the **Choose a condition** list and select **Event**.

     1. Open the **Choose a journey message activity and event** list and select the **Contact center key**.

     1. Open the **Event** list and select **Not answered**.
   +  **Branch B**
     + Repeat the same steps as Branch A but choose **Voicemail beep**.
   + **Branch C**
     + Repeat the same steps as Branch A but choose **Voicemail no beep**.

1. Add a **Wait** activity after each branch, then edit each **Wait** activity as follows:
   + Branch A

     1. In the **Time period** section, enter **4**.

     1. In the **Unit** list and select **hours**.

     1. Select **Save**.
   + Branch B

     1. In the **Time period** section, enter **1**.

     1. In the **Unit** list and select **hours**.

     1. Select **Save**.
   + Branch C

     1. In the **Time period** section, enter **4**.

     1. In the **Unit** list and select **days**.

     1. Select **Save**.

1. After Branch A, add the **Send through a contact center** activity. Set the parameters of this activity similar as Lab 2.

1. After branches B and C, add the **Send an email** or **Send an SMS** activities. Set up a message template to complete this activity. For more information, see [Amazon Pinpoint message templates](https://docs.aws.amazon.com/pinpoint/latest/userguide/messages-templates.html).

   The following image shows the workflow:  
![\[Workflow diagram showing contact center, multivariate split, and wait steps for different branches.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/cmpgn-redial-multi-flow.png)

# Best practices for Amazon Connect outbound campaigns
<a name="outbound-campaign-best-practices"></a>

The topics in this section explain best practices for outbound campaigns. These practices can increase agent productivity, help you comply with regulations, and help protect the integrity of your phone numbers.

**Topics**
+ [Choose the right mode for voice communication](#right-campaign-for-vc)
+ [Agent staffing best practices for voice communication](#agent-staffing-vc)
+ [Connection latency best practices](#call-latency-oc)
+ [Best practices for answering machine detection](#machine-detection-oc)
+ [Using sorted segments with outbound campaigns and journeys](#sorted-segments-best-practices)

## Choose the right mode for voice communication
<a name="right-campaign-for-vc"></a>

Amazon Connect outbound campaign provides several types of voice communication. The following sections describe each type so that you can implement the campaign that best meets your needs.

**Topics**
+ [Predictive (Agent assisted voice)](#predictive-campaigns-oc)
+ [Progressive (Agent assisted voice)](#progressive-campaigns-oc)
+ [Agentless (Automated voice)](#agentless-campaigns-oc)

### Predictive (Agent assisted voice)
<a name="predictive-campaigns-oc"></a>

When agent productivity, cost per calls, or contact center efficiency are critical metrics, use predictive. Predictive mode anticipate that many calls won't be answered. They counterbalance that by dialing as many phone numbers in a list as possible during an agent's shift by making predictions about agent availability.

The predictive algorithm calls ahead based on certain performance metrics. This means that calls can be connected before an agent becomes available, and a customer is connected to the next available agent. The predictive algorithm constantly analyzes, evaluates, and makes agent availability predictions in real-time so that agent productivity and efficiency can improve.

### Progressive (Agent assisted voice)
<a name="progressive-campaigns-oc"></a>

When you need to reduce answer speeds, use progressive. 

A progressive mode campaign dials the next phone number in a list after an agent completes the previous call. If there are multiple campaigns targeting the same set of agents, then each of them may end up dialing contacts for the same agents. There are two ways to prevent this: 
+ Change the bandwidth allocation of the campaigns so the sum of the bandwidth allocation of each of those campaigns is less than or equal to 100%. This greatly reduces the likelihood of multiple campaigns dialing contacts for the same agents, but it does not completely eliminate it. 
+ If a 1:1 guarantee is required, then have an exclusive set of agents for each campaign. To do this, assign the campaign's queue to a single routing profile. That routing profile must only have this campaign's queue, must only allow voice calls, and no inbound contacts should be put into this queue.

You can use integrated answering machine detection to help identify a live customer pickup or a voicemail, and customize your contact strategy accordingly. For example, if a person answers a call, you can present options for them to select. If a call goes to voicemail, you can leave a message.

You can also manage pacing by specifying capacity for each campaign. For example, you can send more voice notifications faster by setting a higher capacity for a given agentless campaign compared to other dialer campaigns.

### Agentless (Automated voice)
<a name="agentless-campaigns-oc"></a>

You use agentless mode to send high-volume personalized voice notifications, appointment reminders, or to enable self-service using the Interactive Voice Response (IVR) with no agents needed.

## Agent staffing best practices for voice communication
<a name="agent-staffing-vc"></a>

When call recipients answer a call and hear silence in return, they often hang up. For predictive mode, use the following best practices to help reduce that silence:
+ Ensure that you have enough agents logged in to your call queue. For more information about staffing, see [Forecasting, capacity planning, and scheduling in Amazon Connect](forecasting-capacity-planning-scheduling.md).
+ Consider using Amazon Connect's machine learning services.
  + [Forecasting](forecasting.md). Analyze and predict contact volume based on historical data. What will future demand—the contact volume and handle time—look like? Amazon Connect forecasting provides accurate and auto-generated forecasts that are automatically updated daily.
  + [Capacity planning](capacity-planning.md). Predict how many agents your contact center will require. Optimize plans by scenarios, service level goals, and metrics, such as shrinkage.
  + [Scheduling](scheduling.md). Generate agent schedules for day-to-day workloads that are flexible, and meet business and compliance requirements. Offer agents flexible schedules and work-life balance. How many agents are needed in each shift? Which agent works in which slot?

    [Schedule adherence](schedule-adherence.md). Enable contact center supervisors to monitor schedule adherence and improve agent productivity. Schedule adherence metrics are available after the agent schedules are published.

## Connection latency best practices
<a name="call-latency-oc"></a>

Successful outbound calling campaigns avoid silent calls, the period of silence after a person answers a call and before an agent comes on the line. Legal requirements to limit the number of silent or abandoned calls and keep the called party informed may also apply. You can configure Amazon Connect in different ways to reduce call connection delays.

**Topics**
+ [Outbound agent-staffed calling](#outbound-agent-staffed-oc)
+ [Outbound agentless calling](#outbound-agentless-oc)
+ [Whisper and queue flow best practices](#whisper-and-queue-oc)
+ [User administration best practices](#user-admin-oc)
+ [Workstation and network best practices](#workstations-oc)
+ [Testing best practices](#testing-oc)

### Outbound agent-staffed calling
<a name="outbound-agent-staffed-oc"></a>

When using the [Check call progress](check-call-progress.md) flow block:
+ Call Answered branch - Remove all flow blocks between the [Check call progress](check-call-progress.md) and [Transfer to queue](transfer-to-queue.md) blocks. This minimizes delay between the dialed party saying hello, and the agent answer time.
+ Not Detected branch - This branch should be treated in the same manner as a Call Answered with routing to a [Transfer to queue](transfer-to-queue.md) block. This branch is used when the ML-model was not able to classify the answer type. Since this could be a voicemail or a live person, you can play a message before to the **Transfer to queue** block in the event that there is a voicemail answering a message can be left.

  For example, "This is Example Corp. calling to confirm your appointment. We couldn't tell if you or your voicemail answered this call. Please stay on the line while we connect you with an agent."

### Outbound agentless calling
<a name="outbound-agentless-oc"></a>

Outbound campaigns often use custom greetings and self service functions. Do not use Lambda functions to get Customer Profile data. Instead, retrieve data from Customer Profiles using the following approach:
+ Add a **Customer Profiles** block at the start of your flow and select the **Get profile** action.
+ Set the identifier type to **Profile ID**.
+ Use `$.Attributes.connect_customer-profile_profile-id` as the identifier value. This attribute is automatically populated when contacts are dialed from a outbound campaign that uses Customer Profiles segments. 
+ Select the appropriate response fields to retrieve. For standard profile attributes (like FirstName, LastName), add them directly. For custom attributes (like AppointmentDate, AppointmentTime), add them as custom response fields by selecting Custom attribute.
+ After the Customer Profiles block, you can access profile attributes using `$.Customer.<AttributeName>` for standard attributes or `$.Customer.Attributes.<CustomAttributeName>` for custom attributes to play custom greetings.

Here are examples of how to use Customer Profile attributes in prompts:
+ Example - Call Answered or Not Detected: "Hello, `$.Customer.FirstName`. This is [your organization] calling to confirm your upcoming appointment on `$.Customer.Attributes.AppointmentDate` at `$.Customer.Attributes.AppointmentTime`. If this is still a good time and date for you, just say, "Confirm". If you would like to use our self service system to modify your appointment, just say, "self service" or stay on the line and we will connect you with the next available agent."
+ Example - Voicemail with or without beep: "Hello, `$.Customer.FirstName`. This is [your organization] calling to confirm your upcoming appointment on `$.Customer.Attributes.AppointmentDate` at `$.Customer.Attributes.AppointmentTime`. If this is still a good time and date for you, we will see you then. If you would like to modify your appointment, please call us back at `$.SystemEndpoint.Address` to reschedule your appointment"
+ Error branch - Occasionally there could be an issue that causes a call to follow the Error branch. As a best practice, use a [Play prompt](play.md) block with a message that applies to the contact that was dialed, with instruction to "Please call us at `$.SystemEndpoint.Address` to confirm or reschedule your appointment." Do this before the [Disconnect / hang up](disconnect-hang-up.md) block in case the call recipient answered, but an error occurred in the processing.

![\[Flow block with answered calls transferred to queue.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/outbound-contact-attributes.png)


### Whisper and queue flow best practices
<a name="whisper-and-queue-oc"></a>
+ Remove the **Loop prompts** from the **Default customer queue** flow and replace them with **End flow / Resume**.  
![\[The Default customer queue set to End flow / Resume.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/cmpgn-default-customer-queue.png)
+ If agents don't answer within 2 seconds of calls going to queue, you can minimize silent calls by using **Loop prompts** and play a message for the customer. The following image shows a typical flow block with a Loop prompt.  
![\[The Default customer queue with a Loop prompt.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/cmpgn-queue-with-loop-prompt.png)
+ Use the **Disable agent whisper** and **Disable customer whisper** options on the [Set whisper flow](set-whisper-flow.md) block. This is so customers perceive less connection latency as part of an outbound campaign. The following image shows the location of the **Disable agent whisper** setting on the block's properties page.  
![\[The Set whisper flow block, the Disable agent whisper setting.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/set-whisper-flow-properties4.png)

### User administration best practices
<a name="user-admin-oc"></a>

We recommend setting the following options for your users to reduce connection times. To access these settings, in the Amazon Connect admin website navigate to **Users**, **User management**, **Edit**. 

These options apply to soft phones only. 
+ [Enable the Auto-accept calls](enable-auto-accept.md). It reduces the potential for call connection latency/delay after a dialed party answers.
+ [Set After Contact Work (ACW) timeout](configure-agents.md) to 30. Minimizing the ACW time will optimize the dialing algorithm when using Predictive dialing campaigns. 
+ [Enable persistent connection](enable-persistent-connection.md). This maintains agent connection after a call ends. It enables subsequent calls to connect faster.

 The following image shows the **Settings** section of the **Edit user** page.

![\[The Auto-accept calls, After Contact Work timeout, and Enable persistent connection settings.\]](http://docs.aws.amazon.com/connect/latest/adminguide/images/cmpgn-user-admin-settings.png)


### Workstation and network best practices
<a name="workstations-oc"></a>

The following best practices can help optimize agent efficiency by ensuring adequate hardware and network resources.
+ Ensure that agent workstations meet the minimum requirements. For more information, see [Agent headset and workstation requirements for using the Contact Control Panel (CCP)](ccp-agent-hardware.md).
+ Ensure that the agent has the CCP or agent workspace open and present on their desktop. This reduces the time spent bringing the screen to the front before greeting the caller.
+ Ensure that agents use a wired network connection. This mitigates potential wireless network latency.
+ If possible, minimize the geographic distance between the AWS Region that hosts your Amazon Connect instance and the agents that interact with the outbound campaigns. The greater the geographic distance between your agents and the hosting Region, the higher the possible latency.

**Note**  
Outbound campaigns have limitations on the numbers that agents can dial, depending on the origin of the Amazon Connect instance. For more information, see the [Amazon Connect Telecoms Country Coverage Guide](https://d1v2gagwb6hfe1.cloudfront.net/Amazon_Connect_Telecoms_Coverage.pdf).

### Testing best practices
<a name="testing-oc"></a>

As a best practice, run tests at scale. To achieve the lowest call connection latency, use outbound campaigns to make hundreds of thousands of continuous calls to mimic your production environment. Call connection latency can be relatively high when making a handful of campaign calls.

## Best practices for answering machine detection
<a name="machine-detection-oc"></a>

To use Answering Machine Detection (AMD) in a campaign, use the [Check call progress](check-call-progress.md) flow block. It provides call progress analysis. This is an ML-model that detects an answered call condition so that you can provide different experiences for calls answered by people and calls answered by machine, with or without a beep. The flow block also provides a branch for routing calls when the ML-model can't distinguish between people and voicemail, or when errors occur in call processing.

AMD uses the following criteria to detect live calls:
+ Background noise associated with a pre-recorded message.
+ Long strings of words such as "Hello, I am sorry I missed your call. Please leave a message at…"
+ A live caller saying something similar to "Hello, hello?" followed by a post-greeting silence.

Forty to 60-percent of calls to consumers go to voicemail. AMD helps eliminate the number of voicemail calls over live calls. However, the detection accuracy has limitations.
+ If the voicemail greeting is a short "Hello" or includes a pause, AMD detects it as a live customer (a false negative).
+ Sometimes a long greeting by a live customer is incorrectly detected as a voicemail (a false positive).
+ There is a small delay while the system connects the call to an agent, which could result in the customer possibly hanging up.
+ PBX (private branch exchange) numbers with multiple levels of voicemail prompts are not supported.

### The pros, cons, and best uses of Answering Machine Detection
<a name="amd-pros-cons-oc"></a>

The use of Answering Machine Detection (AMD) may not comply with telemarketing laws. You are responsible for implementing AMD in a manner that is compliant with applicable laws, and you should always consult your legal advisor regarding your specific use case.

Use case 1: AMD is on and leaving automatic voicemails
+ **Pros** – Agents primarily interact with live calls 95-percent of the time, maximizing talk time. AMD can leave automatic voicemails if a voicemail is detected.
+ **Cons** – The technology leaves a voicemail 50-percent to 60-percent of the time due to false positives due to the large variety of answering machine types. Also, AMD can irritate customers because it adds a short delay to live calls.
+ **Best uses** – Calling consumers during the day when you may get a large quantity of answering machines and it’s not urgent to ensure every call receives a voicemail.

Use case 2: AMD is on but not leaving automatic voicemails
+ **Pros** – Agents primarily interact with live calls 95-percent of the time, maximizing talk time.
+ **Cons** – Cannot leave any voicemails. Adds a delay to live calls which can annoy customers.
+ **Best uses** – Calling consumers during the day when you may get a large quantity of voicemails and you don’t want to leave any voicemails.

Use case 3: AMD is off and agents can leave manual voicemails
+ **Pros** – Voicemails can be left 100-percent of the time.
+ **Cons** – Agents must determine whether they are receiving a live call or voicemail. Must manually leave a voicemail. Most time consuming and can lower the number of calls your agents make in a day.
+ **Best uses** – Calling consumers or businesses and leaving customized voicemails.

Use case 4: AMD is off and agents can leave a prerecorded voicemail
+ **Pros** – Agents can leave a personalized, pre-recorded voicemail 100% of the time saving significant time by avoiding repeating the same message over and over with 'Voicemail Drop'.
+ **Cons** – Agents must determine whether they are receiving a live call or voicemail. More time consuming than AMD but quicker than manually leaving a voicemail.
+ **Best uses** – Calling consumers or businesses and leaving generic voicemails.

## Using sorted segments with outbound campaigns and journeys
<a name="sorted-segments-best-practices"></a>

When you create segments, you can optionally sort them by up to 10 profile attributes. Outbound campaigns and journeys respect this sort order during execution, processing and dialing profiles in the order specified by the segment at the time the campaign or journey runs. When used in a recurring campaign or journey, a sorted segment's order is evaluated every time the campaign or journey repeats and when new profiles are added to a segment.

Sorted segments are useful when you want to:
+ Prioritize high-value customers by sorting on attributes such as lifetime value or account tier.
+ Contact customers with upcoming appointments first by sorting on appointment date.
+ Process time-sensitive communications in a specific order.

**Note**  
The segment sort order applies only to voice campaigns and voice activities in journeys. Other communication channels process profiles in an unsorted order.
Sorted segments are split into 100 batches. Each batch is processed according to the specified sort order. This results in an execution order that is within 1% of the defined segment order.
Initial dial attempts take precedence over any reattempts that are defined in a campaign. In a journey, earlier send communication blocks are prioritized over later ones.

For more information about creating and sorting segments, see [Build customer segments in Amazon Connect](customer-segments-building-segments.md).

## Best practices for ring duration and caller ID
<a name="other-practices"></a>

The following best practices can help you comply with regulations.

**Meet the minimum ring duration requirements**  
Regulations may require unanswered calls to ring for a minimum amount of time, such as 15 seconds, so the customer has time to pick up the call. Amazon Connect outbound campaigns let unanswered calls ring until they go to voicemail or automatically terminate.

**Maintain Calling Line Identification**  
Many locations require you to display the phone number associated with a caller ID. Amazon Connect enforces the use of Calling Line Identification that corresponds to a number in an Amazon Connect instance. The phone number you specify as caller ID for an outbound campaign must be one you have claimed or ported in to your number inventory.