Learn it in 5 minutes
HTMLAbout five minutes of reading
A copied inbound flow drifts. A module has one published body.
Invoke module runs a published module. Return (from module) ends it successfully. The default quota is 200 modules. Inputs and outputs should be attributes you have named, not a comment in the designer.
Global Resiliency replicates modules. A module that calls a Lambda in only one Region will fail in the other Region unless the function is there too.
- Publish, then invoke. A draft module is not what production runs.
- Keep authentication, language selection, and recording policy in modules.
- Version the module in your stack as ContactFlowModule JSON.
- Test the module with the same error branches as a flow.
Number on this page: Modules 200. Default quota
Confirm before relying. Prices, quotas, and exam names change. Use the source linked on this page.
Glossary
- Contact flow The visual program a contact runs. The JSON form is the flow language.
- Flow module A published, reusable piece of a flow. Invoke module runs it. Return ends it. Default quota is 200 modules.
- Contact attribute A string key and value stored on the contact. Lambda, Lex, and Set contact attributes write them. Screen pop reads them.
- Customer queue flow The interruptible flow that runs while the customer waits, before an agent joins.
Mind map
Open the Contact flows mind map
Sister technologies
The flow is the product the caller hears. A missing error branch is a dropped call.
Config and troubleshooting
Fixing a bug in one of eight copied flows.
AWS::Connect::ContactFlow stores the flow-language document in Content. Type CONTACT_FLOW is the inbound flow. Build the JSON in the flow lab, then paste it here.
AWS::Connect::ContactFlow Flow language
CloudFormation study snippet
Resources:
OrderStatus:
Type: AWS::Connect::ContactFlow
Properties:
InstanceArn: !GetAtt CampusInstance.Arn
Name: OrderStatus
Type: CONTACT_FLOW
Content: '{"Version":"2019-10-30","StartAction":"a1","Actions":[{"Identifier":"a1","Type":"MessageParticipant","Parameters":{"Text":"Thanks for calling."},"Transitions":{"NextAction":"a2","Errors":[],"Conditions":[]}},{"Identifier":"a2","Type":"DisconnectParticipant","Parameters":{},"Transitions":{}}]}'
Integration map
Join records on ContactId. The integration map room lists the seams.
Cross-platform bridges
A CUCM calling search space is not a routing profile, but the profile is the closest idea of 'who can receive what'. A partition is not a Connect object. A UCCX CSQ and a UCCE skill group map to a queue. Precision steps map to routing criteria. A script, an Architect flow, and an Avaya vector map to a contact flow.
Open the mapping room
Future hooks
Hooks you can adopt later: EventBridge contact events, the CTR stream, agent events, Kinesis Video, Customer Profiles events, Cases, Show view, data tables, External Tool, and the flow language JSON in your pipeline. Live Sync and Agentic CX are the 2026 hooks for guided and agentic experiences.