IVR & routing Independent solution

Contact Flow & Routing Designer

Model IVR, contact flows and routing profiles with stakeholders in workshops, then ship them as versioned, tested, reviewable code — so what goes live is what was designed.

The problem

Console-built flows drift from what was designed

Contact flows and routing profiles hand-built in the Amazon Connect console are hard to review before they hit live traffic, easy to break with an untracked edit, and painful to reconstruct after the person who built them moves on.

This solution turns stakeholder workshops into flow designs that are modelled, tested and deployed as versioned code — reviewable like any other change, and rolled back just as easily.

Primary objective
Ship IVR, contact flow and routing changes with the same rigour as any other production deploy.
How it works

Workshop → design flow → simulate → deploy & version

Workshop & map
Stakeholders define call journeys
Design flow
Contact flows & routing profiles
Test & simulate
Call paths validated pre-live
Deploy & version
Staged rollout, instant rollback
What it does
  • ✓ Visual + as-code flow modelling
  • ✓ Skills-based routing profiles
  • ✓ Hours & holiday overrides
  • ✓ Pre-live call simulation
  • ✓ Staged rollout by queue
  • ✓ One-click rollback
Built with
  • ✓ Amazon Connect contact flows
  • ✓ Amazon Connect APIs
  • ✓ AWS Lambda
  • ✓ CloudFormation / Terraform
  • ✓ Git-based CI/CD
Guardrails
  • ✓ Peer-reviewed flow changes
  • ✓ No direct console edits in prod
  • ✓ Automated regression tests
  • ✓ Staged rollout per queue
  • ✓ Full change audit trail
Under the hood

Flows deployed and diffed like any other release

Every contact flow is stored as JSON in Git. Deploys diff against the live published flow before publishing, so nobody ships a change nobody reviewed.

connect/deploy_flow.py PYTHON
import boto3, json

connect = boto3.client("connect")

def deploy_flow(instance_id: str, flow_id: str, path: str) -> dict:
    new_content = json.load(open(path))
    current = connect.describe_contact_flow(
        InstanceId=instance_id, ContactFlowId=flow_id)["ContactFlow"]

    # Require an explicit diff review before any flow reaches production
    diff = flow_diff(json.loads(current["Content"]), new_content)
    if diff and not approved_in_pr(flow_id, diff):
        raise RuntimeError(f"Unreviewed flow change: {len(diff)} nodes")

    return connect.update_contact_flow_content(
        InstanceId=instance_id, ContactFlowId=flow_id,
        Content=json.dumps(new_content))
Outcomes
Zero
Unreviewed prod changes
Minutes
To redeploy a flow
100%
Flows version-controlled
Same-day
Stakeholder sign-off

Ship contact flow changes with confidence

Deploy standalone, or pair it with Managed Operations & Support for governed releases after go-live.

Start a conversation →
More Contact Center solutions
Contact Flow & Routing Designer | Smort